About browser-screenshot-diff
browser-screenshot-diff compares recorded browser sessions step by step for UI regression testing and flow verification. It pairs screenshots and accessibility snapshots by step-id, then saves replayable findings.
Key features
- 01Pair steps by step-id
- 02Compare screenshot pixels
- 03Diff accessibility snapshot nodes
- 04Report divergence and similarity
- 05Save replayable diff findings
Use cases
- 01Check visual regressions after UI changes
- 02Verify browser-replay against its source session
- 03Compare A/B variants of a form flow
MCP support
The skill works with locally saved RVF artifacts and does not provide a browser_screenshot_diff MCP tool. It uses browser_eval only for live verification when needed.
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ ruvnet/ ruflo --skill browser-screenshot-diffAfter installing, type/browser-screenshot-diffin Claude Code to confirm it loaded.
Details
From the project READMEBrowser Screenshot Diff
Compare two recorded sessions step-by-step. Pairs each step in session A to the same step-id in session B, diffs the captured screenshot and accessibility snapshot, reports the first divergence and an aggregate similarity score.
When to use
- Visual regression after a UI change (record before, record after, diff).
- Verifying a
browser-replayrun matches the parent session within tolerance. - Comparing two A/B variants of the same form flow.
Steps
- Locate both RVF containers:
npx -y [email protected] rvf status <session-id-a>.rvf npx -y [email protected] rvf status <session-id-b>.rvf - Load both trajectories from
trajectory.ndjson. Build astep-id → (screenshot_path, snapshot_path)map for each. - Pair steps by
step-id. Steps that exist on only one side are flagged asunmatchedand contribute to the divergence score. - Pixel diff (
--mode pixel|both): compare the two PNGs at each step. Reportmse,psnr, and the bounding box of the largest diff cluster. Threshold default0.02(2% of pixels). - DOM diff (
--mode dom|both): compare the accessibility snapshots node-by-node. Report added / removed / changed nodes with their accessible names. - Aggregate similarity: weighted average across matched steps, weighted by step duration. Verdict goes into a new
findings.mdunder a fresh RVF container so the diff itself is replayable. - Persist the diff verdict in
browser-sessionsunder both source ids' tags so future searches surface "ran a diff against session X".
Caveats
- Pixel diff is sensitive to font hinting, antialiasing, and scrollbar position. Keep viewport pinned across both sessions.
- DOM diff over Playwright's accessibility tree is more stable than HTML diff. Prefer it.
- This skill does not handle dynamic content (clocks, ads); add ignore regions to the field map or pre-process snapshots before diffing.
- The
browser_screenshot_diffMCP tool is not planned (ADR-0001 §7); the skill operates against locally-saved RVF artifacts and usesbrowser_evalonly for live verification.
Comments
Markdown supported