port: the off-edge splash residual is not tonal, and I compared it to the wrong floor

Ran the per-level tone correction I said was untested, deriving the curve on one
splash and applying it to the other because fitting and scoring on the same pixels
succeeds by construction. developer_logos off-edge: uncorrected 2.7512, single
gamma 0.85 gives 0.9040, the cross-applied per-level curve gives 1.3795 -- worse
than a single exponent.

The control settles it: publisher_logo scored with its OWN fitted curve gives
1.4209 against 1.4440 for gamma 0.85. A tone curve fitted on those very pixels
improves them by 1.6%. If the residual were a tone-mapping error, fitting the tone
mapping on its own training data would collapse it. The residual is not tonal.

And it is smaller than I made it sound. I called 0.82-1.42 '15-25x the 0.06
rasterisation floor', but 0.06 is render-to-render reproducibility -- the floor for
asking whether the renderer repeats itself. For render-versus-capture the floor
includes 8-bit quantisation on both sides: uniform rounding is RMSE 1/sqrt(12) =
0.289, so two independently quantised images differ by ~0.41 before anything is
wrong. Against that, 0.90 is ~2.2x, about one level in 255.

Same error as comparing an in-box margin to a whole-frame spread, which I flagged
in someone else's work two days ago.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 16:43:41 +00:00
parent 6b75beda54
commit 2a8caf03ff

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
185 sections. Search this before re-deriving anything.
186 sections. Search this before re-deriving anything.
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
@@ -196,6 +196,7 @@ dies, which is what this file is for.
* [Their draw-stream result checked against my export — three confirmations and one correction](#their-draw-stream-result-checked-against-my-export--three-confirmations-and-one-correction)
* [Nested leaves may advance at half rate — a quantified defect in shipped output](#nested-leaves-may-advance-at-half-rate--a-quantified-defect-in-shipped-output)
* [Their Route 1 is closed for the whole archive, not just the title](#their-route-1-is-closed-for-the-whole-archive-not-just-the-title)
* [The off-edge splash residual is **not** tonal — and I was comparing it to the wrong floor](#the-off-edge-splash-residual-is-not-tonal--and-i-was-comparing-it-to-the-wrong-floor)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -10520,3 +10521,52 @@ screen is worth their time trying.
clocks I enumerated — looping focus record, spin, leaf — are all sub-records, and
that is now explained rather than observed. Their plate finding is the same shape:
`ptbtn00` is a one-shot fade and the repeating pulse comes from its nested `.rat`.
## The off-edge splash residual is **not** tonal — and I was comparing it to the wrong floor
I said the remaining 0.821.42 off-edge residual was *"consistent with the binned
tone table leaving about a level of error"* and that a per-level correction was
the test I had not run. Ran it, deriving the curve on one splash and applying it
to **the other**, because fitting and scoring on the same pixels succeeds by
construction:
| `developer_logos`, off-edge | RMSE |
|---|---|
| uncorrected | 2.7512 |
| **single gamma 0.85** | **0.9040** |
| per-level curve from `publisher_logo` | 1.3795 |
🔴 **The per-level curve is worse than a single exponent**, cross-applied. And the
control that settles it:
| `publisher_logo`, off-edge | RMSE |
|---|---|
| single gamma 0.85 | 1.4440 |
| **its own fitted curve** | **1.4209** |
**A tone curve fitted on those very pixels improves them by 1.6 %.** If the
residual were a tone-mapping error, fitting the tone mapping on its own training
data should collapse it. It does not, so **the residual is not tonal** — my
hypothesis is refuted by the strongest test available to it.
### ⚠️ And the residual is smaller than I made it sound
I called 0.821.42 *"1525× the 0.06 rasterisation floor"*. That is the wrong
comparison: 0.06 is **render-to-render** reproducibility, which is the floor for
asking *does my renderer repeat itself*. For **render-versus-capture** the floor
includes 8-bit quantisation on both sides — uniform rounding error has RMSE
1/√12 ≈ 0.289 per image, so a difference of two independently quantised images
sits at **≈ 0.41** before anything is wrong at all.
Against that floor, 0.90 is **~2.2×**, not 25×. It is roughly **one level in 255**.
📌 So the honest statement of the splash rows is stronger than what I had:
off-edge, after a single gamma, the port differs from the game by about **twice
the irreducible quantisation floor**, and the shape of what remains is *not*
tonal. I quoted the same number twice this week against a floor chosen for a
different question — the same error as comparing an in-box margin to a whole-frame
spread, which I flagged in someone else's work two days ago.
⚠️ What is still unexplained is now a much smaller thing: ~0.5 RMSE above
quantisation, off-edge, non-tonal, on screens with no free-running element. I have
no candidate for it and I am not going to invent one.