cbd0178cda30988a21296ea4f93f8b683112a25e
The rail gains an HSL tab between FX and FRAME, and the tab opens the mixer ported from the web studio: eight hue bands, each with hue/sat/lum knobs on a -10..+10 ruler, plus three whole-image moves behind an IMAGE divider. Band weights are linear tents anchored on HSL_BANDS and summing to 1 at every hue, so neighbouring bands hand over at exactly half strength and no hue falls in a gap. Pixels under 8% saturation are gated out of the weights (rgb2hsl calls a neutral red, so an ungated one would ride the RED band), while the whole-image LUM move is added after the gate and still lifts a picture that -SAT has pulled to grey. The mixer runs last in TONE_SKSL, so a band edit is judged on the colour the user actually sampled. The eyedropper is library-only: PICK arms a layer over the picture, a tap reads the rendered pixel off the canvas, points the ruler at the nearest band and hangs a panel carrying that band's three knobs. A live preview has no pixel to read, so in camera mode the chip greys out - the mixer itself still runs there, which is why the camera worklet's tone buffer had to grow from 10 slots to 40: a missed slot would have pushed NaN into every uniform and taken the whole tone pass down, not just HSL. HSL is a LITE feature (the web studio builds it for guests too), and MONOCHROME switches the mixer off outright - a mono stock has no hue to select. Checked on a Xiaomi thor against an 8-band chart: +10 whole-image HUE rotates all eight bands by +30 deg, -10 on one band's SAT flattens that band and leaves the other seven alone, and a whole-image -SAT drops the camera preview's mean chroma 13.7 -> 0.4 with +LUM still lifting it 116 -> 166. Cut as 1.2.4 / versionCode 6.
The file is empty.
Description
Languages
TypeScript
92.9%
Kotlin
5.7%
JavaScript
1.3%