Records the settle-time decode, and corrects two claims it overturns.
docs/re/structures/ui-settle-time.md is the finding: a settled screen is one
instant every element is posed at, the disc names it (the midpoint of the
longest keyframe-free interval), and the title's arc closes from 33.22 to
11.79 with the clipped-pixel count landing on the console's 1459 within 0.5%.
Includes the disc-wide reach -- only 30% of bundles have a window wide enough
to trust -- and a three-way figure.
Withdrawn in ui-rotation-implemented.md:
* "Flat. No minimum." was not a property of rotation. `at` posed LEAVES ONLY,
so the scan moved the light sweeps and never touched the top-level flashes.
* "our renderer does not draw ptlogo1/ptlogo2 at all" is wrong. Both are
drawn; the four elements the diagnostic named are kind-0x4 ghosts sharing
their template's name. Hiding the real ones makes the error WORSE by
+5.20 and +7.47.
* Its 10.92 baseline is not reproducible -- 14.07 at its own pre-change tag
and 14.07 today -- so the "1.7% better" verdict rests on an unrecorded
recipe. Flagged in title-residual-tone-vs-geometry.md too.
METHOD.md gains two traps: a shared CARGO_TARGET_DIR makes a `git worktree`
build silently replace the binary you run next (it cost three renders here,
caught only because a missing flag was a hard error rather than a wrong
number); and an aggregate computed per-element is not a state of the system.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd
4.2 KiB
✅ At least two thirds of the title's disagreement is GEOMETRY, not tone
⚠️ The 10.92 title baseline here could not be reproduced on 2026-08-29 —
screen render --build 4 --blackagainst the same capture gives 14.07 both atformats-pin-2026-08-29cand today. The ratio this document argues for may well survive; the absolute is in doubt. Separately, part of the title's residual is now known to be neither tone nor rotation butrest()posing five transient flashes at their peaks —ui-settle-time.mdcloses the light-arc band from 33.22 to 11.79.
Classification: measured, on committed captures. Answers a question the pending rotation decision needs: how much would drawing the rotation actually buy?
Two separate effects are known to make our renders differ from the console:
- the tone curve — the console renders midtones brighter than we do
(
ui-render-tone-curve.md), and its single-exponent model is refuted above render ≈ 40; - the missing rotation — our blit draws axis-aligned rectangles, so the
title's two tilted light sweeps land as upright bars
(
ui-keyframe-rotation.md).
They are confounded in any whole-frame number. This separates them.
Method, and why the split is an upper bound on tone
A per-level lookup table fitted on a screen is the most general tone model there is: it maps every render level to whatever capture level minimises the error, with no functional form assumed. Whatever such a LUT cannot close is, by construction, not a per-pixel-level effect — it is spatial.
So fitting a LUT on the screen itself and measuring what remains gives an upper bound on the tone share and a lower bound on the geometry share.
The positive control
The method must be able to close a residual that really is tone. On the main menu — where the port measures only 0.06 % of pixels differing, so geometry is essentially right — it does:
| mean abs difference | closed | |
|---|---|---|
| main menu, uncorrected | 9.26 | — |
| main menu + LUT fitted on the main menu | 2.75 | 70.3 % |
✅ The instrument works: a tone-dominated residual collapses by 70 %.
The result
| mean abs difference | closed | |
|---|---|---|
| title, uncorrected | 10.92 | — |
| title + LUT fitted on the title | 7.42 | 32.0 % |
🔴 At most 32 % of the title's disagreement is a tone effect, so at least 68 % is spatial — content in the wrong place. That is where the rotation lives, and it makes the rotation the dominant term by roughly two to one.
⚠️ The same-screen LUT is fitted, so 32 % is generous to tone. The true tone share is smaller and the geometry share larger.
🔴 And a claim this refutes: there is no single transferable tone curve
Fitting on one screen and applying to the other:
| closed | |
|---|---|
| main menu + LUT fitted on the title | +29.7 % |
| title + LUT fitted on the main menu | −24.0 % ✗ |
The menu's curve makes the title worse. A curve fitted on a dark, flat screen is unconstrained at the bright end — the menu's populated range is levels 5–204 with few bright pixels — and extrapolating it onto the title's planet and wordmark actively harms.
⚠️ So "the tone curve" is not one thing that can be measured once and applied.
This extends ui-render-tone-curve.md's refutation of
the single exponent: even a full per-level LUT fails to transfer between
screens. A consumer must not carry a global tone correction.
Reach
- Two screens, one capture each; the title capture is the plate-free frame and our render is at rest, so they are the same screen but not the same instant — a looser pairing than the port's posed comparison, which is why the absolute numbers here (10.92) are larger than its 1.81 % of pixels. ⚠️ The ratio is what this page claims, not the absolute level.
- Our render draws the sweeps' parent record only — the pre-leaf-fix state — so the geometry share measured here includes both the missing rotation and the missing leaf placement. Both are closed by the same decision.