levels:PointwiseFilter< { gamma:{ default:1; description:"Above 1 lightens the midtones, below 1 darkens them."; label:"Gamma (midtones)"; max:10; min:0.1; step:0.01; type:"float"; }; inBlack:{ default:0; description:"Input tones at or below this become black."; label:"Input black"; max:1; min:0; step:0.005; type:"float"; }; inWhite:{ default:1; description:"Input tones at or above this become white."; label:"Input white"; max:1; min:0; step:0.005; type:"float"; }; outBlack:{ default:0; description:"Black is raised to this level: a higher value gives a faded look."; label:"Output black"; max:1; min:0; step:0.005; type:"float"; }; outWhite:{ default:1; description:"White is lowered to this level."; label:"Output white"; max:1; min:0; step:0.005; type:"float"; }; }, > = ...
Classic levels per channel in sRGB-encoded units: input black/white points stretch the range
and clip outside it, gamma bends the midtones, output black/white compress the result. Like any
levels tool it is an LDR operation: values above white (HDR) are clipped to the output white,
even at the defaults. (Leaving the top unclipped made narrow input ranges blow values past the
float16 range.)
Classic levels per channel in sRGB-encoded units: input black/white points stretch the range and clip outside it, gamma bends the midtones, output black/white compress the result. Like any levels tool it is an LDR operation: values above white (HDR) are clipped to the output white, even at the defaults. (Leaving the top unclipped made narrow input ranges blow values past the float16 range.)