Skip to content

About

Most IQA metrics, in optimized cross-platform Rust 🚧 Will be reorganized soon.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5,087 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zenmetrics CI license

Reproducible CPU benchmarks and per-OS installation. zenmetrics is a pure-Rust collection of full-reference image-quality metrics, with one CLI that scores any (reference, distorted) pair with any of them.

Most metrics are ports of the authors' published method, checked against a reference implementation; the table below says which, and by how much, and DIVERGENCES.md explains each difference. Where a dataset or tool computed a metric with its own conventions (the scores published with the JPEG AIC2026 dataset, libvmaf), that variant is available too, so published numbers can be reproduced. Six metrics also run on the GPU (CUDA, Vulkan, Metal, DX12) through CubeCL. unsafe_code = "forbid" is the workspace default; some crates override it.

Interactive browser viewer · Checkpoint downloads

Quick start

Nothing here is on crates.io yet (every crate is publish = false). The workspace path-depends on sibling Imazen repos, so clone those next to it first, exactly as CI does:

git clone https://github.com/imazen/zenmetrics && cd zenmetrics
bash scripts/ci/clone-siblings.sh            # clones the pinned siblings into ../
cargo build --release -p zenmetrics-cli      # binary: target/release/zenmetrics

Score one pair:

zenmetrics score --metric ssim2 --reference ref.png --distorted out.jpg

Score several encodes of one reference with several metrics, decoding each image once:

zenmetrics compare --reference ref.png \
  --variant q60.jpg --variant q80.jpg --variant out.avif \
  --metric ssim2 --metric butteraugli --metric dssim --output tsv

Score a TSV of pairs (ref_path, dist_path columns plus a header row; extra columns pass through to the output TSV):

zenmetrics batch --metric cvvdp --display-model standard_fhd \
  --pairs pairs.tsv --output scores.tsv --jobs 8

zenmetrics list-metrics prints what your build enabled and which metrics need a GPU; zenmetrics list-formats prints the decoders.

Checkpoint binaries package the CLI, IQA comparison drivers and fleet executors with pinned build identities.

Metrics

Models & metrics explorer · Full cards, papers and terms

Every CLI name is listed below. FR/NR indicates reference requirements; NN marks neural models. Code and model terms, paper citations and full reference identities remain in the linked cards.

Rust/C is Rust time divided by canonical time (lower is faster), using a representative warm cohort, preferring one thread. Approximate local comparisons are descriptive, with their input size, thread budget and source pins in the comparison ledger. A dash means no comparable measurement. “Prior” means older recorded evidence; “gate” means a declared bound, not a measured pass. Δ is the measured difference without an assigned bound. Pass counts include retained follow-up cohorts; they are not counts of distinct inputs. ! flags any observed warm case above 1.08; R/O identifies RTEN/ORT CPU for neural ratios. Cold numerical misses are shown separately from the retained warm evidence; See the ledger for confirmation status.

