| Format | Avg Size (B) | Encode (ms) | Decode (ms) | Avg ΔE00 ↓ | Avg DSSIM ↓ | Avg MS-SSIM ↑ | Avg PSNR-HVS-M ↑ | Avg SSIMULACRA2 ↑ | Avg Butteraugli ↓ | Avg PSNR (dB) ↑ |
|---|---|---|---|---|---|---|---|---|---|---|
| ChromaHash | 32.0 | 17.879 | 8.048 | 8.75 | 0.2897 | 0.5132 | 14.2 | -18.8 | 17.08 | 19.0 |
| ThumbHash | 21.0 | 0.764 | 0.219 | 10.60 | 0.2989 | 0.4652 | 13.2 | -34.7 | 19.77 | 17.9 |
| BlurHash | 36.0 | 10.440 | 0.378 | 13.26 | 0.3236 | 0.3903 | 11.5 | -51.1 | 26.26 | 16.0 |
| lqip-modern | 84.0 | 2.335 | 0.000 | 9.17 | 0.2521 | 0.6732 | 15.9 | 3.8 | 11.92 | 20.4 |
| unpic | 592.0 | 10.466 | 0.000 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
| Format | Avg Size (B) | Encode (ms) | Decode (ms) | Avg ΔE00 ↓ | Avg DSSIM ↓ | Avg MS-SSIM ↑ | Avg PSNR-HVS-M ↑ | Avg SSIMULACRA2 ↑ | Avg Butteraugli ↓ | Avg PSNR (dB) ↑ |
|---|---|---|---|---|---|---|---|---|---|---|
| ChromaHash | 32.0 | 10.199 | 7.829 | 4.33 | 0.2164 | 0.6247 | 26.5 | 56.9 | 8.78 | 30.8 |
| ThumbHash | 22.6 | 0.265 | 0.226 | 7.56 | 0.2316 | 0.5782 | 22.7 | 47.6 | 14.90 | 25.9 |
| BlurHash | 36.0 | 3.402 | 0.337 | 11.14 | 0.2788 | 0.4582 | 13.6 | 33.1 | 21.32 | 17.6 |
| lqip-modern | 75.0 | 1.374 | 0.000 | 4.68 | 0.1677 | 0.7721 | 25.9 | 63.8 | 8.65 | 29.7 |
| unpic | 592.0 | 3.420 | 0.000 | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
Identical-dimension comparison: every format's decoded preview is Lanczos-3 resampled to the encoder-input (source) resolution and compared against that input, so all formats are scored at the same W×H per image. CIEDE2000 (ΔE00) is the primary metric — color accuracy dominates perceived quality for low-fidelity placeholders, where PSNR correlates poorly. All metrics are computed by iqa-cli (the iqa-rs crate); window-based metrics are omitted (N/A) for images below their minimum size.
| Metric | What it measures | Direction |
|---|---|---|
| ΔE00 (CIEDE2000) | Primary. Mean perceptual color difference over sRGB→CIELAB (D65) | lower; JND ≈ 1 |
| DSSIM | (1−SSIM)/2; structural fidelity | lower; 0 = identical |
| MS-SSIM | Multi-scale SSIM | higher; 1 = identical |
| PSNR-HVS-M | DCT-domain PSNR with CSF + contrast masking (dB) | higher |
| SSIMULACRA2 | Perceptual full-reference score | higher; 100 = identical |
| Butteraugli | Perceptual distance (libjxl) | lower; 0 = identical |
| PSNR | Classic pixel MSE metric; penalises intentional LQIP blur | higher; reference only |
ΔE00 colour coding: good < 2, warn < 5, bad ≥ 5. DSSIM: good < 0.10, warn < 0.25.
ΔE00 is scored in sRGB against the source's color-managed sRGB appearance, so the cross-format comparison stays apples-to-apples; the gamut-aware ChromaHash matches it while formats that ignore the source gamut look off (higher ΔE00). The Display P3 row's Original and ChromaHash previews are decoded to P3 and tagged with the P3 ICC profile: on a wide-gamut (P3) display they show the true saturated color and match each other, while the sRGB-only formats appear less saturated — ChromaHash renders correctly to the display's gamut.
| Language | Status |
|---|---|
| Rust | N/A |
| C | N/A |
| TypeScript | N/A |
| Kotlin | N/A |
| Swift | N/A |
| Go | N/A |
| Python | N/A |
| C# | N/A |