Show HN: The text disappears when you screenshot it

10 months ago (unscreenshottable.vercel.app)

You can take TWO screenshots, moments apart, open in GIMP, paste one over the other and choose any one of these laying modes:

Lighten, Screen, Addition, Darken, Multiply, Linear burn, Hard Mix, Difference, Exclusion, Subtract, Grain Extract, Grain Merge, or Luminance.

https://ibb.co/DDQBJDKR

  • > You can take TWO screenshots, moments apart, open in GIMP, paste one over the other and choose any one of these laying modes:

    You actually don't need any image editing skill. Here is a browser-only solution:

    1. Take two screenshots.

    2. Open these screenshots in two separate tabs on your browser.

    3. Switch between tabs very, very quickly (use CTRL-Tab)

    Source: tested on Firefox

  • Neat idea.

    A friend of mine made a similar animated GIF type captcha a few years ago but based on multiple scrolling horizontal bars that would each reveal their portion of the underlying image including letters, and made a (friendly) bet that it should be pretty hard to solve.

    Grabbing the entire set of frames and greyscaling them, doing an average over all of them and then applying a few minor fixups like thresholding and contrast adjustment worked easily enough as the letters were reveleaed in more frames than not (I don't think that would affect the difficulty much though if it were any diffierent). After that the rest of the image was pretty amenable to character recognition.

    • That's reminiscent of a (possibly apocryphal?) method I once read about to get "clean" images of normally crowded public places - take multiple photos over time, then median each pixel. Never had the opportunity to try it myself, but I thought it sounded plausible as a way to get rid of transient "noise" from an otherwise static image.

      3 replies →

  • Out of sheer curiosity, I put three screenshots of the noise into Claude Opus 4.1, Gemini 2.5 Pro, and GPT 5, all with thinking enabled with the prompt “what does the screen say?”.

    Opus 4.1 flagged the message due to prompt injection risk, Gemini made a bad guess, and GPT 5 got it by using the code interpreter.

    I thought it was amusing. Claude’s (non) response got me thinking - first, it was very on brand, second, that the content filter was right - pasting images of seemingly random noise into a sensitive environment is a terrible idea.

  • Bottom layer normal, second layer grain extract, top layer vivid light. This completely blacks out the whole area outside of the text.

This game disappears if you pause it: https://youtube.com/watch?v=Bg3RAI8uyVw

I first saw this effect in a video from Branta Games.

https://www.youtube.com/watch?v=Bg3RAI8uyVw

The effect is disrupted by introducing rendering artifacts, by watching the video in 144p or in this case by zooming out.

I'd love to know the name of this effect, so I can read more about the fMRI studies that make use of it.

What I've found so far:

Random Dot Kinematogram

Perceptual Organization from Motion (video of Flounder camouflage)

https://www.youtube.com/watch?v=2VO10eDIyiE

Others have mentioned Branta Games, but I first saw the effect here: https://youtu.be/TdTMeNXCnTs

  • This one is actually more sophisticated because it doesn't rely on scrolling pixels like the OP. So the object doesn't just disappear in screenshots, but also when the animation stops moving! So you can't actually display text that stands still, like the "hello" in the OP.

https://gist.github.com/jncornett/d7cb397ce3ceff268a0ee1b86f...

On iPhone: screenrecord. Take screenshots every couple seconds. Overlay images with 50% transparency (I use Procreate Pocket for this part)

Has anyone tried a long exposure to see if the motion smears into something discernible? Obviously harder to expose a bright screen without some ND since the shutter speed is the phone's main exposure control

This should have an epilepsy warning. Or something of that kind. It certainly made me feel sick.

  • This is more a curious question for those affected by epilepsy. If you know you are triggered by such things how long an exposure is required to trigger an effect. Are you able notice that media may be triggering and simply close it or is exposure and triggering almost instantaneous?

  • I saw the game using this rendering weeks ago, looked okay. Now I saw a font and tried to hold on to the edges while reading it, and yes, somehow this made me more (sea) sick. Strange.

    Perhaps faces would be strongest in terms of reaction.

I'm wondering. Can we also come up with something the other way around? Text you cannot read, unless you take a screenshot?

  • If you have a very high enough refresh rate display, then yes: just flash alternatingly black-over-white and white-over-black text (i.e. invert it). We perceive essentially a low-pass filtered visual input (with limitations like neural firing rate), eventually it should appear as just uniform gray. Maybe adding some confusing elements might make it feasible at lower refresh rates.

  • Maybe not exactly what you meant but it reminded me about the following: When one of our apple servers failed a decade ago and just vomitted out walls of error logs too fast to read anything,the apple support guy we called took his smartphone and made some photos to read and fix the error.

  • You could probably do it with timing tricks related to video refresh. Wait until the monitor has finished refreshing, then draw the text into the framebuffer. Leave the text there a short while, but erase it before the monitor starts refreshing again. Repeat.

    The screenshot would have a chance of capturing the text, depending on exactly when the screenshot pulls pixel data out of the framebuffer.

    This might not work on certain devices. You need access to the refreshing timing information. The capture mechanism used for screenshots might also vary.

Nice one, the good (great?) thing is that you can save this as a plain old html and you've got the whole code :-) It hasn't got any type of license included or any other info as comments, so perhaps the creator or the OP can let us know.

I don't see any text: just a scrolling down screen of random black/white pixels.

  • It seems to depend on reading pixels from a canvas. This is commonly used for fingerprinting users on the web, so you have to disable some privacy plugins.

> let textString = `hello`

I think further obfuscation could be possible by uglifying the script and providing a SVG path that stores the text as some vector image.

Self modifying code could be useful too, to delete the SVG data once it is in the canvas.

I fully expect this to still be defeated by AI though, such is my presumption that AI is smarter than me, always. It won't care about uglification and it would just laugh to itself at my humble efforts to defeat Skynet.

Regarding practical applications, nowadays kids sell weed online quite brazenly on platforms such as Instagram. Prostitutes also sell their services on Telegram. It is only a matter of time before this type of usage gets clamped down on, so there may come a time when this approach will be needed to thwart the authorities.

Another idea I had with this concept is to make an LLM-proof captcha. Maybe humans can detect the characters in the 'motion' itself, which could be unique to us?

- The captcha would be generated like this on a headless browser, and recorded as a video, which is then served to the user.

- We can make the background also move in random directions, to prevent just detecting which pixels are changing and drawing an outline.

- I tried also having the text itself move (bounce like the DVD logo). Somehow makes it even more readable.

I definitely know nothing about how LLMs interpret video, or optics, so please let me know if this is dumb.

I think there are usecases for this.

Some countries switched to identity apps instead of plastic identity cards. You could make sensitive data non-screenshottable and non-photographable.

A modern variant to the passport anti identity fraud cover: https://merk.anwb.nl/transform/a9b4e52a-9ba1-414b-b199-29085...

The hotel you are checking in doesn't need to know your DOB, length, SSN, birth place, validity and document number. But they will demand a photo of the ID anyway.

  • > You could make sensitive data non-screenshottable and non-photographable.

    That made me curious, so I took a photo of my laptop screen running this page.

    With default camera settingse, the text wasn't visible to me in the photo on my phone screen.

    However, setting the exposure time manually to 0.5s, the text came out white on a noisy background and I could easily read it on the phone screen.

    I would not be surprised if the default camera settings photo could be processed ("enhance!") to make the text visible, but I didn't try.

Neat! I've seen stuff like this that works as a magic eye thing. So you cross your eyes (or make them parallel, depending on the type of image) and it makes a 3d animation appear in front of the page.

Firefox on Android seems to just be a static image, I can't see any text.

  • Probably the result of canvas fingerprinting protection configured in your `about:config`? With a default profile it seems to work fine on Firefox for Android.

    • I haven't changed any of that on here.

      Looks like I consistently get just the static image when I open in a new tab then switch to it, but then if I refresh the page without switching tabs it'll show the animation.

On my Chrome-descended browser, the initial screen is populated by something that appears to be some sort of downsampled grid image, resulting in black and white, but also various shades of grey. However the scrolling text is pure black and white. It also seems the canvas is persistent, so the result is that text on the canvas is leaving a shadow for me, where I can still read the shadow. Somehow the initial noise is not coming out as just black and white pixels.

Doesn't even show anything on LibreWolf, probably disabled WebGL as usual. I thought it was a nice error screen, but apparently it was intended, just without the text :P

Had a lot of fun trying to break this. Turns out you can screenshot real easily by zooming out. Maybe there are other ways but I stopped trying :)

  • yeah - I actually was initially confused since I wasn't having any issues screenshotting it but had forgotten that I have the default site zoom set to ~65%.

  • Not sure what you mean - I can screenshot it freely that's not the point the point is if you look then at the screenshot you cant discern the text because its a single frame now

    • He's right. This is zoomed out: https://imgur.com/a/G7CKZ94

      This is on MacOS 15.6, Chromium (BrowserOS), captured with the OS' native screenshot utility. Since I was asked about the zoom factor, I now tried simply capturing it at 100% and it was still perfectly readable...

      I guess the trick doesn't work on this browser.

      3 replies →

    • Zooming out before taking screenshot and the text is no longer obfuscated. I tried and confirmed it works. In fact, the text is perhaps even more readable than the original.

      3 replies →