Metric Type Canonical Check Rust/C
afine FR/NN original A-FINE / pin… 2/2 pass ≈0.95× R
ahiq FR/NN original AHIQ / pinne… 2/2 pass ≈0.55× R
ahiq-pyiqa FR/NN PyIQA 0.1.16 / native… 2/2 pass ≈0.45× O
arniqa NR/NN original ARNIQA / kad… 5/5 pass ≈1.15× R !
brisque NR PIQ 0.8.0 2 cold misses ≈0.12×
butteraugli FR libjxl 0.12.0 origina… Δ 5e-05 ≈0.41×
butteraugli-gpu FR libjxl 0.12.0 origina… Δ 0.0083 ≈0.022×
butteraugli-original FR original google/butte… Δ 0 ≈0.7×
cambi NR libvmaf 3.2.0 / named… 4 process errors ≈0.884× !
cambi-aic2026 NR libvmaf 3.2.0 / named… 2 process errors ≈0.86×
ciede2000 FR scikit-image CIEDE200… Δ 9.2e-15 ≈0.6×
ckdn FR/NN original CKDN / pinne… 2/2 pass ≈0.49× R
cvvdp FR pycvvdp 0.5.7 CPU / s… 1/1 pass ≈0.031×
cvvdp-gpu FR CUDA pycvvdp 0.5.7 /… 17/49 pass ≈0.12×
cw-ssim FR author CW-SSIM / orig… Δ 6.7e-16 ≈0.062×
cw-ssim-pyiqa FR PyIQA 0.1.16 / weight… 26/26 pass ≈0.11×
deepdc FR/NN DeepDC-PyTorch 0.2 /… 5/5 pass ≈1.21× R !
dists FR/NN DISTS-pytorch 0.1 3/3 pass ≈1.11× R !
dmm FR/NN original DMM / pinned… partial; 2/2 pass ≈0.61× R
dmm-pyiqa FR/NN PyIQA 0.1.16 / native… partial; 2/2 pass ≈0.52× O
dreamsim FR/NN DreamSim 0.2.1 / ense… 2/2 pass ≈0.921× R
dssim FR author dssim-core3.5.… Δ 0 ≈0.23×
dssim-gpu FR author dssim-core 3.5… Δ 0.00038 ≈0.037× !
flip FR NVIDIA FLIP 1.7 / f64… Δ 3.6e-14 ≈0.18× !
flip-v17 FR NVIDIA FLIP 1.7 Δ 0 ≈0.19× !
fsim FR original FeatureSIM /… 6/6 pass ≈0.22×
fsim-k2 FR original FeatureSIM /… 6/6 pass ≈0.18×
fsim-k3 FR original FeatureSIM /… 6/6 pass ≈0.16×
fsim-k4 FR original FeatureSIM /… 6/6 pass ≈0.14×
fsim-nodownscale FR original FeatureSIM /… 6/6 pass ≈0.21×
fsim-y FR author FeatureSIM.m f… 3/3 pass ≈0.046×
gmsd FR Clunie libgmsd de646c… 2/2 pass ≈0.091×
haarpsi FR original HaarPSI / Oc… 6/6 pass ≈0.12×
haarpsi-y FR original HaarPSI / Oc… 6/6 pass ≈0.13×
hdrvdp FR official HDR-VDP 2.2.… scope caveat —
hdrvdp-aic2026 FR official HDR-VDP 2.2.… Δ 0.092 ≈0.12×
hdrvdp3 FR official HDR-VDP 3.0.… scope caveat —
hdrvdp3-aic2026 FR official HDR-VDP 3.0.… Δ 0.00029 ≈0.18×
hyperiqa NR/NN original HyperIQA / f… 3/3 pass ≈0.74× R !
iwssim FR Python-IW-SSIM f9de37… 3 process errors ≈0.084×
iwssim-gpu FR CUDA Python-IW-SSIM f… 5 process errors ≈0.14×
iwssim-piq FR author IW-SSIM / PIQ… 2/2 pass ≈0.072×
liqe NR/NN original LIQE / pinne… 2/2 pass ≈0.088× R
lpips-alex FR/NN lpips 0.1.4 5/5 pass ≈1.16× R !
lpips-squeeze FR/NN lpips 0.1.4 2/2 pass ≈0.64× R
lpips-vgg FR/NN lpips 0.1.4 4/4 pass ≈1.08× R !
mad FR author HI/LO + paper… Δ 0 ≈0.12×
maniqa NR/NN original MANIQA / KonIQ 2/2 pass ≈0.903× R
mdctpsnr FR thorfdbg mDCTpsnr 9a2… 2/2 pass ≈0.804×
mdsi FR original MDSI / Octav… 6/6 pass ≈0.21×
ms-gmsd FR unrecorded paper variant —
ms-gmsdc FR unrecorded paper variant —
ms-ssim-pyiqa FR PyIQA 0.1.16 / named… 4/4 pass ≈0.013×
ms-ssim-pyiqa-f32 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.013×
ms-ssim-pyiqa-f32-k2 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.026×
ms-ssim-pyiqa-f32-k3 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.048×
ms-ssim-pyiqa-f32-k4 FR PyIQA 0.1.16 / named… 6/6 pass ≈0.075×
ms-ssim-pyiqa-f32-k5 FR PyIQA 0.1.16 / named… 6/6 pass ≈0.21×
ms-ssim-pyiqa-f32-k6 FR PyIQA 0.1.16 / named… 6/6 pass ≈0.26×
msssim FR original msssim / Oct… 15/30 pass ≈0.01×
msssim-libvmaf FR libvmaf 3.2.0 / named… 4 process errors ≈0.36×
musiq NR/NN Google MUSIQ 3ef5211… 4/4 pass ≈0.58× R
niqe NR BasicSR 1.4.2 / resid… 4 cold misses ≈0.18×
nlpd FR NLPD_Pytorch / origin… Δ 6.5e-07 ≈0.051×
nlpd-iqa FR IQA_pytorch NLPD / qu… Δ 7.1e-08 ≈0.063×
paq2piq NR/NN original Paq2piq / 40… 5/5 pass ≈1.3× R !
pieapp FR/NN Official v0.1 public… excluded —
pieapp-pyiqa FR/NN pyiqa 0.1.16 create_m… excluded —
piqe NR pypiqe 1.2 170/170 pass ≈0.1×
proposal-butteraugli FR libjxl 0.12.0 origina… Δ 1.6e-08 ≈0.4×
psnr FR scikit-image 0.26 / d… Δ 0 ≈0.0014×
psnr-cb FR scikit-image 0.26 / f… Δ 0 ≈0.098×
psnr-cr FR scikit-image 0.26 / f… Δ 0 ≈0.12×
psnr-y FR scikit-image 0.26 / d… Δ 3.1e-11 ≈0.05×
psnr-y-libvmaf FR libvmaf 3.2.0 / named… Δ 0 ≈0.16×
psnr-y-studio601 FR scikit-image 0.26 / d… Δ 0 ≈0.011×
psnr-y601 FR scikit-image 0.26 / d… Δ 2.4e-12 ≈0.04×
psnr-ycbcr611 FR NumPy / declared floa… Δ 0 ≈0.024×
psnrhvs FR author psnrhvsm.m / s… 1 process errors ≈0.00016×
psnrhvs-daala FR libvmaf 3.2.0 / origi… 28/28 pass ≈0.57×
psnrhvs-y FR author psnrhvsm.m / s… 1 process errors ≈0.00029×
ssim FR scikit-image SSIM / d… Δ 6.7e-16 ≈0.15×
ssim-libvmaf FR libvmaf 3.2.0 / named… Δ 2e-06 ≈0.54×
ssim-pyiqa FR PyIQA 0.1.16 / named… 4/4 pass ≈0.013×
ssim-pyiqa-f32 FR PyIQA 0.1.16 / named… 4/6 pass ≈0.014×
ssim-pyiqa-f32-k2 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.025×
ssim-pyiqa-f32-k3 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.041×
ssim-pyiqa-f32-k4 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.067×
ssim-pyiqa-f32-k5 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.16×
ssim-pyiqa-f32-k6 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.28×
ssim2 FR primary SSIMULACRA2 v2.1 Δ 0 ≈0.58×
ssim2-gpu FR primary SSIMULACRA2 v… Δ 6 ≈0.062× !
ssimc FR scikit-image 0.26 / d… Δ 1.2e-15 ≈0.24×
ssimc-pyiqa-f32 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.013×
ssimc-pyiqa-f32-k2 FR PyIQA 0.1.16 / named… 3/3 pass ≈0.023×
ssimc-pyiqa-f32-k3 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.039×
ssimc-pyiqa-f32-k4 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.065×
ssimc-pyiqa-f32-k5 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.096×
ssimc-pyiqa-f32-k6 FR PyIQA 0.1.16 / named… 4/4 pass ≈0.54×
ssimulacra1 FR original SSIMULACRA1… Δ 3.8e-09 ≈1.07× !
stlpips-alex FR/NN stlpips-pytorch 0.0.2 5/5 pass ≈1.06× R !
stlpips-vgg FR/NN stlpips-pytorch 0.0.2 2/2 pass ≈0.958× R
topiq-fr FR/NN PyIQA 0.1.16 / native… 2/2 pass ≈1.05× O
topiq-fr-pipal FR/NN PyIQA 0.1.16 / native… 2/2 pass ≈0.91× O
vif FR original vifp_mscale… 6/6 pass ≈0.076×
vifvec FR original vifvec / Oct… 6/6 pass ≈0.096×
vmaf FR libvmaf 3.2.0 / compl… 24/76 pass ≈1.03×
vmaf-4k FR libvmaf 3.2.0 / compl… Δ 0.0012 ≈0.898×
vmaf-neg FR libvmaf 3.2.0 / compl… 20/76 pass ≈0.878×
vmaf-neg-studio601 FR libvmaf 3.2.0 / named… 2 findings —
vmaf-studio601 FR libvmaf 3.2.0 / named… 2 findings —
vmaf-v1 FR libvmaf 3.2.0 / compl… 6 process errors ≈0.914×
vsi FR original VSI / Octave… 6/6 pass ≈0.078×
vsi-k2 FR original VSI / Octave… 6/6 pass ≈0.068×
vsi-k3 FR original VSI / Octave… 6/6 pass ≈0.063×
vsi-k4 FR original VSI / Octave… 6/6 pass ≈0.062×
vsi-nodownscale FR original VSI / Octave… 6/6 pass ≈0.078×
wadiqam-fr-live FR/NN original deepIQA / Ch… 2/2 pass ≈0.41× R
wadiqam-fr-tid FR/NN original deepIQA / Ch… 2/2 pass ≈0.51× R
wadiqam-nr-live NR/NN original deepIQA / Ch… 2/2 pass ≈0.48× R
wadiqam-nr-tid NR/NN original deepIQA / Ch… 2/2 pass ≈0.38× R
wadiqam-pyiqa FR/NN PyIQA 0.1.16 / native… 2/2 pass ≈0.78× O
wd FR/NN original Cool-Chic WD… 2/2 pass ≈0.11× R
ws-hv FR IVP-Lab original WS_H… Δ 5.3e-09 ≈1.07× !
zensim FR unrecorded self reference —
zensim-gpu FR unrecorded disabled —

