What is canvas fingerprinting?
Canvas fingerprinting renders text and shapes to an off-screen <canvas>, reads the pixels back (toDataURL / getImageData), and hashes them. Sub-pixel differences from your GPU, driver, and font rasterizer make that hash stable per device and fairly distinctive.
Naïve defenses add random per-read noise, but constant randomness is itself a tell (the value changes when a real device's wouldn't) and inconsistent noise across the main thread vs a worker gives it away. The coherent approach is deterministic per-site farbling: the same site always sees the same subtly-shifted value, decorrelated across domains — the model behind Clearcote's canvas control.
When even the noise is scored as tampering, Clearcote can turn it off (fingerprintNoise: false) so the canvas returns its natural value while the rest of the identity stays spoofed, or bridge readbacks to a real GPU. See the canvas bridge.