vs
Compare / Percy
Review the pixels your tests drew.
Percy sends your DOM to BrowserStack and renders it again at every browser and width. stateofpixel reviews the screenshots from your own test run, and bills for storage, not screenshots.
Facts about Percy checked on 27 September 2026, with 6 sources.
A month of visual tests
300 stories, 3 viewports, 400 builds, 360,000 screenshots
- stateofpixelFree, 5.5 GB stored$0
PercyDesktop 25k + 335,000 extra$12,609
Where the screenshots come from. That one choice decides what can drift, and what you are billed for.
- 1Your tests capture the DOM
- 2The SDK uploads the DOM and assets
- 3Percy renders each browser and width
- 4Percy compares and sets the check
- 1Your tests take screenshots
- 2The CLI hashes and compares them on the runner
- 3Only images we have not seen upload
- 4The review page and the GitHub check
What changes when you switch. The same pull request, reviewed with less in the way.
What your reviewers get. Each changed screenshot next to its baseline, with the changed pixels in red.
- Four views. Side by side, diff, slider and flip.
- Keyboard first. j and k to move, a to approve, r to reject.
- One check. Green when every change is approved.

Price it for your suite. Move the sliders. Every tool here bills for this many screenshots a month, except stateofpixel.
Screenshots a month360,000
$151,308 a year less than Percy.
Screenshots are stories x viewports x browsers x builds. For stateofpixel, 5% of screenshots change per build at 80 KB each, and pull request images are kept 60 days. The cheapest list plan for each tool, before tax, from Percy pricing on 27 September 2026. Percy prices are month to month; yearly billing is lower.
Side by side. Every row about Percy links to the page it came from.
Pricing
Screenshots
Where Percy is ahead. We skip some features on purpose. If you need one of these, choose Percy.
Switch in one pull request. Keep your tests. Change the step that sends screenshots to Percy.
- 1Install the GitHub AppPick the repositories. On GitHub Actions there is no token to copy.
- 2Swap percySnapshot() for snapshot()Import it from stateofpixel/playwright and add the reporter. It waits for fonts and disables animations.
- 3Merge to mainThat build becomes the baseline, and pull requests compare against it.
Before
steps:
- run: npx percy exec -- npx playwright test
env:
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}After
permissions:
id-token: write
steps:
- run: npx playwright testimport { defineConfig } from "@playwright/test";
export default defineConfig({
reporter: [["list"], ["stateofpixel/playwright"]],
});Questions. What to know before you move from Percy.
Why compare screenshots from my own CI?
They are the pixels your tests saw. There is no second render with different fonts, timing or network, so a diff is a change in your app, not in the renderer.
Can I still test several browsers?
Yes. Run Playwright projects for Chromium, Firefox and WebKit. Each browser is its own snapshot, named like Checkout [firefox 1280].
I upload a folder of images with percy upload. What changes?
Run npx stateofpixel upload on the same folder. Folder paths become snapshot names.
How much does stateofpixel cost compared with Percy?
Percy bills per screenshot after the included amount. stateofpixel bills for storage, with 10 GB free. The calculator on this page compares both for your suite.
Sources
Read on 27 September 2026. Prices are list prices before tax. The stateofpixel column comes from our docs.
Every pixel, reviewed.
Nothing ships by surprise.