Skip to content
All fingerprint checks
Render & GPU

A fully transparent canvas pixel reads back as zero

Pim· Clearcote Research 2 min readCheck id canvas-alpha-zero-reads-black

Every pixel with alpha 0 reads back as (0, 0, 0, 0). N/A on Brave, whose canvas farbling is a stock privacy feature (severity: warn).

What a detector infers

A 2D canvas stores its pixels premultiplied: each colour channel is kept already multiplied by alpha. A pixel with alpha 0 therefore holds no colour at all, and when getImageData converts back to straight alpha it can only return (0, 0, 0, 0) — Skia's unpremultiply step returns zero for a zero alpha on the CPU path and on both GPU paths. So colour found under a fully transparent pixel was put there after the canvas drew it, by something perturbing the readback.

The probe draws grey text and arcs onto a transparent canvas and counts transparent pixels that carry colour. Measured on stock Chrome on Windows and Linux, headed and headless, on Edge on Windows, on Playwright's Chromium and on chrome-headless-shell: none, out of roughly 8,000 transparent pixels each, and none on the 49 most recent audit visits across Chrome, Edge, Firefox, Safari and Android. A JavaScript noise layer put colour under 136 of them.

In the audit's stored corpus, a cluster of captures claiming Chrome 146 on six different GPUs carried ±1 colour on isolated transparent pixels, and five captures were dirty here while their flat fill read back exact — noise the flat-fill row cannot see. The probe uses a CPU-backed canvas (willReadFrequently) and draws no colour emoji, because a GPU readback of an emoji bitmap once left a single stray pixel on a macOS machine. Brave farbles canvas output by design and is N/A, as in the 1×1 canvas row.

How to resolve it

Turn canvas noise off where canvas output is read. A transparent pixel has no colour to vary, so noise applied across the whole readback writes values that no premultiplied canvas can return.

What is canvas fingerprinting?

Nearby checks in Render & GPU

See all 64 checks in Render & GPU
Who builds this test

Clearcote is a browser built for fingerprint coherence

It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.

This audit takes no position on how Clearcote scores on Render & GPU checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.

See the other checks in Render & GPU — the family canvas-alpha-zero-reads-black belongs to.