Executable, versions, output differences and terms

Use each exact metric name below with target/release/zenmetrics score --metric NAME --reference ref.png --distorted dist.png. The linked card supplies its build features, model export, consent and display arguments; the command is not a substitute for those requirements.

Licensing is not uniformly cleared. Our Rust license, upstream reference-code terms and weight terms are separate. See the pinned upstream audit for research-only clauses and open questions affecting FSIM, VSI, PSNR-HVS, HDR-VDP, unlicensed reference sources and pretrained backbones. A permissive reference-code license does not grant permission for separately licensed weights. “Not recorded” means unresolved, not unrestricted.

Deltas are absolute raw-score differences, written as decimals (for example 0.00003). Maxima below come only from the named warm local canonical comparison cohorts, with their exact Rust revision, input dimensions and thread configurations. They are not global error bounds or AIC published-column agreement. A median is shown only when retained as a median of paired score differences; it is never inferred from a maximum or a pass threshold. Cold numerical misses are listed separately in the compact table and comparison ledger. Missing local deltas do not erase older parity evidence in the cards.

afine — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
afine original A-FINE / pinned source 0.0000019859868478633302 not recorded Apache-2.0 / noncommercial
ahiq — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ahiq original AHIQ / pinned source 0.0000001390775044018966 not recorded MIT / unknown
ahiq-pyiqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ahiq-pyiqa PyIQA 0.1.16 / native ORT CPU comparison 0.000000011920928910669204 not recorded PolyForm Noncommercial 1.0.0 + S-Lab 1.0 (../../LICENSE-pyiqa, ../../LICENSE-S-Lab) / nc
arniqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
arniqa original ARNIQA / kadid10k 0.00000011920928955078125 not recorded Apache-2.0 / permissive
brisque — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
brisque PIQ 0.8.0 0.0025634765625 not recorded not recorded / not recorded
butteraugli — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
butteraugli libjxl 0.12.0 original comparator 0.000050067901611328125 not recorded not recorded / not applicable
butteraugli-gpu libjxl 0.12.0 original comparator / CPU reference 0.008306741714477539 not recorded not recorded / not applicable
butteraugli-original original google/butteraugli 71b18b6 / 1 effective worker 0.0 not recorded not recorded / not applicable
cambi — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
cambi libvmaf 3.2.0 / named RGB ingress 0.0 not recorded not recorded / not applicable
cambi-aic2026 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
cambi-aic2026 libvmaf 3.2.0 / named RGB ingress 0.0 not recorded not recorded / not applicable
ciede2000 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ciede2000 scikit-image CIEDE2000 / declared precise D65 Lab 0.0000000000000092148511043888 not recorded not recorded / not applicable
ckdn — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ckdn original CKDN / pinned source 0.00000005960464477539063 not recorded MIT / unknown
cvvdp — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
cvvdp pycvvdp 0.5.7 CPU / standard_fhd 0.00000286102294921875 not recorded not recorded / not applicable
cvvdp-gpu — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
cvvdp-gpu pycvvdp 0.5.7 / PyTorch CUDA 0.00006103515625 not recorded not recorded / not applicable
cw-ssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
cw-ssim author CW-SSIM / original pointOp MEX 0.0000000000000006661338147750939 not recorded not recorded / not applicable
cw-ssim-pyiqa PyIQA 0.1.16 / weightless CW-SSIM 0.000000000000005551115123125783 not recorded PolyForm Noncommercial 1.0.0 + S-Lab 1.0 (../../LICENSE-pyiqa, ../../LICENSE-S-Lab) / none
deepdc — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
deepdc DeepDC-PyTorch 0.2 / input normalization 0.0 not recorded MIT / permissive
dists — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dists DISTS-pytorch 0.1 0.0 not recorded MIT / permissive
dmm — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dmm original DMM / pinned source 0.0000026667229833488796 not recorded MIT (Baoliang Chen 2024) / permissive
dmm-pyiqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dmm-pyiqa PyIQA 0.1.16 / native ORT CPU comparison 0.000016204631279276597 not recorded PolyForm Noncommercial 1.0.0 + S-Lab 1.0 (../../LICENSE-pyiqa, ../../LICENSE-S-Lab); LAPACK routines BSD-3-Clause (../../LICENSE-lapack) / permissive
dreamsim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dreamsim DreamSim 0.2.1 / ensemble 0.00000012509752433942367 not recorded MIT / unknown
dssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dssim author dssim-core3.5.1 / source-bound full-call C API 0.0 not recorded not recorded / not applicable
dssim-gpu — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
dssim-gpu author dssim-core 3.5.1 / 0e44c9b7 0.00038257782391548645 not recorded not recorded / not applicable
flip — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
flip NVIDIA FLIP 1.7 / f64 map mean 0.00000000000003552713678800501 not recorded not recorded / not applicable
flip-v17 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
flip-v17 NVIDIA FLIP 1.7 0.0 not recorded not recorded / not applicable
fsim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
fsim original FeatureSIM / Octave 6.4 0.000001329927450832713 not recorded not recorded / not applicable; open terms: see pinned audit
fsim-k2 original FeatureSIM / Octave 6.4 0.0000000888441795687811 not recorded not recorded / not applicable; open terms: see pinned audit
fsim-k3 original FeatureSIM / Octave 6.4 0.00000018109096577845207 not recorded not recorded / not applicable; open terms: see pinned audit
fsim-k4 original FeatureSIM / Octave 6.4 0.0000000138497604496024 not recorded not recorded / not applicable; open terms: see pinned audit
fsim-nodownscale original FeatureSIM / Octave 6.4 0.000001329927450832713 not recorded not recorded / not applicable; open terms: see pinned audit
fsim-y author FeatureSIM.m first output 0.0000000014845701334920136 not recorded not recorded / not applicable; open terms: see pinned audit
gmsd — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
gmsd Clunie libgmsd de646c9a / original rounded RGB ingress 0.000000000000000001734723475976807 not recorded not recorded / not applicable
haarpsi — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
haarpsi original HaarPSI / Octave 6.4 0.000000011793922838343462 not recorded not recorded / not applicable
haarpsi-y original HaarPSI / Octave 6.4 0.000000016168560379448138 not recorded not recorded / not applicable
hdrvdp — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
hdrvdp official HDR-VDP 2.2.2 MATLAB release (ISC-licensed) not recorded not recorded not recorded / not applicable; open terms: see pinned audit
hdrvdp-aic2026 official HDR-VDP 2.2.2 / Octave FFT adaptation 0.09194904299747009 not recorded not recorded / not applicable; open terms: see pinned audit
hdrvdp3 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
hdrvdp3 official HDR-VDP 3.0.7 MATLAB release + jpeg-ai-qaf VDP3/ numpy port @ 0628a6b (verified equal — see DIVERGENCES) not recorded not recorded not recorded / not applicable
hdrvdp3-aic2026 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
hdrvdp3-aic2026 official HDR-VDP 3.0.7 / Octave 0.0002911397849469921 not recorded not recorded / not applicable
hyperiqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
hyperiqa original HyperIQA / fixed grid 0.0 not recorded MIT / unknown
iwssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
iwssim Python-IW-SSIM f9de37c / torch.linalg API compatibility 0.0000006861363495147543 not recorded not recorded / not applicable
iwssim-gpu Python-IW-SSIM f9de37c / PyTorch CUDA 0.000025359321661477807 not recorded not recorded / not applicable
iwssim-piq author IW-SSIM / PIQ 0.8 rgb2yiq Y 0.0000003003878045193531 not recorded not recorded / not applicable
liqe — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
liqe original LIQE / pinned source 0.000007331605286431397 not recorded MIT / unknown
lpips — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
lpips-alex lpips 0.1.4 0.00000000031480767472003013 not recorded BSD-2-Clause / permissive
lpips-squeeze lpips 0.1.4 0.0000000028955942522196354 not recorded BSD-2-Clause / permissive
lpips-vgg lpips 0.1.4 0.0000000063964012003703274 not recorded BSD-2-Clause / permissive
mad — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
mad author HI/LO + paper combine / ownership overlay 0.0 not recorded not recorded / not applicable
maniqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
maniqa original MANIQA / KonIQ 0.00000005960464477539063 not recorded Apache-2.0 / permissive
mdctpsnr — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
mdctpsnr thorfdbg mDCTpsnr 9a27a4b / compiled reference 0.0 not recorded not recorded / not applicable
mdsi — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
mdsi original MDSI / Octave 6.4 0.000000000000010685896612017132 not recorded not recorded / not applicable
ms-gmsd — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ms-gmsd no evidence not recorded not recorded not recorded / not applicable
ms-gmsdc — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ms-gmsdc no evidence not recorded not recorded not recorded / not applicable
ms-ssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ms-ssim-pyiqa PyIQA 0.1.16 / named convention 0.00000028954383912704884 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32 PyIQA 0.1.16 / named convention 0.00000003040175311497251 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32-k2 PyIQA 0.1.16 / named convention 0.000000012287708517355611 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32-k3 PyIQA 0.1.16 / named convention 0.000000006910840899543302 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32-k4 PyIQA 0.1.16 / named convention 0.000000004473495240908676 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32-k5 PyIQA 0.1.16 / named convention 0.0000000031154991919635222 not recorded not recorded / not applicable
ms-ssim-pyiqa-f32-k6 PyIQA 0.1.16 / named convention 0.000000002269627596973578 not recorded not recorded / not applicable
msssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
msssim original msssim / Octave 6.4 0.000004752062978119476 not recorded not recorded / not applicable
msssim-libvmaf libvmaf 3.2.0 / named RGB ingress 0.0000001537393887751648 not recorded not recorded / not applicable
musiq — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
musiq Google MUSIQ 3ef5211 / JAX 0.3.25 / NumPy 1.25.2 compatibility runtime 0.000030517578125 not recorded Apache-2.0 / permissive
niqe — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
niqe BasicSR 1.4.2 / resident parameters 0.00009065496319360378 not recorded not recorded / not recorded
nlpd — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
nlpd NLPD_Pytorch / original RGB6 0.0000006519154935880067 not recorded not recorded / not applicable
nlpd-iqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
nlpd-iqa IQA_pytorch NLPD / quantized Y709 0.00000007106362460637672 not recorded not recorded / not applicable
paq2piq — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
paq2piq original Paq2piq / 401 ROIs 0.00000762939453125 not recorded MIT / noncommercial
pieapp — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
pieapp Official v0.1 public compute_score, release 0513613d1f575136ea52418e35f2cebc5a49f783 not recorded not recorded not recorded / Modified BSD-2 for Non-Commercial Use Only, UC Regents
pieapp-pyiqa — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
pieapp-pyiqa pyiqa 0.1.16 create_metric('pieapp'), CPU fp32, metric(dist, ref) not recorded not recorded PolyForm Noncommercial 1.0.0 + S-Lab 1.0 (../../LICENSE-pyiqa, ../../LICENSE-S-Lab) / nc
piqe — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
piqe pypiqe 1.2 0.00000000000004618527782440651 not recorded not recorded / not applicable
proposal-butteraugli — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
proposal-butteraugli libjxl 0.12.0 original comparator 0.00000001636376642695503 not recorded not recorded / not applicable
psnr — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
psnr scikit-image 0.26 / declared RGB ingress 0.0 not recorded not recorded / not applicable
psnr-cb scikit-image 0.26 / float64 studio601 plane 0.0 not recorded not recorded / not applicable
psnr-cr scikit-image 0.26 / float64 studio601 plane 0.0 not recorded not recorded / not applicable
psnr-y scikit-image 0.26 / declared RGB ingress 0.0000000000311857206725108 not recorded not recorded / not applicable
psnr-y-libvmaf libvmaf 3.2.0 / named RGB ingress 0.0 not recorded not recorded / not applicable
psnr-y-studio601 scikit-image 0.26 / declared RGB ingress 0.0 not recorded not recorded / not applicable
psnr-y601 scikit-image 0.26 / declared RGB ingress 0.0000000000024300561562995426 not recorded not recorded / not applicable
psnr-ycbcr611 NumPy / declared float64 studio601 weighted PSNR 0.0 not recorded not recorded / not applicable
psnrhvs — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
psnrhvs author psnrhvsm.m / signal 1.4.1 0.0000014436844821830164 not recorded not recorded / not applicable; open terms: see pinned audit
psnrhvs-daala libvmaf 3.2.0 / original Daala psnr_hvs / YUV444 0.000001093514509165061 not recorded not recorded / not applicable; open terms: see pinned audit
psnrhvs-y author psnrhvsm.m / signal 1.4.1 0.0000009203156032810966 not recorded not recorded / not applicable; open terms: see pinned audit
ssim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ssim scikit-image SSIM / declared mirror full map 0.0000000000000006661338147750939 not recorded not recorded / not applicable
ssim-libvmaf libvmaf 3.2.0 / named RGB ingress 0.0000019669532775878906 not recorded not recorded / not applicable
ssim-pyiqa PyIQA 0.1.16 / named convention 0.0000020900847584881532 not recorded not recorded / not applicable
ssim-pyiqa-f32 PyIQA 0.1.16 / named convention 0.00000011643768749181049 not recorded not recorded / not applicable
ssim-pyiqa-f32-k2 PyIQA 0.1.16 / named convention 0.000000055390560693702184 not recorded not recorded / not applicable
ssim-pyiqa-f32-k3 PyIQA 0.1.16 / named convention 0.00000003263846981571561 not recorded not recorded / not applicable
ssim-pyiqa-f32-k4 PyIQA 0.1.16 / named convention 0.000000022443646052749955 not recorded not recorded / not applicable
ssim-pyiqa-f32-k5 PyIQA 0.1.16 / named convention 0.00000001689128470427903 not recorded not recorded / not applicable
ssim-pyiqa-f32-k6 PyIQA 0.1.16 / named convention 0.000000013229299988815058 not recorded not recorded / not applicable
ssim2 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ssim2 primary SSIMULACRA2 v2.1 0.0 not recorded not recorded / not applicable
ssim2-gpu — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ssim2-gpu primary SSIMULACRA2 v2.1 / CPU reference 6.014046784655932 not recorded not recorded / not applicable
ssimc — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ssimc scikit-image 0.26 / declared RGB ingress 0.0000000000000012212453270876722 not recorded not recorded / not applicable
ssimc-pyiqa-f32 PyIQA 0.1.16 / named convention 0.00000014727947605930325 not recorded not recorded / not applicable
ssimc-pyiqa-f32-k2 PyIQA 0.1.16 / named convention 0.000000069532517188442 not recorded not recorded / not applicable
ssimc-pyiqa-f32-k3 PyIQA 0.1.16 / named convention 0.000000040870202777654185 not recorded not recorded / not applicable
ssimc-pyiqa-f32-k4 PyIQA 0.1.16 / named convention 0.000000028404906315948608 not recorded not recorded / not applicable
ssimc-pyiqa-f32-k5 PyIQA 0.1.16 / named convention 0.000000022068751492909655 not recorded not recorded / not applicable
ssimc-pyiqa-f32-k6 PyIQA 0.1.16 / named convention 0.000000017751231040641358 not recorded not recorded / not applicable
ssimulacra1 — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ssimulacra1 original SSIMULACRA1 / OpenCV RGB callable 0.000000003826276126668582 not recorded not recorded / not applicable
stlpips — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
stlpips-alex stlpips-pytorch 0.0.2 0.00000000026342972345595045 not recorded BSD-2-Clause / permissive
stlpips-vgg stlpips-pytorch 0.0.2 0.0000000006130358451775231 not recorded BSD-2-Clause / permissive
topiq — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
topiq-fr PyIQA 0.1.16 / native ORT CPU comparison 0.00000011920928955078125 not recorded PolyForm-Noncommercial-1.0.0 + S-Lab-1.0 (LICENSE-pyiqa, LICENSE-S-Lab) / https://github.com/chaofengc/IQA-PyTorch/blob/main/LICENSE
topiq-fr-pipal PyIQA 0.1.16 / native ORT CPU comparison 0.00000005960464477539063 not recorded PolyForm-Noncommercial-1.0.0 + S-Lab-1.0 (LICENSE-pyiqa, LICENSE-S-Lab) / https://github.com/chaofengc/IQA-PyTorch/blob/main/LICENSE
vif — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
vif original vifp_mscale / Octave 6.4 0.0000000000005379585665821196 not recorded not recorded / not applicable
vifvec — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
vifvec original vifvec / Octave 6.4 0.00000000000024030777368011513 not recorded not recorded / not applicable
vmaf — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
vmaf libvmaf 3.2.0 / complete embedded-model lifetime 0.001474841242469438 not recorded not recorded / not applicable
vmaf-4k libvmaf 3.2.0 / complete embedded-model lifetime 0.0012059797324184274 not recorded not recorded / not applicable
vmaf-neg libvmaf 3.2.0 / complete embedded-model lifetime 0.0014885738840035856 not recorded not recorded / not applicable
vmaf-neg-studio601 libvmaf 3.2.0 / named RGB ingress 0.027561374639560654 not recorded not recorded / not applicable
vmaf-studio601 libvmaf 3.2.0 / named RGB ingress 0.027456491697449792 not recorded not recorded / not applicable
vmaf-v1 libvmaf 3.2.0 / complete embedded-model lifetime 0.29963464306327126 not recorded not recorded / not applicable
vsi — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
vsi original VSI / Octave 6.4 0.0000000050279395091834544 not recorded not recorded / not applicable; open terms: see pinned audit
vsi-k2 original VSI / Octave 6.4 0.000000006297474430816408 not recorded not recorded / not applicable; open terms: see pinned audit
vsi-k3 original VSI / Octave 6.4 0.000000006385277306897308 not recorded not recorded / not applicable; open terms: see pinned audit
vsi-k4 original VSI / Octave 6.4 0.000000004950456933272562 not recorded not recorded / not applicable; open terms: see pinned audit
vsi-nodownscale original VSI / Octave 6.4 0.0000000050279395091834544 not recorded not recorded / not applicable; open terms: see pinned audit
wadiqam — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
wadiqam-fr-live original deepIQA / Chainer 7.8.1 / inference 0.000020318011344500064 not recorded MIT / permissive
wadiqam-fr-tid original deepIQA / Chainer 7.8.1 / inference 0.000001988584045875541 not recorded MIT / permissive
wadiqam-nr-live original deepIQA / Chainer 7.8.1 / inference 0.0000004283867300891586 not recorded MIT / permissive
wadiqam-nr-tid original deepIQA / Chainer 7.8.1 / inference 0.000003328961255988361 not recorded MIT / permissive
wadiqam-pyiqa PyIQA 0.1.16 / native ORT CPU comparison 0.000000002092197051023481 not recorded PolyForm Noncommercial 1.0.0 + S-Lab 1.0 (../../LICENSE-pyiqa, ../../LICENSE-S-Lab) / nc
wd — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
wd original Cool-Chic WD / five sigmas 0.000000001862645149230957 not recorded BSD-3-Clause; source and license notices in LICENSE-wd / permissive
ws-hv — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
ws-hv IVP-Lab original WS_HV notebook 0.000000005311563633370042 not recorded not recorded / not applicable
zensim — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
zensim — not recorded not recorded not recorded / not applicable
zensim-gpu — variants and configurations
Exact metric / command NAME Canonical identity Max absolute delta Median absolute delta Reference code / weights
zensim-gpu — not recorded not recorded not recorded / not applicable

