light: AUTO and the shipped recipes ride the halved knobs too — AUTO's ceiling doubles with them so a blown frame still comes back the way it did, and each recipe's HIGHLIGHT/SHADOW doubles so its look stays on the knot it was tuned to

This commit is contained in:
2026-09-30 18:10:51 +07:00
parent a56581c757
commit 25b1312e0a
3 changed files with 40 additions and 28 deletions
+10 -4
View File
@@ -81,10 +81,16 @@ export function autoExposureStops(lum: number[]): number {
return Math.max(-AUTO_EV_MAX, Math.min(AUTO_EV_MAX, stops));
}
// How far AUTO may push HIGHLIGHT and SHADOW, in the sliders' own units: half
// of the ±10 ruler, so the frame is corrected but a hand can still finish the
// move. The knob then reports the number AUTO chose, the way the EV knob does.
const AUTO_TONE_MAX = 5;
// How far AUTO may push HIGHLIGHT and SHADOW, in the sliders' own units: the
// whole ±10 ruler, so a frame that really is clipped (or really is crushed)
// really does come back. It was 5 when a unit of HIGHLIGHT or SHADOW moved its
// knot a whole anchor; both now ride HALF an anchor (see a1/a3 in toneShader.ts),
// so 5 would have halved AUTO's own correction with the knob's reach. At 10 it
// draws the knot as far as the old number did — HIGHLIGHT to 0.625, SHADOW to
// 0.375 — where the quarter beside it is still 0.5 of its own slope and never
// flat — and the knob then reports the number AUTO chose, the way the EV knob
// does.
const AUTO_TONE_MAX = 10;
// The value `p` of the way up the binned ramp (0.99 for the top 1% of pixels):
// walk the cumulative count to the first bin that passes `p * total`, and report