Ha cool! How’s it work?

Fun!

I always wanted to make text that couldn't be recorded with a video recorder, but that doesn't seem possible.

Maybe if you knew the exact framerate that the camera was recording at, you could do the same trick, but I don't think cameras are that consistent.

I have to admit it's a pretty cool idea.

At first I was worried that there was a (stupid) API in web browsers just like on mobiles to prevent users from screenshotting something by blanking the screen in the screenshot.

It's a nice effect, but I don't think it's usable in practice, because it's not accessible for visually impaired users: not enough contrast between foreground text and background

So windows 11 easily bypasses this when taking a screenshot. Just switch to video mode. (Yeah yeah. Not technically a screenshot but same default software built in to windows.)

Could someone please post what this disappeared bit is supposed to look like? Looks legible to me when I screenshot and open in Preview on MacOS 15.6.1 (Firefox).

  • You are probably browsing with zoom, that seems to screw up the up rendering and makes the background and text look different. It should be just black&white random pixel noise for both background and foreground, without motion the text becomes invisible, as it blends with the background.

In your phone, just record the screen, then drag the player to see how every still pic blend in within the surroundings, but as soon as it moves it shows up.

This is good but I feel it can somehow be made better!

I like the idea of motion revealing things out of randomness and screenshots are random.

You can just take a screencast though hehe

