Pular para o conteúdo
Experimental · canvas · WebGL

Pixels de canvas vindos da GPU que você declara

Trocar a string da GPU é fácil; trocar os pixels que essa GPU desenharia, não. A ponte de canvas encaminha as operações de canvas e WebGL para uma máquina que realmente tem a GPU que a sua persona apresenta e devolve os pixels dela, então uma página que desenha e lê de volta recebe a resposta que aquela GPU daria.

Experimental e opcional. A maioria dos setups não precisa disso.

Um servidor de renderização, um túnel, uma opção

# on the machine with the real GPU (a Windows GPU for a Windows persona), next to a regular Chrome
# started with --remote-debugging-port=9222 --user-data-dir=<a separate folder>
# (Chrome ignores the port on its default profile)
pip install playwright
python tools/canvas-bridge-server/server.py \
    --backend cdp \
    --cdp-url ws://127.0.0.1:9222/devtools/browser/... \
    --port 8443
# it prints the render GPU's renderer string: use it in step 3

Destaques

Operações, não gravações

Ela encaminha as chamadas de desenho, não uma biblioteca de imagens pré-gravadas, então a maioria dos canvas gerados na hora funciona, e não só os probes conhecidos.

As leituras que importam

getImageData, toDataURL, readPixels e measureText retornam a saída real do host da ponte. O ruído local não é aplicado nesse caminho; os pixels da ponte são a referência.

Política por site

Use a ponte em todos os sites, só numa allow-list de sites onde a coerência do canvas importa, ou em todos, menos os de uma deny-list.

Esperar ou seguir em frente

Num cache miss a frio, o modo block espera pela ponte e o modo local entrega a renderização local, que é rápida, em vez de travar.

Desligada até você configurar

Sem uma URL de ponte, a renderização continua totalmente local. Se a ponte estiver inacessível, o Clearcote registra um aviso no log e volta para a renderização local.

Por que uma ponte, e quanto ela custa

O Clearcote renderiza canvas e WebGL na GPU que o host realmente tiver. Quando uma persona declara outra GPU, verificações que comparam os pixels renderizados com o hardware declarado conseguem ver a diferença, e nenhum software faz uma GPU emitir exatamente os pixels de outra. A ponte elimina a divergência em vez de escondê-la: o desenho acontece na GPU que está sendo declarada.

O servidor de renderização é um pequeno coordenador em Python na máquina com GPU, que controla um navegador ali mesmo (um Chrome comum via CDP, ou um Clearcote headless que ele mesmo inicia) e reproduz as operações encaminhadas no canvas real dele. O cliente abre o socket da ponte a partir do processo renderer, então precisa de --no-sandbox, que o SDK adiciona quando você define uma URL de ponte.

Isso tem custos reais. Uma leitura de pixels que não encontra o resultado no cache da ponte espera um round trip de rede (com timeout de cinco segundos antes do fallback local), e toda chamada a measureText faz um, então mantenha o host de renderização na mesma LAN ou no mesmo datacenter. Além disso, a identidade de canvas passa a ser a do host de renderização, não a do seed: todos os perfis que compartilham um host de ponte compartilham o hash de canvas dele, então rode um host de GPU para cada grupo de identidades que você quer manter separadas.

Para que as pessoas usam

Personas que o host não consegue renderizar

Apresente uma GPU que a sua máquina de automação não tem, com os pixels correspondentes.

Servidores sem GPU

Servidores headless que, sem ela, desenhariam com um rasterizador por software.

Personas mobile

Uma persona Android num motor desktop, com renderização vinda de hardware compatível.

O Clearcote foi feito para privacidade, testes, pesquisa e automação lícita. Você é responsável pela forma como o usa e por seguir os termos dos sites que visita.

Qual plano inclui

Experimental e disponível em todos os planos. O host de renderização fica por sua conta: uma máquina com a GPU que você quer apresentar (uma GPU Windows para uma persona Windows), acessível por uma rede privada.

Comparar planos

Perguntas frequentes

Por que não dá para simplesmente falsificar a GPU?

Dá para falsificar a string da GPU, e o Clearcote faz isso. Mas uma página também pode desenhar algo e ler os pixels de volta, e esses pixels vêm da GPU que fez o desenho. Trocar a string sem trocar os pixels é exatamente o tipo de contradição que as verificações procuram.

Do que eu preciso para rodar?

Uma máquina com GPU real para servir de host de renderização (uma GPU Windows para uma persona Windows; a GPU dela vira a identidade de canvas que os seus perfis apresentam) e um caminho de rede privado até ela, como Tailscale, WireGuard ou um túnel SSH.

É seguro?

A ponte fala WebSocket em texto puro, então rode-a só numa rede privada ou por um túnel criptografado, e nunca exponha a porta da ponte na internet pública. O servidor de referência não verifica o --canvas-bridge-auth, então o seu controle de acesso é a própria rede.

Quais canvas passam pela ponte?

Canvas 2D e WebGL, incluindo texturas WebGL geradas proceduralmente. Fontes de textura de imagem, canvas 2D, vídeo, ImageBitmap e 3D fazem aquele canvas voltar à renderização local, então continuam corretas, mas não passam pela ponte.

Vá mais fundo na documentação

Recursos relacionados

Experimente o Clearcote

Plug-and-play no Playwright e no Puppeteer, coerente até o handshake TLS, com um build de código aberto para começar.

Grátis para um navegador com GitHub. Sem cartão.