From dfb0061035e0e67b36269d1131beaf12c0079100 Mon Sep 17 00:00:00 2001 From: lusoris Date: Sat, 27 Jun 2026 18:25:00 +0200 Subject: [PATCH] =?UTF-8?q?docs(bench):=20v0.15=20=E2=80=94=20deband=20rad?= =?UTF-8?q?ius=20premise-check=20validated=20positive=20(multi-scale=20deb?= =?UTF-8?q?and=20has=20measured=20headroom)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first positive premise-check in the bench series after the v0.11-v0.13 encoder-RC negatives. Two parts: the metric-tooling unblock that enabled it, and the result. Metric unblock: the standalone vmaf cambi 'hang' that had blocked every quality check was the GPU-accelerated fork's dispatcher grabbing CUDA/Vulkan (forcing --backend cpu makes it deterministic) plus the known write-JSON-then-teardown-sleep (read the partial under timeout, as the harness --vmaf-timeout already does). cambi itself was never broken. Result: on a wide (~107px) low-amplitude gradient with dither off (isolating the spatial averaging), CAMBI falls monotonically with range (7.84 -> 6.21 -> 5.14 -> 4.53 -> 4.30 at range 8/15/24/31) and is still descending at the range=31 cap. The spatial pass leaves real residual on bands wider than a single <=31 radius can span; the default range=15 under-debands them. Premise supported. Ties to v0.1.0: with dither on, CAMBI floors regardless of radius, but the 8-bit encoder quantizes that dither away and re-bands, so the durable banding removal is the spatial averaging -- which this shows is radius-limited. Multi-scale spatial deband (a coarse downsampled pass under the existing detail mask) is the durable lever. Status: validated-positive, build pending. The build needs detail-bearing validation content (bands + texture, scored post-encode CAMBI for the gain + SSIM/SSIMULACRA2 for no over-smoothing) -- the failure mode the synthetic gradient cannot show. Converts the gains-hunt #1 quality candidate from corpus-blocked/unknown to premise-supported/ready-to-build. Docs-only (bench-results record); no code, ABI, or surface change. Co-Authored-By: Claude Opus 4.8 --- docs/development/bench-results.md | 56 +++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/docs/development/bench-results.md b/docs/development/bench-results.md index ee155f3..cdfc95e 100644 --- a/docs/development/bench-results.md +++ b/docs/development/bench-results.md @@ -541,6 +541,62 @@ preserved across the 1-frame delay + EOF flush; an independent review confirmed Shipped **opt-in (default 0)** given the niche benefit + the latency/binding cost — animation pipelines (`tune=anime`) enable it. See ADR-0137. +## v0.15 — deband radius premise-check (multi-scale deband): the spatial pass is radius-limited on wide bands + +The first **positive** premise-check in this series after the v0.11-v0.13 +encoder-RC negatives, and the metric tooling that unblocks it. The candidate: +**multi-scale deband** — the current filter samples one random-distance ring of +4 taps at `dist = r·range` capped at `range ≤ 31`, so a band wider than a single +≤31-px reach is never spanned. Premise: if CAMBI keeps falling as `range` grows +and is still falling at the cap, a single fixed radius leaves wide-band banding +on the table. + +**Metric unblock.** The standalone `vmaf --feature cambi` appeared to "hang", which +had blocked every quality-gain check this session. Root cause was mundane, not a +cambi failure: (a) it is a GPU-accelerated fork whose dispatcher first-match-wins +race grabs CUDA/Vulkan — forcing `--backend cpu` makes it deterministic and fast; +(b) it writes the JSON **before** a teardown sleep (the same behavior the harness's +`--vmaf-timeout` already exploits, v0.14 Open/next §3), so `timeout N … -o out.json +--json` + read-the-partial returns the scores in well under a second of compute. +(A `pkill -9` prelude was separately swallowed by the unsafe-bash hook — dropped.) + +**Result.** Synthetic wide low-amplitude luma gradient (16→24 over 854 px ⇒ ~107-px +bands, wider than the 2·31 = 62-px max reach), 480p, **dither off** (`grainy=0 +dither=none`) to isolate the *spatial* averaging from the grain: + +| `range` | CAMBI | vs baseline | +|---:|---:|---:| +| baseline (no deband) | 7.837 | — | +| 8 | 6.207 | −20.8 % | +| 15 (default) | 5.145 | −34.3 % | +| 24 | 4.532 | −42.2 % | +| 31 (max) | 4.302 | −45.1 % | + +CAMBI falls **monotonically** and is **still descending at the `range=31` cap** +(24→31 still buys −5 %): the spatial pass leaves CAMBI ≈ 4.3 of real residual on +bands wider than it can reach, and the default `range=15` under-debands them +(5.14 vs the 4.30 achievable at 31). **Premise supported.** + +**Why this matters through the encoder (ties to v0.1.0).** With the shipping +default *dither on*, CAMBI floors to ≈ 3e-6 at **every** radius — the bluenoise +grain breaks the banding contour the metric keys on. But v0.1.0 already established +that an **8-bit encoder quantizes that dither away and re-bands**, so the dither's +banding removal does not survive to the decoded output. What *does* survive is the +**spatial averaging** (it changes the actual luma plateaus, not added noise) — and +this premise-check shows that durable pass is radius-limited. So multi-scale spatial +deband (a coarse, downsampled pass to span wide bands cheaply, blended under the +existing detail mask) is the durable lever where neither a single ≤31 radius nor +the encoder-fragile dither reaches. + +**Status: validated-positive, build pending.** The build is **not** shipped here: +proving it does not over-smooth needs detail-bearing content (wide bands *and* +texture/edges), scored **post-encode** (or dither-off) CAMBI for the gain plus an +SSIM/SSIMULACRA2 detail-preservation check — the synthetic-gradient premise-check +cannot show the over-smoothing failure mode. That validation corpus is the tracked +blocker (OPPORTUNITIES.md). This entry converts the gains-hunt's #1 quality +candidate from "corpus-blocked, unknown" to "premise-supported, ready to build +behind a detail-preservation gate." + ## Open / next 1. **SVT-AV1 ROI on real content**: the v0.10 synthetic gain is modest; re-run