UI Verify vs Playwright screenshots
How UI Verify compares to Playwright: hosted baselines, a review UI, an AI judge, and agent review on top of Playwright's local toHaveScreenshot diffing.
Playwright's built-in visual comparison is free and lives in your test runner: it screenshots a page and diffs it against a baseline image committed next to the test. UI Verify runs the same comparison but moves the baselines, the review, and the judgment off your repo and CI. For the wider landscape, see visual regression testing tools compared.
What do UI Verify and Playwright screenshots have in common?
- Real-browser screenshots diffed pixel by pixel against a baseline.
- You can drive a real page or a component, not just a Storybook story.
- Knobs to tame false diffs - Playwright's `toHaveScreenshot` options include
mask,stylePath,threshold, andmaxDiffPixelRatio, andanimationsdefaults to"disabled"(checked 2026-10-17).
How is UI Verify different from Playwright's screenshots?
- A fixed render environment, not a per-OS baseline chore. With native Playwright the screenshot rasterizes on whatever machine runs it, so a baseline from your Mac will not match the CI Linux box and teams pin a Docker image to keep per-OS baselines. UI Verify replays every capture in one fixed environment and neutralizes the render-time flake it can see from outside your app - inlined cross-origin fonts, a fetch-once image cache, a hermetic network, and
prefers-reduced-motion. The clock, live data, feature flags, and a random pick made during server rendering live inside your app, so you pin those in the test or the component (isUIVerify()). See Fix flaky visual tests. - Observability over changes, not a zip to download. Native Playwright reports a visual change as a failed test. To see what moved you leave the pull request, open the CI run, download the report artifact, unzip it, and open the expected, actual, and diff PNGs by hand - or you re-run and hope it was flake. UI Verify puts the diff on the pull request itself, with a review queue and per-story history, so a change is something you accept or reject inline, not a test you re-run with
--update-snapshots. - Hosted, git-aware baselines. No screenshot images committed to your repo and no per-OS baseline files to juggle - baselines live in the service, one per branch, resolved from your git history.
- An agent that never leaves its loop, and an AI judge. UI Verify exposes each change over MCP as the changed region cropped into a before-and-after image, which your coding agent reads in the same context it opened the PR from, along with the AI judge's verdict (a regression or an intended change, with a reason) when you turn the judge on. The agent never downloads an artifact, unzips it, or opens PNGs by hand, and it accepts the intended baselines without a human clicking through a dashboard. Playwright ships its own MCP and test agents, but their docs (checked 2026-10-17) describe driving the browser and generating and repairing tests, not reviewing visual diffs. See the AI judge, Triage with your agent, and the cropped-diff review unit.
- Automatic flake detection. A change that does not reproduce on a re-render is auto-ignored, so a flaky screenshot does not fail your build. See automatic flake detection.
What reviewing one visual change actually looks like
The gap is clearest on a single changed pixel. With native Playwright the check goes red and the log says how many pixels differ. To see what moved you open the CI run, download the report artifact, unzip it, and open three PNGs by hand - the baseline, the new screenshot, and the diff - then decide, and if you re-run the suite you do the whole loop again. With UI Verify the diff is already on the pull request: a person accepts or rejects it in the review UI, and a coding agent reads the cropped before-and-after over MCP and accepts the intended baselines without ever leaving the pull request. Nobody downloads a zip.
When are Playwright's built-in screenshots the better choice?
- You have a handful of screenshots and are happy to review the diffs yourself.
- You already run Playwright and want the visual check to gate entirely inside your own CI.
- You do not need hosted history, a review UI, or an AI judge triaging each change.
- You are not working with coding agents that review visual diffs and accept baselines over MCP.
Is Playwright's toHaveScreenshot enough for visual testing?
For a small suite you review yourself, yes - it is free, local, and built in. It starts to strain when the baselines multiply: every screenshot is a PNG or WebP committed to your repo, cross-OS differences push you into a pinned Docker image (Playwright's visual comparison guide says rendering varies with the host OS, browser version, and hardware), and a change is a failed test with no history or review UI. That is the point where a hosted tool pays off.
Do I have to commit screenshot baselines with UI Verify?
No. UI Verify stores baselines in the service, one per branch and resolved from your git history, so there are no screenshot images in your repo and no per-OS baseline files to maintain.
Deterministic Playwright captures
Stop real-page diffs that flake without a real change.
Visual testing for agents
UI Verify is visual regression testing for Playwright, Storybook, Vitest and Bun. Your coding agent sees what its UI change did and fixes it before it ships. See how it works.
Get started