mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-26 19:07:06 -06:00
Saturation −100 greyed to the HSL lightness, so a yellow (255, 255, 0) became grey 128 where Photoshop shows near-white: a yellow logo with Brightness/Contrast +150 and Vibrance › Saturation −100 clipped to it stayed yellow under Lighter Color. Measured black-box on Photoshop 25.4 (16-bit runs of 7,400-colour charts and HSV sweeps; sRGB, Adobe RGB and ProPhoto documents), both sliders work in linear light through the document tone curve, Vibrance first, then Saturation: - Saturation moves each colour from the grey 0.288 R + 0.712 G (blue has no weight, in every profile) by 1 + s, clipping per channel: within 0.07/255. - Negative Vibrance is an HSV change in linear light keeping the hue, in closed form: 0.2/255 on average, the deepest shadows (V < 0.05) drift. - Positive Vibrance: the brightness term is exact; the saturation boost (stronger for dull and dark colours, damped on reds and skin) is a fit, 0.4 (+10) to 5 (+100) /255 on average. CPU (compose::adjust::vibrance_px) and GPU (compose.wgsl) share the constants; the parity test gains a negative Vibrance and Saturation −100. photocraft-corpus adjustments/rgb8|rgb16/ vibrance.psd (Vibrance +60, Saturation −15): 25.6/255 mean, 89 max → 0.38 mean, 5 max. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>