DVIFMISH is a separate, unpublished benchmark dependency: publish = false; publication requires the original author’s consent. Its six benchmark configurations are dvifmish-port-min-v0.2, dvifmish-port-2d-v0.2, dvifmish-port-lap-v0.2, dvifmish-port-lap-v0.3, dvifmish-talk-faithful-luma-float and dvifmish-talk-faithful-luma-int. These are not public zenmetrics score names, and benchmark repeatability does not establish native-author oracle parity. Private adapters, models and weights are not distributed by these instructions.

Datasets

Datasets this repo validates or benchmarks against, with thanks to their authors:

  • AIC-HDR2025: Mohsen Jenadeleh, Jon Sneyers, Davi Lazzarotto, Shima Mohammadi, Dominik Keller, Atanas Boev, Rakesh Rao Ramachandra Rao, António Pinheiro. "Fine-Grained HDR Image Quality Assessment From Noticeably Distorted to Very High Fidelity", QoMEX 2025 (doi, arXiv:2506.12505).
  • JPEG AIC2026: Mohsen Jenadeleh, Jon Sneyers, João Ascenso, Thomas Richter, Alexander Karabutov, Panqi Jia, Elena Alshina, Osamu Watanabe, António Pinheiro, Touradj Ebrahimi, Dietmar Saupe. "JPEG AIC2026: A Large-Scale Dataset for Fine-Grained Assessment of Image Coding", 2026 (arXiv:2607.22783; data doi:10.18419/DARUS-6156, CC BY-SA 4.0). Its published metric scores are what the AIC2026 variants above reproduce; docs/AIC2026_METRICS_AND_FITTING.md has the per-column results.
  • JPEG AIC-3: Michela Testolina, Mohsen Jenadeleh, Shima Mohammadi, Shaolin Su, João Ascenso, Touradj Ebrahimi, Jon Sneyers, Dietmar Saupe. "Fine-Grained Subjective Visual Quality Assessment for High-Fidelity Compressed Images", DCC 2025 (doi, arXiv:2410.09501).
  • CID22: Jon Sneyers, Elad Ben Baruch, Yaron Vaxman (Cloudinary), JPEG AIC-3 contribution.
  • KADID-10k: Hanhe Lin, Vlad Hosu, Dietmar Saupe. QoMEX 2019 (database).
  • KADIS-700k: Hanhe Lin, Vlad Hosu, Dietmar Saupe. "DeepFL-IQA: Weak Supervision for Deep IQA Feature Learning", 2020 (arXiv:2001.08113).
  • KonJND-1k: Hanhe Lin, Guangan Chen, Mohsen Jenadeleh, Vlad Hosu, Ulf-Dietrich Reips, Raouf Hamzaoui, Dietmar Saupe. "Large-scale crowdsourced subjective assessment of picturewise just noticeable difference", IEEE TCSVT 32(9), 2022 (doi).
  • TID2013: Nikolay Ponomarenko, Lina Jin, Oleg Ieremeiev, Vladimir Lukin, Karen Egiazarian, Jaakko Astola. Signal Processing: Image Communication 30, 2015 (doi).
  • UPIQ: Aliaksei Mikhailiuk, María Pérez-Ortiz, Dingcheng Yue, Wilson Suen, Rafał K. Mantiuk. "Consolidated Dataset and Metrics for High-Dynamic-Range Image Quality", 2021 (arXiv:2012.10758).

