Canvas fingerprint

Your browser draws a small test image, and we hash the pixels. The hash is the same on every visit from the same machine and differs between machines, which is why websites use it to recognize you.

Your canvas image

Not run
Enable JavaScript to run this test in your browser.
Canvas hash
detecting…
Image data
—
Browser
unknown

The image is drawn by your browser from the same instructions every visitor receives. Tiny rendering differences in fonts, anti-aliasing and GPU produce a different hash.

Sponsored · advertise here

How this test works

Web pages can draw on a canvas element: text, lines, curves, gradients and images, all rendered by the browser using the operating system's font engine and, in most cases, the graphics card. The page can then read the rendered pixels back as data. Nothing about that is unusual; charts, games and image editors rely on it. Fingerprinting uses the fact that the rendering is not identical everywhere.

This page performs the standard version of the technique in your browser and shows you what is normally hidden:

  1. The script draws a fixed scene onto a 300 by 80 pixel canvas: text in more than one font, so font substitution and rasterization show up, overlapping shapes with partial transparency so colors blend, and curves with antialiased edges.
  2. It exports the canvas as an image data string, the same call a tracking script makes.
  3. It hashes that string and prints the hash, together with the length of the data string, which is a rough indicator of how complex the rendered image is.
  4. The drawn canvas is displayed on the page rather than hidden, so you can see exactly what was hashed.
  5. The run button repeats the whole process so you can check whether the hash is stable.

The hash is computed from the pixels, not from any description of your device, which is why two browsers that report the same user agent can produce different hashes: they rendered the text differently. On the same machine and browser version, the result is the same every time unless something deliberately changes it.

How to read your result

What you see Meaning
The image renders and the hash is identical on every run Normal. This is the stable identifier that sites can use to recognize this browser on this machine.
The image renders and the hash differs between runs Canvas randomization is active, from a browser privacy setting or an extension. Sites cannot track you by canvas, and scripts that read the canvas twice can tell it is being randomized.
The image is blank, the hash is empty or the status says blocked Canvas reading is blocked by a setting or extension. Trackers get nothing, and they also see a browser that blocks canvas, which is rare.
The image looks wrong, with missing glyphs or boxes A font is missing or substituted. Still a valid fingerprint; it just identifies a machine with that font setup.
The hash matches a run from a different profile or session The two sessions share the same rendering stack: same machine, browser version and settings. If they were meant to look like different devices, they do not.

The data length is a secondary clue. A much shorter string than another device of the same class means a simpler rendering, for example no color emoji support or a software renderer; a changed length between runs while the drawing is the same points to noise being added.

For checking a login setup, the result you want is the first row, in the profile you will use, with the same hash every time you open this page. For anonymous browsing, the second row is what a privacy-oriented browser produces by design.

How to fix it

To stop canvas tracking in everyday browsing:

  1. Firefox: open about:config and set privacy.resistFingerprinting to true. Sites that try to read a canvas get a blank result unless you grant permission from the icon in the address bar.
  2. Brave: canvas is randomized per site by default under Shields, with the fingerprinting setting at its standard level. Set it to strict for stronger protection, at the cost of some sites misbehaving.
  3. Chrome, Edge and other Chromium browsers: there is no built-in setting. An extension that adds canvas noise, such as CanvasBlocker-style tools, does the job; prefer one that adds noise rather than blocking outright, which is more conspicuous.
  4. Safari: there is no user switch for canvas specifically. Its tracking protection targets other techniques; use a different browser if canvas protection is a requirement.
  5. Reload this page and run twice. A changing hash confirms the protection is active.

To keep the hash stable for an account you log into through a proxy or VPN:

  1. Use a dedicated browser profile for that account, with canvas noise off in that profile. In Firefox, leave privacy.resistFingerprinting at false there. In Brave, allow fingerprinting for the site or use a profile with Shields relaxed. Remove canvas extensions from that profile.
  2. Do not change the browser version, display scaling or installed fonts on that machine more than you have to; each of those changes the hash, and a changed hash looks like a new device.
  3. Run this page twice from the profile before logging in. Same image, same hash, both times.
  4. Then run the browser fingerprint test for the other signals, and the anonymity score for the IP-side checks.

