Skip to content

Image Diff

Compares two images pixel by pixel and highlights what changed, with a perceptual difference score.

Two screenshots that should be identical, and the question of whether they are. A changed-pixel count alone cannot answer it — antialiasing changes thousands of pixels and means nothing — so this reports SSIM and DSSIM beside it, and gives you four ways of looking at the difference.

🔒 Runs entirely in your browserdiffcompareqavisual

Drop the “Before” image

Any format the browser can decode.

Drop the “After” image

Any format the browser can decode.

Highlight

How to use it

  1. Drop the before and after

    Different sizes are accepted: both are padded to the union with transparency, so the overlap is compared properly and the non-overlap shows up as a difference — which it is.

  2. Set the tolerance

    Measured in YIQ, so a luminance change counts for roughly 2.5× a hue change of the same size — which is how the eye ranks them. At 0 a single code value anywhere is a failure.

  3. Read the two kinds of number together

    2% of pixels changed with SSIM 0.999 is antialiasing. 2% with SSIM 0.94 is something moving.

  4. Use the wipe for small shifts

    It puts the two versions in the same retinal position, which is the only way a sub-pixel shift becomes visible — the eye cannot carry that much detail across the saccade a side-by-side comparison needs.

Common questions

What is a good SSIM?

Above about 0.99 the two images are the same picture with rendering noise between them. Below 0.95 something actually differs. There is no universal threshold; compare against a known-good pair from your own pipeline.

Why does DSSIM differ from SSIM?

DSSIM does the same structural comparison in L*a*b* across five scales, so a colour-only change counts and a difference at one zoom level does not hide behind another. Where they disagree, the change is colour rather than structure.

Can I use it for visual regression testing?

For looking at a failure, yes — that is what the four views are for. For running the comparison in CI you want the same arithmetic in your test runner rather than a browser tab.

Feed it from

Next

These accept what this tool produces, so the result can go straight in.