Capturas reais, prontas para usar
Em vez de uma persona sintética derivada da seed, informe os valores capturados de uma máquina real com Chrome — strings de GPU, tela, fontes e contagens de hardware — via --fingerprint-profile. A biblioteca clearcote-profiles converte o dataset aberto chrome-fingerprints (~10k capturas reais do Chrome no Windows) em milhares de perfis coerentes, prontos para usar.
72
amostras curadas e validadas — GPUs variadas, prontas para usar
~8.5k
perfis ao gerar a biblioteca completa
~10k
capturas reais do Chrome no dataset de origem
Curadas, não só convertidas. Capturas feitas com renderização por software (SwiftShader / llvmpipe) ou dentro de uma VM (Parallels / VMware / VirtualBox) são descartadas — um adaptador de VM já é um indício por si só. Por transparência, os registros rejeitados ficam na pasta excluded/ do repo, junto com o manifesto index.json, que marca cada perfil com o fabricante e a família da GPU, a tela e a concorrência (Intel 29 · NVIDIA 34 · AMD 9 no conjunto de amostras).
O que um perfil traz — e o que ele deixa de fora de propósito
Os valores que ele informa
- GPU — as strings unmasked de vendor/renderer do WebGL, a tabela de getParameter e a lista de extensões suportadas
- Tela — resolução, área disponível, profundidade de cor, device-pixel-ratio, gama de cores
- Hardware — hardwareConcurrency e deviceMemory
- Fontes, vozes de síntese de fala, taxa de amostragem & latência do áudio
A versão do navegador (sempre atual)
Os perfis não trazem o User-Agent, a versão do Chrome nem as brands do UA-CH. O dataset de origem é do Chrome 117; o Clearcote vem com um motor muito mais novo. Importar a versão antiga faria o navegador declarar 117 enquanto se comporta como a versão real — uma inconsistência que, por si só, é detectável. O Clearcote mantém a própria versão atual; só os valores capturados são emprestados.
{
"meta": { "id": "vinyzu-04201", "gpu_vendor": "Intel", "gpu_family": "Arc" },
"hardware_concurrency": 12,
"device_memory": 8,
"screen": { "width": 1920, "height": 1080, "color_depth": 24, "device_pixel_ratio": 1 },
"webgl": {
"UNMASKED_VENDOR_WEBGL": "Google Inc. (Intel)",
"UNMASKED_RENDERER_WEBGL": "ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)"
},
"fonts": { "detected": ["Arial", "Calibri", "Cambria", "Consolas", "Segoe UI", "… 390 more"] },
"audio": { "BaseAudioContextSampleRate": 48000, "AudioContextBaseLatency": 0.01 }
}O que você baixa de fato: cada perfil é um arquivo JSON. Este é um desktop com Intel Arc A770 — os valores informados por uma máquina real, capturados por inteiro: uma tabela de driver da Arc A770, 12 threads, 8 GB, uma tela 1080p e 395 fontes instaladas. Outros 71 vêm em samples/, e mais ~8.5k via generate.py.
O que um perfil não é: hardware. Um perfil muda o que o navegador informa. Ele não muda quem desenha os seus pixels — canvas, readback de WebGL e áudio continuam vindo da máquina em que você está rodando de fato, e nenhum navegador consegue mudar isso. Por isso, duas contas com dois perfis diferentes na mesma máquina ainda renderizam um canvas idêntico. Se você precisa que cada conta pareça uma máquina diferente no nível dos pixels, isso vem de uma seed fingerprint por conta, não do perfil.
Como configurar
Medido no pixelscan e no BrowserScan em ~30 configurações. As duas regras abaixo são as que realmente mudaram o resultado.
1Informe a GPU real
Quem desenha os pixels é o seu host, de um jeito ou de outro. Declarar outra GPU faz o nome e a renderização não baterem, e os scanners que calculam o hash da saída renderizada penalizam isso. Ativar disable_gpu_fingerprint=True faz a GPU informada coincidir com a que realmente faz o trabalho — isso altera WebGL e WebGPU juntos, então os dois nunca se contradizem. O perfil continua fornecendo tela, fontes e contagens de hardware.
2Uma seed por conta — e sem combiná-la com um perfil
Sozinho, um perfil dá o mesmo canvas a todas as contas, porque ele substitui valores informados e nunca mexe na renderização. O canvas por conta vem da seed fingerprint. Definir uma seed e um perfil capturado ao mesmo tempo é a única combinação que os scanners apontam como tampering — escolha um dos dois. Para várias contas, escolha a seed.
Setup para várias contas: uma seed única por conta + GPU real + um proxy próprio. Deixe o ruído de canvas ligado — desligá-lo elimina justamente o canvas por conta que você acabou de montar.
import clearcote
# ONE ACCOUNT, ONE IDENTITY — the multi-account setup
browser = clearcote.launch(
fingerprint="acct-1", # unique per account: this is what varies the canvas
disable_gpu_fingerprint=True, # report the real GPU, so name and render agree
geoip=True, # timezone + language follow the proxy
proxy={"server": "..."}, # one per account
) # note: no fingerprint_profile — a seed replaces it
# A CAPTURED MACHINE INSTEAD — for a single identity, not a fleet
# (the repo's samples/ set works out of the box)
browser = clearcote.launch(
fingerprint_profile="samples/vinyzu-04201.json", # an Intel Arc A770 desktop
disable_gpu_fingerprint=True,
) # note: no fingerprint seed alongside itGere a biblioteca completa
O conversor canônico fica no repo do navegador e é fixado como dependência — a curadoria é aplicada por cima:
pip install -r requirements.txt # dataset + canonical converter
python generate.py # -> profiles/*.json (~8.5k profiles)
python generate.py --samples 80 --out samples # regenerate the sample setPrefere apontar e clicar?
O Profile Manager navega por esta biblioteca para você — filtrada pelo fabricante da GPU do seu host — e abre o perfil escolhido em uma janela interativa. Sem nenhuma linha de código.

Licença & atribuição. Os perfis são derivados de chrome-fingerprints © Vinyzu, por isso a biblioteca é GPL-3.0 — atenção: isso é diferente do próprio navegador Clearcote, que é BSD-3-Clause. Mantenha a atribuição e a licença se for redistribuir.
Profile Manager
Um app desktop que mostra esta biblioteca filtrada pelo fabricante da GPU do seu host — e abre o perfil escolhido com um clique.
Flags de fingerprint
A referência completa de --fingerprint-profile e de todas as outras flags de identidade.
Por que a coerência vence
Como a detecção de bots funciona de verdade — e o motivo de essas regras existirem.