Free tool
Image diff tool
Drop in two screenshots to see every changed pixel, the share of the image that changed and whether Snapvisor would flag the pair as a visual change. The comparison runs in your browser: your images are never uploaded.
Add two images, or try the example pair, to see the diff.
How to compare two images
- Add the baseline. Choose or drop the image you expect, for example the screenshot from your main branch.
- Add the new image. Choose or drop the image to check, for example the same screen from a pull request.
- Set the threshold. Keep the default 0.5 or lower it to make the comparison stricter, the same setting your Snapvisor screenshots take.
- Read the result. The verdict says whether Snapvisor would flag a change; the overlay marks every pixel that counted.
How the verdict is reached
Two pixels differ when their colour distance, measured in the YIQ colour space after blending each pixel over white, passes the pixel threshold. A differing pixel on an edge between a darker and a brighter area that is flat in both images is treated as antialiasing and left out. The share of pixels left is the score.
Snapvisor runs that comparison twice on every screenshot. The base pass uses a loose pixel threshold and ignores a change smaller than 20 pixels or 0.02% of the image, whichever is smaller. The colour-sensitive pass uses a tight threshold and ignores anything under 3% of the image. The score is read to two decimals of a percent, so a change under 0.005% of the image reads as zero. This page runs the same steps, with the same numbers, as the review workflow that decides which screenshots your team sees.
Use it from code, no key
POST https://api.snapvisor.io/v2/tools/image-diff runs the comparison on Snapvisor's servers with the diff engine every build uses (odiff, the same two passes) and answers the verdict as JSON, or as Markdown with Accept: text/markdown. Send the two images as multipart fields base and head, and optionally a threshold from 0 to 1. No account or key: 20 comparisons a day per address, images up to 5 MB and 16 million pixels each, nothing stored. Errors are RFC 9457 problem details, and the operation is in the OpenAPI description.
curl -s https://api.snapvisor.io/v2/tools/image-diff \
-F base=@baseline.png \
-F head=@new.png \
-F threshold=0.5Compare every screenshot on every pull request
Comparing one pair by hand finds one change. Snapvisor takes the screenshots in your Playwright, Cypress, Puppeteer or Storybook tests, compares each one with the baseline from your main branch, and posts the changes to the pull request for review. The SDKs take the same threshold option as this page. Start free or read the visual regression testing guide.
Image diff FAQ
It compares the images twice, as Snapvisor's engine does. A loose pass tolerates antialiasing and rendering noise and ignores a change smaller than 20 pixels or 0.02% of the image, whichever is smaller. A strict pass catches colour shifts and ignores anything under 3% of the image. If either pass still finds a difference, the pair counts as changed.
No. The images are read and compared by JavaScript in this page, on your device. Nothing is sent to Snapvisor or anyone else, so you can compare screenshots of private apps.
It scales how different two pixels must be before they count, and how many changed pixels each pass ignores. The default is 0.5; 0 is the strictest setting. Snapvisor screenshots take the same threshold option, so the verdict here is the one your build would show at that setting.
Yes. Both images are placed at the top-left of a canvas as large as the larger one, and the missing area counts as transparent, which is how Snapvisor lines up screenshots of different heights. An image smaller in both directions is first scaled up to fit.
This page compares one pair of images by hand. Snapvisor takes screenshots in your Playwright, Cypress, Puppeteer or Storybook tests, compares every one against the baseline from your main branch on each pull request, and lets your team approve or reject each change.