Grey drawing reads back as grey
Every grey pixel reads back with red, green and blue equal. N/A on Brave, whose canvas farbling is a stock privacy feature (severity: warn).
What a detector infers
Text, arcs and gradients drawn in a neutral grey on a transparent canvas read back with the three colour channels equal. The rasteriser computes one coverage value per pixel and applies it to a colour whose red, green and blue are the same, so nothing in the pipeline can pull them apart. Sub-pixel (LCD) text anti-aliasing, which does treat the channels differently, is only used on opaque canvases, and the probe's canvas is transparent.
Noise added per channel breaks the equality on every pixel it touches, at any amplitude, and that is what this row counts: pixels with alpha above zero whose red, green and blue differ. Measured on stock Chrome on Windows and Linux, on Edge on Windows, on Playwright's Chromium and on chrome-headless-shell: none of roughly 6,000 grey pixels.
The failing side is a per-channel noise layer written for this test (176 non-grey pixels), not a captured tool, and the stored corpus could not be replayed against it because its canvas has no grey content — so evidence of real-world failures is still to come. It shares its canvas with the transparent-pixel row and reads something different: that row asks whether empty pixels stay empty, this one whether coloured pixels keep their hue. Brave is treated as it is in the other canvas rows.
How to resolve it
Leave canvas readback unperturbed where it is read. A grey drawing has exactly one kind of answer — three equal channels — so noise shows up here at any amplitude.
Nearby checks in Render & GPU
- A fully transparent canvas pixel reads back as zero
canvas-alpha-zero-reads-blackA 2D canvas stores its pixels premultiplied: each colour channel is kept already multiplied by alpha. - A Direct3D renderer only appears under a Windows claim
d3d-renderer-only-on-windowsDirect3D is a Windows API. ANGLE, the layer Chromium renders WebGL through, only names it in the unmasked renderer string when it is running… - A Direct3D 11 renderer reports the caps ANGLE's D3D11 backend fixes
webgl-d3d11-fixed-capsWhen ANGLE runs WebGL on Direct3D 11 at feature level 11 — the renderer string reads Direct3D11 vs_5_0 ps_5_0 — it does not ask the driver… - Every extension WebGL hands out is one it advertises
webgl-gettable-is-advertisedIn Chrome, getSupportedExtensions() and getExtension() read the same set: an extension the context can hand out is one it lists, and one it… - WebGL state reads back what the page just set
webgl-state-reads-backSome WebGL parameters are not capabilities but state the page itself controls. - readPixels writes only the pixels it was asked to read
webgl-readpixels-sentinelreadPixels writes into an array the page supplies, and the WebGL specification is precise about the edges: when the requested rectangle… - A worker OffscreenCanvas encodes the pixels it reads back
offscreen-canvas-exits-agreeA canvas has more than one way out. getImageData hands pixels straight to script; convertToBlob encodes the same pixels into a file, and… - WebGPU's preferred canvas format belongs to the claimed OS
webgpu-canvas-format-vs-osnavigator.gpu.getPreferredCanvasFormat() returns the texture format the platform's compositor wants to be handed, and Chrome on Windows and…
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-grey-stays-grey belongs to.
