Skip to Content
New: codec-png-native and codec-png-wasm bring the blazediff-png codec to Node and WebAssembly, faster than spng and jSquash. Read more β†’
Comparevs honeydiff

BlazeDiff vs honeydiff

@blazediff/core-native is ~3.2x faster than honeydiff over our 34 fixtures, with image decode and diff PNG writing included. Both are Rust image diffs that ship as native Node addons. The difference is scope and openness: BlazeDiff publishes its full source and also runs in browsers, Python and Rust.

honeydiff is the diff engine of the Vizzly visual testing service, published on npm as @vizzly-testing/honeydiff. Its binaries carry an MIT license, but its public repository holds only a README and a changelog, not the Rust source. It returns rich JSON: changed-region statistics, perceptual scores, and accessibility checks.

At a glance

honeydiffBlazeDiff
LicenseMIT binaries, source not publicMIT, full source on GitHub
RuntimesNode 22 or laterNode, browsers, Workers, Deno, Bun, Python, Rust
PlatformsmacOS arm64, Linux x64 and arm64, Windows x64macOS, Linux and Windows on x64 and arm64
InputFile path or encoded bytesFile path or encoded bytes (core-native), raw RGBA (core)
Color metricCIEDE2000 Ξ”E (default threshold 2)YIQ
Anti-aliasingDetectedDetected
Region outputBuilt in (difference.regions)Separate package: @blazediff/interpret-native
Perceptual scoresSSIM, MS-SSIM, GMSD through analyze()SSIM, MS-SSIM, GMSD and MILO in separate packages

Benchmarks

Both libraries run at their defaults with anti-aliasing on and write a diff PNG. honeydiff thresholds on CIEDE2000 and BlazeDiff on YIQ, so the chart compares speed, not identical output.

JavaScript Native Binary (@blazediff/core-native vs honeydiff) (image IO included)

TOTAL TIME Β· 34 FIXTURES Β· MEAN OF 25 RUNS Β· IO INCLUDED

BlazeDiffOther librariesLower is better

Both libraries run at their defaults with antialiasing on and write a diff PNG. honeydiff thresholds on CIEDE2000 Ξ”E and BlazeDiff on YIQ, so this compares speed, not identical output.

Apple M1 Max Β· darwin/arm64 Β· Node v22.14.0 Β· rustc 1.97.1 (8bab26f4f 2026-07-14) Β· 2026-10-22 Β· 234b300-dirty Β· pnpm benchmark honeydiff

Per-fixture results (34)
FixturehoneydiffBlazeDiffBlazeDiff vs honeydiff
4k/11.60s325ms4.93x
4k/1 (identical)548ms190ms2.88x
4k/21.43s377ms3.78x
4k/2 (identical)652ms229ms2.84x
4k/31.30s423ms3.06x
4k/3 (identical)731ms239ms3.06x
blazediff/14.29ms2.46ms1.74x
blazediff/1 (identical)4.43ms0.92ms4.84x
blazediff/24.17ms4.08ms1.02x
blazediff/2 (identical)3.90ms1.05ms3.70x
blazediff/345.38ms24.76ms1.83x
blazediff/3 (identical)40.41ms15.04ms2.69x
blazediff/430.89ms28.47ms1.08x
blazediff/4 (identical)24.95ms4.59ms5.44x
page/1764ms630ms1.21x
page/1 (identical)780ms253ms3.08x
page/21.54s320ms4.82x
page/2 (identical)400ms42.36ms9.45x
pixelmatch/15.05ms1.89ms2.66x
pixelmatch/1 (identical)2.92ms1.52ms1.93x
pixelmatch/24.85ms1.93ms2.51x
pixelmatch/2 (identical)1.70ms0.66ms2.55x
pixelmatch/32.69ms1.86ms1.45x
pixelmatch/3 (identical)2.53ms0.88ms2.88x
pixelmatch/412.25ms4.98ms2.46x
pixelmatch/4 (identical)5.94ms1.99ms2.98x
pixelmatch/51.77ms1.07ms1.65x
pixelmatch/5 (identical)1.55ms0.61ms2.56x
pixelmatch/65.24ms2.65ms1.98x
pixelmatch/6 (identical)1.91ms0.88ms2.17x
pixelmatch/73.74ms2.81ms1.33x
pixelmatch/7 (identical)3.46ms0.64ms5.45x
same/116.00ms3.45ms4.64x
same/1 (identical)16.74ms3.44ms4.86x
TOTAL9.99s3.14s3.18x

Switching

honeydiff returns different and a pixels.changed.total count. BlazeDiff returns match, a reason, and a diffCount.

// Before import { compare } from "@vizzly-testing/honeydiff"; const before = await compare("baseline.png", "current.png", {}); if (before.different) console.log(`${before.pixels.changed.total} pixels differ`);
// After import { compare } from "@blazediff/core-native"; const after = await compare("baseline.png", "current.png", "diff.png", { antialiasing: true, }); if (!after.match && after.reason === "pixel-diff") { console.log(`${after.diffCount} pixels differ`); }

For the region data honeydiff puts in its result, run difference analysis. It labels each changed region as an addition, a deletion, a shift, a recolor or rendering noise.

When to keep honeydiff

  • You use Vizzly, which builds on it.
  • You want region statistics, perceptual scores and contrast checks from one call.
  • You need CIEDE2000 color thresholds, or alignment of inserted rows.
Last updated on