Is this supposed to show something? All I am seeing is a static noise generated on a moving background towards the bottom. No text.

Yeah but the randomness may produce all kinds of NSFW stuff ...

Also, it's even harder to read than most captchas.

But fun idea, it was nice to see.

I uploaded two images to ChatGPT and asked it to XOR them and give me the result in text.

This could be used for Captcha systems. Would current bots be able to decipher these?

  • Yes, you can make ChatGPT decipher this already.

    But doing this on a massive scale would warm the planet.

    And it's not friendly accessibility-wise.

For what it's worth, there are some websites that embed some crazy shit when you screenshot. On reddit, r/CenturyClub will fill your background with a slightly off-white version of your username so that they can identify leakers, and I'm not certain how exactly they do it.

firefox on linux with a bunch of css stuff set to defaults or none !important shows a static image

Ultimately people will just take photos of the screen. Seems like you’re just annoying people.

I feel like there’s an ethical issue. If something is on my screen I own it. I know the law doesn’t agree but it feels right to me.

  • The point is that it's noise and you can't "capture" a still image of the text / information (relies on motion to be viewable).

Coinbase was hacked for $400M when literally someone from outsourced support services was taking screenshots on their phone!

The culprit had more than 10k photos of all security details for thousands of wealthy customers.

  • If it's even true someone from outsourced support has access to some sensitive security details then using this dumpster is almost like throwing your money out of the window.