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:
{
"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:
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.
Use one right now
The repo's samples/ set works out of the box:
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:
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 setRather 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.


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.