Skip to main content
beeps Blog

Otherkin-friendly CAPTCHAs, revisited

Using userstyles to make CAPTCHAs more respectful of non-human identities.

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: https://maple.pet/
 * Updated by beeps: https://beeps.website/
 * 
 * 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.

Updates

  • 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.

Thought this was neat? Why not ?


66 favourites

61 shares


Comments

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

  1. yingxera@dragon.style

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

  2. polychromata@animalfound.family

    @batbeeps@chitter.xyz 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)

  3. batbeeps@chitter.xyz

    @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.

  4. keeri@pawb.fun

    @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

  5. batbeeps@chitter.xyz

    @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

  6. munsterlandr@chitter.xyz

    @batbeeps it's not working on Cloudflare turnstile again. They changed the challenge-stage id to JStsl2, but even after modifying the script accordingly it's doing nothing.
    Update: managed to fix it by using firefox's userContent.css instead of Stylus, as elements of the captcha are in shadow DOM, as well as previous tweak.

  7. batbeeps@chitter.xyz

    @munsterlandr Guh, that's annoying. Especially if they've started to move more stuff into the shadow DOM.

  8. 5225225@www.librepunk.club

    @batbeeps

    very neat, will try this :3

    (one slight concern it has is some CAPTCHA providers being Silly and. idk, inspecting their own CSS and going "aha this must be a bot(bad)" and flagging it. idk. probably not a concern, but it wouldn't be surprised)

  9. batbeeps@chitter.xyz

    @5225225 I’ve not noticed or had reports of that being an issue, so it outta be fine.

    The main issues I’ve encountered with it are mostly with Cloudflare, who seemingly have multiple versions of their CAPTCHA code used in different contexts.

    The one in the code seems to be the most popular of them, but your mileage may vary.