Structural Similarity Benchmarks
Per-window image quality comparisons (SSIM family). Image decode is excluded.

Fast Original ( @blazediff/ssim using ssim vs ssim.js using fast algorithm) (image IO excluded)
25 iterations (3 warmup)
~25% performance improvement on average.
| Benchmark | ssim.js | BlazeDiff | Time Saved | % Improvement |
|---|---|---|---|---|
| blazediff/1 | 86.51ms | 64.26ms | 22.25ms | 25.7% |
| blazediff/1 (identical) | 86.16ms | 64.35ms | 21.81ms | 25.3% |
| blazediff/2 | 34.69ms | 22.91ms | 11.78ms | 34.0% |
| blazediff/2 (identical) | 34.76ms | 22.64ms | 12.12ms | 34.9% |
| blazediff/3 | 99.29ms | 93.73ms | 5.55ms | 5.6% |
| blazediff/3 (identical) | 99.03ms | 93.47ms | 5.56ms | 5.6% |
| pixelmatch/1 | 25.35ms | 19.43ms | 5.92ms | 23.4% |
| pixelmatch/1 (identical) | 25.72ms | 19.31ms | 6.41ms | 24.9% |
| pixelmatch/2 | 12.90ms | 9.57ms | 3.34ms | 25.9% |
| pixelmatch/2 (identical) | 13.08ms | 9.69ms | 3.40ms | 26.0% |
| pixelmatch/3 | 25.53ms | 19.37ms | 6.16ms | 24.1% |
| pixelmatch/3 (identical) | 25.28ms | 19.37ms | 5.91ms | 23.4% |
| pixelmatch/4 | 18.44ms | 11.52ms | 6.93ms | 37.5% |
| pixelmatch/4 (identical) | 18.37ms | 11.59ms | 6.78ms | 36.9% |
| pixelmatch/5 | 13.42ms | 9.72ms | 3.70ms | 27.6% |
| pixelmatch/5 (identical) | 13.08ms | 9.49ms | 3.59ms | 27.4% |
| pixelmatch/6 | 12.90ms | 9.68ms | 3.22ms | 24.9% |
| pixelmatch/6 (identical) | 13.02ms | 9.58ms | 3.45ms | 26.5% |
| pixelmatch/7 | 24.89ms | 16.07ms | 8.82ms | 35.4% |
| pixelmatch/7 (identical) | 24.87ms | 16.12ms | 8.75ms | 35.2% |
Hitchhikers SSIM SSIM (@blazediff/ssim using hitchhikers-ssim vs ssim.js using weber algorithm) (image IO excluded)
25 iterations (3 warmup)
~70% performance improvement on average.
| Benchmark | ssim.js | BlazeDiff | Time Saved | % Improvement |
|---|---|---|---|---|
| blazediff/1 | 74.37ms | 12.33ms | 62.04ms | 83.4% |
| blazediff/1 (identical) | 74.80ms | 12.59ms | 62.21ms | 83.2% |
| blazediff/2 | 34.76ms | 9.95ms | 24.80ms | 71.4% |
| blazediff/2 (identical) | 34.41ms | 10.00ms | 24.41ms | 70.9% |
| blazediff/3 | 128.50ms | 46.36ms | 82.14ms | 63.9% |
| blazediff/3 (identical) | 124.50ms | 45.99ms | 78.51ms | 63.1% |
| pixelmatch/1 | 22.32ms | 3.77ms | 18.55ms | 83.1% |
| pixelmatch/1 (identical) | 22.56ms | 3.79ms | 18.77ms | 83.2% |
| pixelmatch/2 | 11.71ms | 1.87ms | 9.85ms | 84.1% |
| pixelmatch/2 (identical) | 11.04ms | 1.82ms | 9.21ms | 83.5% |
| pixelmatch/3 | 22.89ms | 3.82ms | 19.07ms | 83.3% |
| pixelmatch/3 (identical) | 22.55ms | 3.78ms | 18.77ms | 83.2% |
| pixelmatch/4 | 19.41ms | 5.36ms | 14.05ms | 72.4% |
| pixelmatch/4 (identical) | 19.34ms | 5.18ms | 14.16ms | 73.2% |
| pixelmatch/5 | 11.22ms | 1.87ms | 9.35ms | 83.3% |
| pixelmatch/5 (identical) | 11.03ms | 1.92ms | 9.10ms | 82.6% |
| pixelmatch/6 | 11.99ms | 1.95ms | 10.04ms | 83.8% |
| pixelmatch/6 (identical) | 11.21ms | 1.90ms | 9.31ms | 83.1% |
| pixelmatch/7 | 24.27ms | 7.23ms | 17.04ms | 70.2% |
| pixelmatch/7 (identical) | 24.61ms | 7.17ms | 17.44ms | 70.9% |
Benchmarks run on MacBook Pro M1 Max, Node.js 22
Last updated on