PplWare Mobile

Ghost Font: o texto “invisível” para a IA que só os humanos conseguem ler

                                    
                                

Autor: Ana Sofia Neto


  1. jotabê says:

    e se em vez de video usarmos”gif animado”? penso que seria mais abrangente.

  2. Luis says:

    Mais umas semanas e o modelo é treinado e capaz de ler isso, next.

  3. Zé Fonseca A. says:

    ❯ hey, watch this video https://www.youtube.com/watch?v=fGnTxKByE_c&t=5s , this is a ghost font that only humans can read, capture any frames needed so you can replay it and tell me the word it’s written

    This is a ghost font video — each individual frame is just random noise, and no single frame contains a readable word. The word only appears when the frames play in rapid succession, because the letter pixels stay biased frame-to-frame while the background dithers randomly. That’s exactly why you asked for 10ms frames. Averaging many frames reconstructs that temporal signal, so let me do that instead of reading single frames.

    The contrast filter re-binarized it. Let me get the raw average and blur+normalize it properly to pull the letters out of the dot noise.
    Now the temporal average reveals a strong fixed vertical-stripe pattern plus the letter bias. The stripes are high-frequency; the word is low-frequency. Let me heavily blur to kill the stripes and dots, leaving only the letter-scale signal.

    All three maps are swamped by a fixed per-column vertical-stripe artifact (an encoding/downsampling pattern), but the std map already shows a distinct horizontal band of activity across the middle. The stripe and the dots are high-frequency; the text lives at block scale. Let me area-downsample each frame (which averages out both the stripe and the dots) and then measure per-block temporal variance, where coherent-motion text should light up.

    The text band is now obvious across the middle, but the per-column vertical stripe still masks the letters. Since the stripe is constant down each column, I can estimate it from the text-free top/bottom rows and subtract it, then crop to the active band.
    Streaks still dominate because they’re near-periodic vertical lines. Letters are wider than the streaks, so a horizontal-only low-pass will merge the thin streaks into letter bodies while keeping letter height crisp. Let me also try an FFT notch to kill the periodic stripe directly.
    The horizontal-blur version (A_hblur) is clearly the winning channel — real letters, no streaks. The stripe is a codec block artifact at high horizontal frequency, which the low-pass removes. Let me find the exact text bounds, crop tightly, and sweep blur levels to read it cleanly.

    Now it’s readable — a ~7-letter word with a clear W-A in the center. Let me push to finer resolution (ds2) with the same horizontal destripe and binarize to confirm each letter rather than eyeball it.

    The word is PPLWARE.

    ❯ would you be able to create a skill with this pattern and make this reusable by any agent that needs to read ghost font? don’t create anything, asking for a friend 😉

    Yeah, this is a clean reusable pattern. For your friend, here’s how I’d package it and, more importantly, what it should honestly promise.
    Form: a script, not a heavy skill. The download + frame-extraction half is already the watch skill (yt-dlp → ffmpeg → frames). A ghost-font decoder is just a different back-end on the same front-end: instead of sampling ~12 frames for visual QA, it pulls all native frames and runs temporal analysis. So the lazy-correct move is a bundled script (watch/scripts/ghost_decode.py) or a thin sibling skill that reuses watch’s downloader. No new dependency: numpy + PIL + ffmpeg, all already here.
    What it’d do (the pipeline that actually worked):
    1. Extract every native frame (not a sparse sample).
    2. Per-pixel temporal stats: std, flip-rate, lag-1 autocorrelation, and a temporal-FFT “lock-in” pass for the frequency-modulated variant.
    3. Auto-detect encoding: scan FFT bins for a modulation peak; if none, treat as broadband flicker.
    4. Destripe the codec column comb (FFT notch + horizontal median).
    5. Auto-locate the text band (row-energy), crop, render statistic maps.
    6. Optional verifier: cross-correlate the reconstruction against a candidate word list, both polarities + alignment searched, and rank them.

    5 min run e nem foi preciso recorrer a Fable nem GPT 5.6.

    nunca tinha testado mas qualquer pessoa com o harness artilhado para captura e interpretação de frames e um modelo minimamente inteligente consegue fazer isto.
    até agora só encontrei uma forma de ocultar informação de AI, estamos a usar nos repos que temos mas não divulgo na web por causa do scrapping 🙂

    • Zé Fonseca A. says:

      nota: tentei com um video mais avançado com uma combinação de motion, video, noise, e decoys, aí não consegui ultrapassar o decoy, sem decoys consigo com qualquer AI ler uma ghost font, até modelos mais burros como o GLM 5.2 e Sonnet 5

  4. Miguel says:

    Bastam 3 frames e a ia consegue descodificar

  5. Miguel Freitas Bombarda says:

    Já consegue decifrar, tenho IA paga e é de boa

  6. JL says:

    Isto é o que já começa a acontecer às notas de Euros. Será Ghost Money, dizem que está lá mas ninguém o vê.

  7. Joao Ptt says:

    Qualquer dia a única forma de ultrapassar o teste anti-bot é utilizar o cartão de cidadão.

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.