In antidetect browsers:

  1. The canvas setting usually offers off, noise or block. Noise generates a consistent per-profile distortion so that each profile gets a different but stable hash; that is the mode to use when several profiles run on one machine and must look like separate devices.
  2. Verify here that the hash is stable within a profile and different between profiles. Two profiles with the same hash on this page will look like the same device to any site that reads the canvas.
  3. Avoid block mode for logins; an unreadable canvas is a rarer trait than any particular hash.

Limits of this test

  • No population to compare against. We show your hash; we do not know how many other machines produce it, and we will not guess. Uniqueness claims require a database of visitors that this page does not keep.
  • One drawing. Tracking scripts use their own drawings, so your hash here differs from your hash on any other site. The property that carries over is stability: if the hash is stable here, it is stable for other drawings too, and if it is randomized here, it is randomized everywhere.
  • Noise detection is a heuristic. The page compares runs; a browser that randomizes only once per session, or per site, will look stable here while still defeating cross-site tracking. That is a good outcome for privacy and a confusing one for this test.
  • Canvas is one signal. WebGL, audio, fonts, screen and the passive headers remain readable when canvas is blocked. See the full fingerprint test for the rest.
  • What you see is after any extension has acted. The page cannot tell a genuinely rendered image from one modified by an extension; it can only tell you whether the result changes.

Why the same drawing produces different pixels

Text rendering is the main source. Each operating system has its own font rasterizer and its own rules for hinting and subpixel antialiasing, and the exact set of installed fonts decides which glyphs are used when a requested font is missing. Graphics hardware is the second source: when the browser accelerates canvas drawing with the GPU, the driver decides how edges are smoothed and how colors are blended, and different cards and driver versions round differently. The third source is the browser itself, since each engine draws curves and composites transparency slightly differently and changes those details between versions. Any one of these differences shifts a few pixels, and a hash of the whole image changes completely when a single pixel does. The canvas fingerprint glossary entry has a longer explanation of the rendering pipeline.

How websites use the canvas hash

By itself the hash identifies a rendering stack: a machine model, operating system, browser version and font set. Combined with a handful of other values it narrows down to a small group of devices, and combined with an IP address, a time zone and a login it narrows down to one person's setup. Trackers use it to recognize a browser across sites where cookies are blocked. Fraud and account-security systems use it the other way around: they store the hash seen at signup and at past logins, and treat a login with a different hash from a different address as a new device that deserves a challenge. That is the reason the advice differs by goal. For privacy from trackers, make the hash change. For a trusted login, make it never change.

Canvas noise: when it helps and when it hurts

Noise helps when you want to be unrecognizable across sites, and the cost is small: a few sites that use canvas for real work may misrender, and scripts that look for randomization will know you use it. Noise hurts when a service already knows your browser and expects to see it again, because every visit then arrives as a new device, which invites verification emails, two-factor prompts and, on strict platforms, reviews. The clean solution is separation: a privacy browser with noise for general browsing, and a stable, unremarkable profile for the accounts that matter, tested here before use.

Questions people ask

What is canvas fingerprinting?

A technique where a website draws text and shapes on an invisible canvas element and reads the pixels back. Small differences in fonts, antialiasing, graphics hardware and drivers make the pixels differ between machines, and a hash of them becomes an identifier that needs no cookie.

Why does my canvas hash change every time I run the test?

A privacy feature or extension is adding noise to the canvas on each read. That stops sites from recognizing you by canvas, and it also marks the browser as one that randomizes, which some sites treat as a signal.

Is my canvas hash unique?

We do not keep a database of visitors, so we cannot say how many machines share your hash. In general, the same model of laptop with the same operating system and browser version produces the same hash, so it is a device-class identifier more than a personal one.

Does blocking canvas make me anonymous?

No. It removes one signal out of many. A blocked or empty canvas is itself unusual and visible to scripts, and other signals such as WebGL, fonts and screen still identify the device class.

Should I turn canvas noise on or off for logins?

Off, in the profile you log in with. A login system compares this visit with earlier ones, and a hash that changes on every visit never matches. Turn noise on for anonymous browsing where you do not want to be recognized across sites.

Why is the test image so small?

The image only needs to exercise the parts of rendering that differ between machines: text in a few fonts, antialiased curves and blended colors. A 300 by 80 pixel drawing does that, and keeping it small makes the test instant.

Does private mode change the canvas hash?

No. The canvas is rendered by the same hardware and software in private mode, so the hash is identical. Only a different browser, device or a noise setting changes it.