Saltar al contenido
Biblioteca abierta · GPL-3.0

Capturas reales, listas para usar

En lugar de una persona sintética derivada de un seed, reporta los valores capturados en una máquina real con Chrome: sus strings de GPU, pantalla, fuentes y conteos de hardware, mediante --fingerprint-profile. La biblioteca clearcote-profiles convierte el dataset abierto chrome-fingerprints (~10k capturas reales de Chrome en Windows) en miles de perfiles coherentes y listos para usar.

72

muestras curadas y validadas — con GPU variadas, listas para usar

~8.5k

perfiles en la biblioteca completa generada

~10k

capturas reales de Chrome en el dataset de origen

Curada, no solo convertida. Se descartan las capturas hechas con renderizado por software (SwiftShader / llvmpipe) o dentro de una VM (Parallels / VMware / VirtualBox): un adaptador de VM ya delata por sí solo. Por transparencia, los registros descartados se conservan en la carpeta excluded/ del repo, junto al manifiesto index.json, que etiqueta cada perfil con el fabricante y la familia de su GPU, su pantalla y su concurrencia (Intel 29 · NVIDIA 34 · AMD 9 en el set de muestras).

Qué incluye un perfil — y qué deja fuera a propósito

Los valores que reporta

  • GPU — los strings de vendor/renderer sin enmascarar de WebGL, la tabla de getParameter y la lista de extensiones soportadas
  • Pantalla — resolución, área disponible, profundidad de color, device-pixel-ratio, gama de colores
  • Hardware — hardwareConcurrency y deviceMemory
  • Fuentes, voces de síntesis de habla, sample rate & latencia de audio

La versión del navegador (siempre al día)

Los perfiles no incluyen el User-Agent, la versión de Chrome ni las brands de UA-CH. El dataset de origen es de Chrome 117; Clearcote incluye un motor mucho más reciente. Importar la versión vieja haría que el navegador declarara 117 mientras se comporta como su versión real, y ese desajuste ya es detectable en sí mismo. Clearcote conserva su propia versión actual; solo se toman prestados los valores capturados.

samples/vinyzu-04201.json — abreviado
{
  "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 }
}

Lo que realmente descargas: cada perfil es un archivo JSON. Este es un equipo de escritorio con Intel Arc A770, con los valores que reportó una máquina real capturados completos: una tabla de driver de Arc A770, 12 hilos, 8 GB, una pantalla de 1080p y 395 fuentes instaladas. Hay 71 más en samples/ y ~8.5k más con generate.py.

Lo que un perfil no es: hardware. Un perfil cambia lo que el navegador reporta. No cambia quién dibuja tus píxeles: el canvas, el readback de WebGL y el audio siguen saliendo de la máquina en la que realmente lo estás ejecutando, y ningún navegador puede cambiar eso. Por eso, dos cuentas con dos perfiles distintos en una misma máquina siguen renderizando un canvas idéntico. Si necesitas que cada cuenta parezca una máquina distinta a nivel de píxel, eso lo da un seed de fingerprint por cuenta, no el perfil.

Cómo configurarlo

Medido con pixelscan y BrowserScan en ~30 configuraciones. Estas dos reglas son las que realmente cambiaron el resultado.

1Reporta la GPU real

Tu host dibuja los píxeles de todos modos. Declarar otra GPU hace que el nombre y el render no coincidan, y los escáneres que calculan un hash de la salida renderizada lo penalizan. Activar disable_gpu_fingerprint=True hace que la GPU reportada coincida con la que hace el trabajo: mueve WebGL y WebGPU a la vez, así que nunca se contradicen entre sí. El perfil sigue aportando pantalla, fuentes y conteos de hardware.

2Un seed por cuenta — y no lo combines con un perfil

Un perfil por sí solo le da el mismo canvas a todas las cuentas, porque sustituye valores reportados y nunca toca el render. El canvas por cuenta sale del seed de fingerprint. Configurar un seed y un perfil capturado a la vez es la única combinación que los escáneres marcan como manipulación — elige uno. Para varias cuentas, elige el seed.

Configuración multicuenta: un seed único por cuenta + GPU real + su propio proxy. Deja activado el ruido de canvas: si lo desactivas, pierdes el canvas por cuenta que acabas de conseguir.

python
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 it

Genera la biblioteca completa

El conversor canónico vive en el repo del navegador y está fijado como dependencia; la curación se aplica encima:

bash
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 set

¿Prefieres usar el mouse?

El Profile Manager recorre esta biblioteca por ti —filtrada por el fabricante de la GPU de tu host— y abre el perfil elegido como una ventana interactiva. Nada de código.

Ventana principal del Clearcote Profile Manager: perfiles guardados como tarjetas con chips de seed de fingerprint, zona horaria, geoip y proxy, cada una con los botones “Launch”, “Edit”, “Duplicate” y “Delete”.