The JPEG AIC test methodology we follow is the group's Common Test Conditions on objective quality assessment: WG1 N101156 (Dietmar Saupe, Jon Sneyers, Shima Mohammadi, João Ascenso) and v2.0, WG1 N101246 (Dietmar Saupe, Mohsen Jenadeleh, Jon Sneyers). For how established metrics behave in this high-fidelity range, see Shima Mohammadi, Mohsen Jenadeleh, Jon Sneyers, Dietmar Saupe, João Ascenso, "Evaluation of Objective Image Quality Metrics for High-Fidelity Image Compression", IEEE Access, 2026 (doi, arXiv:2509.13150).

How fast are these implementations?

These are timings of our ports, not of the metrics: several ports are not optimized yet. On one 3355×2516 (8.4 MP) photo pair, single-threaded on a Ryzen 9 7900X, most take 0.1–2 s; psnr, gmsd and mdsi take under 20 ms; our mad and mdctpsnr ports take about a minute each, and our mad grows faster than pixel count. Per-metric figures, peak memory, threading and caveats: benchmarks/cpu_metrics_1t8t_2026-10-09.md.

Other subcommands

Subcommand Does
score-video cvvdp's temporal path over two directories of frames
sweep encode an image set across a quality × knob grid and score every variant (--features sweep)
score-pairs score a TSV of pairs into a parquet sidecar (--features sweep)
assemble join score sidecars onto feature tables for training corpora (--features assemble)
jobexec run one job for the zenfleet job system (--features jobexec)
fleet-plan size a fleet (RAM, cores, VRAM, box count) for a sweep
size-invariance check that scores stay stable under downsample-and-rescore
capabilities print the features this binary was built with; --probe tests the GPU

