Ghost Font: o texto “invisível” para a IA que só os humanos conseguem ler
Num momento em que a Inteligência Artificial (IA) parece capaz de ler tudo o que lhe é mostrado, surge uma experiência que tenta inverter essa lógica: a Ghost Font, um projeto que esconde mensagens em vídeo através de pontos em movimento, legíveis pelo olho humano, mas praticamente indecifráveis pelos modelos mais avançados.
Criada pela Mixfont, a Ghost Font não é uma fonte no sentido tradicional, pois não existe um ficheiro TTF para instalar.
Por sua vez, trata-se de uma experiência visual que transforma texto num pequeno vídeo, onde as letras são formadas por dezenas de pontos em movimento constante.
Enquanto o vídeo está em reprodução, o cérebro humano consegue captar o padrão e "ler" a mensagem através do movimento. Contudo, assim que se pausa o vídeo, ou se tira uma captura de ecrã, os pontos confundem-se com o ruído de fundo e a mensagem desaparece por completo.
Nenhum frame isolado revela o conteúdo; só a sequência em movimento o faz.
Uma ideia com raízes em 2013
Em 2013, o designer Sang Mun lançou a fonte ZXX, pensada para ser ilegível por sistemas de OCR (reconhecimento ótico de caracteres), mas perfeitamente legível por humanos, através de ruído visual, riscos e marcas falsas sobrepostas às letras.
Na altura, a ZXX foi considerada uma solução "à prova de vigilância".
Mais de uma década depois, os modelos de IA atuais conseguem ler esse tipo de texto sem grande dificuldade. Aliás, os autores da Mixfont testaram a fonte com ferramentas de IA generativa e a mensagem disfarçada foi identificada num único pedido.

O ChatGPT leu facilmente um texto escrito com a fonte ZXX. Fonte: MixFont
Ghost Font foi testada contra os modelos mais avançados
Por forma a contornar esta limitação, nasceu a Ghost Font. Segundo os autores, vídeos gerados com esta técnica foram submetidos a alguns dos modelos de IA mais capazes atualmente disponíveis, incluindo ferramentas com capacidades de raciocínio avançado e execução de código.
De acordo com a equipa da Mixfont, os resultados mostraram estes modelos tiveram dificuldade em decifrar a mensagem real, muitas vezes identificando apenas uma "mensagem disfarçada" propositadamente incluída no vídeo como camada adicional de proteção, um truque para despistar qualquer tentativa de análise automatizada mais persistente.
Ainda assim, os próprios criadores reconhecem que a solução está longe de ser infalível. Um agente de IA com acesso a um ambiente de execução de código local poderá, em teoria, analisar o movimento dos pontos ao longo dos vários frames e acabar por reconstruir a mensagem. A verdadeira forma de garantir sigilo absoluto perante a IA continua a ser, dizem, a encriptação tradicional.

O GPT-Sol 5.6 Ultra tentou descodificar uma mensagem escrita com a fonte Ghost. O modelo leu a mensagem disfarçada, mas não conseguiu ler a mensagem real em movimento. Fonte: MixFont
Que aplicações poderá ter?
Entre as ideias apontadas para o futuro deste projeto está a possível integração em sistemas de CAPTCHA, hoje em dia frequentemente resolvidos sem grande esforço por bots equipados com IA.
O uso de movimento em vídeo poderia tornar este tipo de verificação mais difícil de automatizar, mantendo-se simples para um utilizador humano.
Os autores apontam ainda a possibilidade de a Ghost Font servir como uma espécie de benchmark para medir a evolução da perceção visual da IA, especialmente à medida que surgirem modelos verdadeiramente "nativos" em vídeo, capazes de analisar sequências de movimento e não apenas frames isolados.





















e se em vez de video usarmos”gif animado”? penso que seria mais abrangente.
Mais umas semanas e o modelo é treinado e capaz de ler isso, next.
❯ 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 🙂
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
desde quando e’ que o sonnet 5 e’ burro? programacao nao define a capacidade nem a “inteligencia” de uma IA.
Burro = menos inteligente
É preciso explicar tudo, e decifrar ghost font é tudo menos programação
Bastam 3 frames e a ia consegue descodificar
Testado acima
Já consegue decifrar, tenho IA paga e é de boa
Isto é o que já começa a acontecer às notas de Euros. Será Ghost Money, dizem que está lá mas ninguém o vê.
Qualquer dia a única forma de ultrapassar o teste anti-bot é utilizar o cartão de cidadão.