A Mosaic fingerprint is drawn as a whole machine, not as a set of independent fields. The unit is a device record: one real computer, with its GPU as its driver names it, the CPU thread counts that model ships with, the memory it ships with, and the screens it actually has. Drawing a profile means picking a device and then choosing within it.

Why fields drawn separately go wrong

An earlier version of the generator drew the GPU from one table, the screen from a second and the CPU and memory from a third, each weighted by how common it was. Every single value was plausible. The combinations often were not: an Apple M3 Max beside a 13-inch MacBook Air panel, a laptop RTX 4060 beside a 3440x1440 ultrawide, a ThinkPad's UHD Graphics 620 beside thirty-two threads.

A detector that keeps a table of real hardware reads those instantly, and it reads them as masking, which is worse than any single honest value. With device records, those combinations are not filtered out after the draw. They cannot be built at all.

A profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
A profile's fingerprint: GPU, screen, fonts, timezone and language, with the location taken from the proxy's exit.

Every profile is drawn from one real computer, not from separate listsIn Mosaic: Machines that exist. GPU, screen, CPU and fonts from one real device. Free holds 3 profiles. Pro is $49 a month for any number.

How it works: Machines that exist

Strings measured, not typed

GPU renderer strings are where hand-written values fail. When we compared ours against real machines, renderer strings written by hand were wrong on 41 of 45 Windows rows. They now come from strings observed on real hardware, exactly as a driver reports them.

The rest of the profile follows the same rule. Canvas, audio and WebGL output, fonts, client hints, the speech voice list and media device counts are changed inside the engine, Tesseract Chrome, in C++. A page, an iframe and a worker all read the same values. Why we built our own Chromium explains why that is done in the engine and not with injected JavaScript.

Agreeing with the computer it runs on

Some values cannot be changed honestly, because the host computer answers them from places the engine does not control. A Mac's GPU vendor shows through WebGPU, and the fonts and how they are measured belong to the operating system underneath. So the best match for a profile is the OS of the computer under it: macOS and Android on a Mac, Windows and Android on a Windows PC. Other desktops are allowed. Pick Windows on a Mac and you get a whole Windows record (GPU, screen, threads) plus a caution in the editor, since the fonts stay the Mac's. On our Mac, IPHey scored macOS 100/100 Trustworthy and Windows 80/100 Unreliable; a Linux claim showed 1 font against 159 on Pixelscan, which read it as masking.

Not inherited from you

The opposite mistake is a value copied from your own computer into every profile. We test for it by drawing two profiles and reading the same surface in both: anything identical in both and equal to the host is inherited, not chosen. That test found dark mode, two accessibility settings, the display's color gamut, the monitor count and the scrollbar width all passing through from the host, as CSS and as request headers. Each is now drawn per profile.

Those draws follow what browsers send rather than what surveys say. Dark mode is drawn at 30% because that is roughly how often prefers-color-scheme: dark shows up in real traffic. The survey figure, around 80%, would make every profile stand out.

Matched to the exit

Hardware is half a profile. Timezone, language and location follow the exit of the proxy the profile browses through, measured on each check rather than taken from the proxy's label, so a Berlin exit gets a Berlin clock and German in the language list. Provider accounts give every profile its own exit to match.

Android profiles come from records captured off real phones, with the same rule: one device, its own screen, GPU and User-Agent model, drawn together.

What to check yourself

Open a profile and run its leak test, or point it at a public detector page. Every value in the browser fingerprint entry is one a page can read, and canvas fingerprinting covers the surface people ask about most.