Skip to content
Open library · GPL-3.0

Real machines, off the rack

Instead of a synthetic seed-derived persona, present the device identity of a real Chrome machine — its GPU, screen, fonts and hardware — via --fingerprint-profile. The clearcote-profiles library converts the open chrome-fingerprints dataset (~10k real Windows-Chrome captures) into thousands of coherent, ready-to-use profiles.

72

curated, validated samples — GPU-diverse, ready to use

~8.5k

profiles in the full generated library

~10k

real Chrome captures in the source dataset

What a profile carries — and what it deliberately doesn't

The device (borrowed)

  • GPU — WebGL unmasked vendor/renderer, the driver getParameter table, and the supported-extension list
  • Screen — resolution, available area, color depth, device-pixel-ratio, color gamut
  • Hardware — hardwareConcurrency and deviceMemory
  • Fonts, speech-synthesis voices, audio sample-rate & latency

The browser version (kept current)

Profiles do not carry the User-Agent, Chrome version or UA-CH brands. The source dataset is Chrome 117; Clearcote ships a much newer engine. Importing the old version would make the browser claim 117 while behaving like its real version — a mismatch that is itself detectable. Clearcote keeps its own current version; only the device is borrowed.

Curated, not just converted. Captures taken under software rendering (SwiftShader / llvmpipe) or inside a VM (Parallels / VMware / VirtualBox) are filtered out — a VM adapter is its own tell. The rejected records are kept in the repo's excluded/ folder for transparency, alongside the index.json manifest that tags every profile with its GPU vendor, family, screen and concurrency (Intel 29 · NVIDIA 34 · AMD 9 in the sample set).

What you actually download

Each profile is one JSON file. This is samples/vinyzu-04201.json — an Intel Arc A770 desktop — abridged for display:

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

One real machine, captured whole: an Arc A770 with its driver table, 12 threads, 8 GB, a 1080p screen and 395 installed fonts. 71 more ship in samples/, ~8.5k more via generate.py.

Two rules that beat noise

Strict tampering classifiers check whether the whole device is internally coherent — these two rules are what drop that score sharply.

1Match your host GPU vendor

Clearcote renders canvas/WebGL on the real host GPU, so the imported renderer string should come from the same vendor — Intel host → Intel profile. A cross-vendor profile makes the claimed GPU contradict the actual render. The manifest exists for exactly this filter:

python
import json, random, clearcote

index = json.load(open("samples/index.json"))
pool = [p for p in index["profiles"] if p["gpu_vendor"] == "Intel"]  # YOUR host
choice = random.choice(pool)

browser = clearcote.launch(
    fingerprint="user-1",
    fingerprint_profile=f"samples/{choice['id']}.json",
    fingerprint_noise=False,  # rule 2
)

2Turn the farbling noise off

The per-site canvas/WebGL/audio noise is an added perturbation layer on top of the real render — and strict ML classifiers recognize that layer itself. With a coherent imported profile you don't need it: the profile already supplies the identity, and per-profile uniqueness comes from the differing device characteristics.

Set fingerprint_noise=False for those sites. The noise stays on by default everywhere else.

Strongest setup: a captured profile whose GPU vendor matches your host + noise off.

Use one right now

The repo's samples/ set works out of the box:

python
import clearcote

browser = clearcote.launch(
    fingerprint="user-1",
    fingerprint_profile="samples/vinyzu-04201.json",  # an Intel Arc A770 desktop
)

Generate the full library

The canonical converter lives in the browser repo and is pinned as a dependency — curation is layered on top:

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

Rather point and click?

The Profile Manager browses this library for you — filtered by your host's GPU vendor — and launches the pick as an interactive window. No code at all.

The Clearcote Profile Manager main window: saved profiles as cards with fingerprint seed, timezone, geoip and proxy chips, each with Launch, Edit, Duplicate and Delete buttons.
The profile editor dialog: fingerprint seed, platform and brand selectors, timezone, proxy, geoip auto-match, tags and a live launch-command preview.

More about the Profile Manager

License & attribution. The profiles are derived from chrome-fingerprints © Vinyzu, so the library is GPL-3.0 — note this differs from the Clearcote browser itself, which is BSD-3-Clause. Keep the attribution and license if you redistribute.