ComparePicture

Image diff with numbered, reviewable changes

A diff is only useful if you can act on it. This one groups changed pixels into regions, describes each one, and lets you step through them like a code review.

Private · Browser-based · No uploads

Two pictures in, every difference out.

  1. 1. Drop, paste or choose the earlier picture as A.
  2. 2. Add the later one as B — or drop both at once.
  3. 3. The comparison starts by itself; switch views any time.

PNG, JPEG, WebP, GIF (first frame), AVIF, BMP and HEIC where this browser can decode it. Different sizes are fine — they are aligned for you.

Both files are read by this page on your device. There is no upload step, because there is no server to upload to.

Or try an example pair

ABeforeChoose image Adrag & drop, or paste with Ctrl/⌘ VPress Enter to choose image A, or drop a file here.
BAfterChoose image Bdrag & drop, or paste with Ctrl/⌘ VPress Enter to choose image B, or drop a file here.

Six ways to draw a difference

Each view answers a slightly different question about the same set of changed pixels.

  • Highlight — changed pixels in magenta over a faded copy of A. The default, and the fastest way to read a diff.
  • Mask — only the changed pixels, on transparency. Export it and drop it onto a bug report.
  • Difference — the absolute colour difference per channel, amplified so a one-level shift becomes visible.
  • Heatmap — how much each pixel changed, from dark (nothing) to yellow (a lot).
  • Lighter / darker — blue where B is lighter than A, orange where it is darker. Useful for exposure edits and for telling an added element from a removed one.
  • Structure — where the local structure (SSIM) differs, which ignores uniform tone shifts entirely.

Tolerance, in numbers you can reason about

The threshold is a fraction of the largest possible colour distance, measured in YIQ space where brightness differences count about twice as much as hue differences — which is roughly how the eye weighs them. At 0 every differing pixel counts; at 0.1 the near-invisible shifts that a PNG optimiser or a different GPU leaves behind are ignored; above 0.3 only obvious changes remain.

Minimum region size and grouping distance work on the result rather than the pixels: raise the first to drop isolated specks, raise the second to merge the letters of a changed word into one region.

When the pictures moved, not changed

If B is the same content shifted or rescaled, a naive diff reports the whole picture as changed. Auto-alignment estimates the shift and scale first, so the diff shows what actually differs. For a single element that moved, the region is labelled with the displacement it found — a local search for the same content nearby in B.

Questions people ask

›What does the anti-aliasing option do?

Pixels on the soft edge of text and shapes often differ between two renders of the same thing. With the option on, a differing pixel that sits on a one-pixel gradient between flat areas present in both pictures is treated as rendering noise, drawn in amber if you choose, and left out of the counts.

›Can I ignore part of the picture?

Yes. Choose the ignore tool and drag over timestamps, ads, avatars or counters. Ignored areas are excluded from every number and stay in this page only. A band along the borders can be ignored too.

›Why is the mismatch percentage different from the affected area?

Mismatch counts changed pixels. Affected area counts the boxes around change regions, so a thin outline that changed counts little as mismatch but can cover a large area.