Using it as a library

  • zenmetrics-api: one MetricKind enum and one Metric type over every per-crate scorer, CPU or GPU.
  • zenmetrics-orchestrator: scores many pairs in one process, picks CPU or GPU per metric from a benchmark cache, and falls back on out-of-memory.
  • Each metric crate under crates/ also works on its own; see its README.

Limitations

  • Source builds require the pinned sibling repos (see Quick start). Checkpoint packages include target-specific executables; GPU drivers and platform runtime dependencies remain required. There are no crates.io releases yet.
  • Most metrics run on one thread in the default build. The CLI builds eleven in-tree metric crates without their parallel (rayon) feature, and fast-ssim2 without rayon. Turning them on leaves scores bit-identical and, at 8 threads on an 8.4 MP pair, speeds those metrics up 1.4–2.4× (cvvdp 2.4×, mad 1.8×); see the threading section of the benchmark doc. cargo build --release -p cpu-profile --features metrics-parallel builds the benchmark harness that way.
  • vmaf rejects odd image dimensions. Crop to even sizes first.
  • hdrvdp and hdrvdp3 need absolute-luminance input (--hdr); they refuse sRGB pairs.
  • Metrics that need a neural-network runtime (LPIPS, DISTS, TOPIQ and similar) are not included.
  • Most metrics proposed to JPEG AIC-4 are not reproduced here yet: DVIFM, the Distortion Visibility Image Fidelity Measure by Maciej Pedzisz (Nokia); IDFIQA by Amirreza Khakpour, Sina Yademellat and Azadeh Mansouri, which needs a pretrained CNN; and the proposal variant of Butteraugli. The proposal-mDCTPSNR column is mDCT-PSNR in JND units, from the reference tool's -jnd option, which the mdctpsnr crate reproduces as mdct_psnr_jnd.
  • ms-gmsd, ms-gmsdc and mdsi are implemented from their papers and have not yet been compared with the authors' code; ssim has not been compared with the authors' ssim_index.m.

