Skip to main content

Otherkin-friendly CAPTCHAs, revisited

A fake screenshot of a checkbox-type CAPTCHA, with the text reading 'I am a robot' and the box checked.

This is an updated version of a blog post by mavica. All credit for this idea belongs to byte.

For some reason, CAPTCHAs have a bit of a thing for telling the user they are human. I mean, it’s literally in the name: “Completely Automated Public Turing (test to tell) Computers and Humans Apart”. CAPTCHA.

I reject that label. I am not human. Stop telling me that my ability to click a box, type some letters, or know what a traffic light is automatically makes me human. I’m pretty sure a capable machine learning algorithm or a decently intelligent vole could do the same things.

In yesterday’s post about userstyles, I made note that I use them to replace the text on CAPTCHAs with identity-affirming equivalents—erasing that unnecessary little microaggression from my day.

Perhaps unsurprisingly, I know a lot of folks who feel the same way and have asked how to do it, so here’s the userstyle code I use, adapted from the code by mavica. Replace the text with something more appropriate to your species or form!

 * Override the text of CAPTCHAs. Don't be rude to robots.
 * Originally by mavica:
 * Updated by beeps:
 * Covers:
 * (1) Google reCAPTCHA
 * (2) hCaptcha
 * (3) Cloudflare Turnstile
 * (4) Microsoft CAPTCHA
 * (5) Friendly Captcha
/* 1 */ #recaptcha-anchor-label,
/* 2 */ body > div#anchor > div.label-container > label-td > label-tc > div#label,
/* 3 */ div#content div#challenge-stage div.cb-c label.cb-lb span.cb-lb-t,
/* 4 */ #root > .box > .box > p[data-theme="home.instructions"],
/* 5 */ .frc-captcha .frc-text {
  font-size: 0 !important;
  line-height: 0 !important;

/* 1 */ #recaptcha-anchor-label::before,
/* 2 */ body > div#anchor > div.label-container > label-td > label-tc > div#label::before,
/* 3 */ div#content div#challenge-stage div.cb-c label.cb-lb span.cb-lb-t::before,
/* 4 */ #root > .box > .box > p[data-theme="home.instructions"]::before,
/* 5 */ .frc-captcha .frc-text::before {
  font-size: 14px;
  line-height: 1.2;

/* 1 */ #recaptcha-anchor-label::before,
/* 2 */ body > div#anchor > div.label-container > label-td > label-tc > div#label::before,
/* 3 */ div#content div#challenge-stage div.cb-c label.cb-lb span.cb-lb-t::before {
  /* Message that usually appears next to a checkbox. */
  content: "I'm a robot";

/* 4 */ #root > .box > .box > p[data-theme="home.instructions"]::before,
/* 5 */ .frc-captcha .frc-text::before {
  /* Message that usually appears before a challenge. */
  content: "Prove you are a robot.";

/* 5 */ .frc-captcha .frc-success .frc-text::before {
  /* Message that usually appears after completing a challenge. */
  content: "You're a robot!";

Apply the code according to your browser’s requirements. You can see if it’s worked by going to the reCAPTCHA demo or hCaptcha demo pages.

If there are other CAPTCHA systems that aren’t included yet, let me know! I’ll try and update this style to account for them.

Thanks again to mavica. Why not check out bytes Netizen link cache? It makes me wanna make some 88×31 pixel buttons.


  • 2023-12-12: Updated to add Friendly Captcha support and restructure the code a little.
  • 2024-05-17: Code updated to account for updates to Cloudflare Turnstile. Thanks to rk for helping identify the changes.

40 favourites



Thoughts? Questions? You can favourite, share or comment on this post by replying to it on Mastodon.


    @batbeeps @mavica_again oooo that looks useful. Been cursing captchas for a while over this. Thank you!

  2. I'm absolutely for fixing human centrism, and also we need more things that don't need complicated CAPTCHAs at all[*] but rather can rely on real moderation and just turning the thing off for a few hours during attacks. build small, don't scale giant.

    (*: simple ones like /leave this field blank/ and /what's 4 + 1?/ are fine and good)


    @polychromata Oh absolutely, CAPTCHAs are garbage experiences for a lot of _actual_ humans.

    Honeypot fields are unfortunately less effective nowadays, but that's where using code to flag obvious spam and the element of manual moderation comes into it.


    @batbeeps had to change "cf-stage" to "content" for the turnstile one to work, but now the internet is asking me if i'm a critter and that's good


    @keeri Huh, they must've updated their code since. Turnstile is really hard to test with cuz it doesn't even show the message most of the time XP