Levels
Adjust image levels with input/output range, gamma, and per-channel control.
What it does
Levels remaps the tonal range of an image. Pull the input black and white points in to punch up contrast, push the output black and white points to flatten it, bend the midtones with Gamma. Channel Mode set to Per-Channel gives red, green, blue and alpha their own black point, white point and gamma curve instead of one shared curve.
The remap applies to the same colour values whether the input is a rendered raster, a filled shape, or colour carried on points, so the result matches wherever it is plugged in.
When to use it
Punching up contrast: Input Black up, Input White down.
Lifting or crushing the black and white floor of the output: Output Black and Output White.
Brightening or darkening midtones without touching black and white: Gamma.
Independent control per colour channel, such as blue shadows without red or green: Per-Channel.
A quick negative: Invert.
| Parameter | Type | Default | What it does |
|---|---|---|---|
content_in | Color Field or Field or Volume or Primitives or Collection or GPU Geometry or Geometries or Number or Vec2 or Vec3 or Color or Number[] or Color[] | — | — |
channel_mode | String | "Master" | Master adjusts all RGB channels together, Per-Channel allows independent control. One of: Master, Per-Channel. |
in_black | Number | 0 | Input black point - pixels at or below this level become black |
in_white | Number | 1 | Input white point - pixels at or above this level become white |
gamma | Number | 1 | Gamma correction - < 1 brightens midtones, > 1 darkens midtones |
out_black | Number | 0 | Output black point - remaps black to this level |
out_white | Number | 1 | Output white point - remaps white to this level |
r_in_black | Number | 0 | Red channel input black point |
r_in_white | Number | 1 | Red channel input white point |
r_gamma | Number | 1 | Red channel gamma |
g_in_black | Number | 0 | Green channel input black point |
g_in_white | Number | 1 | Green channel input white point |
g_gamma | Number | 1 | Green channel gamma |
b_in_black | Number | 0 | Blue channel input black point |
b_in_white | Number | 1 | Blue channel input white point |
b_gamma | Number | 1 | Blue channel gamma |
a_in_black | Number | 0 | Alpha channel input black point |
a_in_white | Number | 1 | Alpha channel input white point |
a_gamma | Number | 1 | Alpha channel gamma |
auto_levels | Boolean | false | Automatically compute black/white points from histogram (ignores manual values when enabled) |
auto_clip | Number | 0.100 | Percentage of pixels to clip at black/white ends (0.1% = ignore extreme outliers) |
pre_clamp | Boolean | true | Clamp input values to 0-1 range before applying levels |
post_clamp | Boolean | true | Clamp output values to 0-1 range after applying levels |
invert | Boolean | false | Invert the output (1 - value) for RGB channels |
spatial_strength | Field | — | Spatial field controlling where the effect applies (0=bypass, 1=full) |
strength | Number | 1 | Effect strength / wet-dry (0 = no effect, 1 = full). Editable, wirable, keyframable. |
Gotchas
Per-Channel is the only mode that touches alpha. In Master mode RGB share one curve and alpha passes through untouched, so reshaping the alpha channel requires Per-Channel.
Invert flips RGB only. Alpha is never inverted, in either channel mode.
Pre-Clamp and Post-Clamp default on, holding values inside 0–1 before and after the remap. Turn Pre-Clamp off when deliberately feeding out-of-range HDR values into the input curve.
Worked example
Add a Levels node and feed it an image.
Drag Input Black up and Input White down to increase contrast.
Nudge Gamma below 1.0 to brighten midtones, or above 1.0 to darken them.
Switch Channel Mode to Per-Channel and adjust the Blue row alone to cool the shadows without shifting red or green.