DETERMINISTIC
PIXEL DIFF.
AGENT-IN-THE-LOOP
VERDICTS.

Rust, WASM, and JS diff cores. SSIM and GMSD metrics. Jest, Vitest, and Bun matchers. An agent that hands ambiguous diffs to Claude Code, Cursor, or Codex. No SaaS. No API key. MIT.

INSTALL
npm install @blazediff/core
$ npx @blazediff/cli a.png b.png --interpret
BASELINE
baseline
CURRENT
current

WHY BLAZEDIFF

01

FAST, DETERMINISTIC PIXEL DIFF

Pure-JS core ~1.5x faster than pixelmatch. Rust binary ~4.6x faster than odiff on 4K, up to 8x vs pixelmatch. Wasm build (~32 KB, v128 SIMD) up to ~9x faster than pixelmatch on 4K in the browser. Reproducible on any machine.

02

FULL CONTROL, ZERO VENDOR LOCK-IN

No SaaS, no API keys, no per-snapshot pricing. Screenshots never leave your machine. Self-hosted from your CI. MIT licensed.

03

AGENT-READY

When the heuristic can't decide, the agent hands a small region tile to Claude Code, Cursor, or Codex for judgment. Resume from a checkpoint.

BENCHMARKS

Reproducible from the repo. Same fixtures, same hardware (M1 Max), hyperfine-measured.

JS CORE VS PIXELMATCH VS WASM CORE4K · IO EXCLUDED · 50 RUNS
pixelmatch302ms
@blazediff/core212ms
@blazediff/core-wasm34.42ms
NATIVE BINARY VS ODIFF4K · IO INCLUDED · 25 RUNS
odiff1.27s
@blazediff/core-native275ms

Full table in BENCHMARKS.md at the repo root. Every row has a fixture and a methodology note.

USED BY

THE STACK

One monorepo. Four layers. Install one package or the whole stack.

FAQ

Common questions about how BlazeDiff compares, what it costs, and where it runs.

What is BlazeDiff?

BlazeDiff is an open-source visual regression toolkit for JavaScript and TypeScript. It ships deterministic pixel-diff cores in Rust, WebAssembly, and pure JS, SSIM and GMSD similarity metrics, matchers for Jest, Vitest, and Bun, and an agent that hands ambiguous diffs to a coding agent for a verdict. It is MIT licensed and runs entirely on your own machine or CI.

How is BlazeDiff different from pixelmatch and odiff?

BlazeDiff is faster at identical accuracy. On a 4K pair with IO excluded (M1 Max, 50 runs), pixelmatch takes 302.29ms and @blazediff/core takes 211.92ms; the WebAssembly core runs the same pair in 34.42ms. With IO included, odiff takes 1265.82ms against 275.42ms for the native Rust binary. BlazeDiff also adds SSIM and GMSD metrics plus agent-based judgment of ambiguous diffs, which neither library provides.

Do I need an API key or a paid plan?

No. BlazeDiff has no SaaS component, no API key, and no per-snapshot pricing. Screenshots never leave your machine, and ambiguous diffs are judged by a coding agent you already run (Claude Code, Cursor, or Codex) rather than by a hosted vision service.

Which test runners does BlazeDiff support?

BlazeDiff ships first-party matchers for Jest (@blazediff/jest), Vitest (@blazediff/vitest), and the Bun test runner (@blazediff/bun), all built on the shared @blazediff/matcher core. Screenshots from Playwright, Puppeteer, or any tool that writes PNG files work as input.

What does agent-in-the-loop mean?

Deterministic thresholds decide most diffs on their own. When a diff is ambiguous, BlazeDiff crops the changed regions into small tiles and hands them to your coding agent, which returns a pass or fail verdict with a reason. Runs are checkpointed, so a suite can resume instead of starting over.

Can BlazeDiff run in the browser?

Yes. @blazediff/core-wasm is a roughly 32 KB WebAssembly build using v128 SIMD that runs the same Rust algorithm as the native binary, up to about 9x faster than pixelmatch on 4K images. It works in browsers, edge runtimes, and any WebAssembly host.

Is BlazeDiff free to use commercially?

Yes. BlazeDiff is MIT licensed, so it can be used in commercial and closed-source projects at no cost, including in CI. There is no usage cap and no separate commercial tier.