04 / 04izri/visual

Did anything the user sees quietly change?

Izri renders the routes your diff touches, compares them against base pixel by pixel, and boxes the regions that moved. Intentional redesigns approve in one click; accidental drift never reaches production.

  • Only routes reachable from the diff are rendered
  • Perceptual diffing — anti-aliasing noise ignored
  • Approve a change once; it becomes the new baseline
visual-diff · /dashboardcompared
base
this PR
34% wider
mainvsPR #4821 layout break
Team+
The visual signal's semantic analysis is available on Team and Pro plans. See pricing

What it asks

Captures snapshots of every changed route during the test run, diffs against the baseline (the merge target's most recent snapshot), and scores `100 - maxDiffPercentage`. Pure soft signal in v1 — no hard rules — because pixel-perfect compares produce too many false positives to gate merges deterministically.

Hard rules

Auto-fail
  • analyzer_error — the visual capture itself crashed; the umbrella escalates the same way it does for any signal that fails to produce a verdict.

Soft signal

soft

Visual score 0–100. Composite weight in izri/quality: 0.15. A chorus of small visual changes plus a small scope drift can still tip the composite below threshold.

When it fires

On every PR run for the routes returned by the project's `changedRoutes` resolver. Premium tier — the analyzer lives in `packages/premium/visual-testing/` under a proprietary license.

Implementation reference

The docs page has the full type signatures, config schema, and the on-disk shape of every analyzer output. Or grab the raw markdown via /docs/features/scope.md.

Read the docs