Documentation

License

Dual-licensed: AGPL-3.0-only (see LICENSE-AGPL3) or Imazen commercial (see COMMERCIAL.md). dssim-gpu's commercial track requires Kornel's upstream DSSIM licensing — see COMMERCIAL.md; this crate is neither maintained nor warrantied by him.

Image tech I maintain

Codecs ¹ zenjpeg · zenpng · zenwebp · zengif · zenavif · zenjxl · zenjxl-decoder · jxl-encoder · zenbitmaps · heic · zentiff · zenpdf · zensvg · zenjp2 · zenraw · ultrahdr
Codec internals zenrav1e · rav1d-safe · zenravif · zenavif-parse · zenavif-serialize
Compression zenflate · zenzop · zenzstd
Processing zenresize · zenquant · zenblend · zenfilters · zensally · zentone
Pixels & color zenpixels · zenpixels-convert · linear-srgb · garb · zenyuv
Pipeline & framework zenpipe · zencodec · zencodecs · zenlayout · zennode · zenwasm · zentract
Metrics zensim · fast-ssim2 · butteraugli · zenmetrics · resamplescope-rs
Pickers & ML zenanalyze · zenpredict · zenpicker · zenanalyze-api
Test corpora codec-corpus · imazen-26
Products Imageflow image engine (.NET · Node · Go) · Imageflow Server · ImageResizer (C#)

¹ pure-Rust, #![forbid(unsafe_code)] codecs, as of 2026

General Rust awesomeness

zenbench · archmage · magetypes · enough · whereat · cargo-copter · zenutils

Open source · @imazen · @lilith · lib.rs/~lilith

About

Most IQA metrics, in optimized cross-platform Rust 🚧 Will be reorganized soon.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages