Skip to content

Visual proofs — vocabulary-entry before/after gallery

Side-by-side renders of the synthetic ColorChecker chart and the synthetic grayscale ramp, before and after each vocabulary entry. For human visual validation: does each primitive visibly do what its description claims?

Renders use an empty-history baseline + --apply-custom-presets false so the chart passes through the darktable pipeline cleanly (input profile → output profile only, no scene-referred tone mapping). Each primitive is then applied in isolation — the only difference between baseline and per-entry renders is that primitive's effect. This lets you eyeball each primitive against the reference chart and verify it does what its description claims.

Production raw renders use the full _baseline_v1.xmp with sigmoid + colorbalancergb defaults — that path is correct for raws. The empty-baseline trick is specifically for chart-input isolation testing; it would not be appropriate for editing real photographs.

Masked columns: every non-mask-bound primitive renders additionally through a centered ellipse mask (radius=0.2, border=0.05) so you can see the spatial shaping in action. The mask covers the middle 16% of the frame; anything outside it should remain at baseline. This visually demonstrates that any primitive can be applied through a mask — see mask-applicable-controls.md for the per-module compatibility matrix.

Auto-generated. Regenerate via uv run python scripts/generate-visual-proofs.py after vocabulary changes. Commit the regenerated images alongside any vocabulary commit so the gallery and the manifest stay in sync.

Render size: 400x400, JPEG quality default. Inputs: synthetic targets from tests/fixtures/reference-targets/.

🚫 Real-raw fixture missing (#103). A small set of entries (currently HSL via colorequal) need a real raw for visual proof — the synthetic chart pipeline produces degenerate output. Those entries currently show a documented placeholder row; drop a fixture file at the path defined by REAL_RAW_FIXTURE in this script (see tests/fixtures/raws/README.md) to enable real-raw rendering.


Baseline reference

These are the reference targets rendered through the baseline XMP with no primitive applied — the before state every row below compares against.

ColorChecker Grayscale ramp
baseline ColorChecker baseline grayscale

starter pack (2 entries)

wb_warm_subtle

Warm white balance, subtle.

ColorChecker (global) Grayscale (global)
wb_warm_subtle ColorChecker global wb_warm_subtle grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

look_neutral

Neutral L2 look — exposure + warm-subtle WB baseline.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_neutral ColorChecker global look_neutral grayscale global look_neutral ColorChecker masked look_neutral grayscale masked

expressive-baseline pack (112 entries)

grain_strength

Parameterized grain strength (RFC-021). Pass --value V; range [0.0, 100.0]. 8 = grain_fine-equivalent, 25 = grain_medium-equivalent, 50 = grain_heavy-equivalent. Replaces the v1.5.x discrete grain_fine / grain_medium / grain_heavy entries with a single continuous-magnitude primitive.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grain_strength ColorChecker global grain_strength grayscale global grain_strength ColorChecker masked grain_strength grayscale masked

(near-baseline diff in ColorChecker (global): grain texture is hard to see on flat chart patches — see the clipped-gradient row below for visible texture, or mask-applicable-controls)

(near-baseline diff in grayscale (global): grain texture is hard to see on flat chart patches — see the clipped-gradient row below for visible texture, or mask-applicable-controls)

(near-baseline diff in ColorChecker (masked): grain texture is hard to see on flat chart patches — see the clipped-gradient row below for visible texture, or mask-applicable-controls)

(near-baseline diff in grayscale (masked): grain texture is hard to see on flat chart patches — see the clipped-gradient row below for visible texture, or mask-applicable-controls)

On the clipped-gradient fixture (continuous tone + blown highlights — chart designed to show this module's effect; see reference-targets/README.md):

Clipped gradient (global) Clipped gradient (centered ellipse mask)
grain_strength clipped-gradient global grain_strength clipped-gradient masked

Parameter sweep (grain_strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +8.00 +25.00 +50.00 +100.00
grain_strength grain_strength=0.00 grain_strength grain_strength=+8.00 grain_strength grain_strength=+25.00 grain_strength grain_strength=+50.00 grain_strength grain_strength=+100.00

vignette

Parameterized vignette (RFC-021). Pass --value V (CLI) or value: V (MCP); range [-1.0, +1.0] (negative darkens corners; positive lifts). Replaces the v1.5.x discrete vignette_subtle / vignette_medium / vignette_heavy entries with a single continuous-magnitude primitive.

ColorChecker (global) Grayscale (global)
vignette ColorChecker global vignette grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

(near-baseline diff in ColorChecker (global): subtle vignette is small at the modest gallery render size; effect is concentrated at the very corners of the frame)

(near-baseline diff in grayscale (global): subtle vignette is small at the modest gallery render size; effect is concentrated at the very corners of the frame)

Parameter sweep (brightness): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.80 -0.50 -0.25 0.00
vignette brightness=-0.80 vignette brightness=-0.50 vignette brightness=-0.25 vignette brightness=0.00

highlights_clip_threshold

Parameterized highlight-recovery clip threshold (RFC-021). Pass --value V; range [0.0, 2.0]: lower = more aggressive recovery (0.95 = subtle, 0.85 = strong, 0.5 = aggressive). Default 1.0 (darktable default; recovers only above 1.0). Replaces the v1.5.x discrete highlights_recovery_subtle / highlights_recovery_strong entries.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
highlights_clip_threshold ColorChecker global highlights_clip_threshold grayscale global highlights_clip_threshold ColorChecker masked highlights_clip_threshold grayscale masked

(near-baseline diff in ColorChecker (global): this chart has no blown highlights to recover — see the clipped-gradient row below for the visible effect, or mask-applicable-controls)

(near-baseline diff in grayscale (global): this chart has no blown highlights to recover — see the clipped-gradient row below for the visible effect, or mask-applicable-controls)

(near-baseline diff in ColorChecker (masked): this chart has no blown highlights to recover — see the clipped-gradient row below for the visible effect, or mask-applicable-controls)

(near-baseline diff in grayscale (masked): this chart has no blown highlights to recover — see the clipped-gradient row below for the visible effect, or mask-applicable-controls)

On the clipped-gradient fixture (continuous tone + blown highlights — chart designed to show this module's effect; see reference-targets/README.md):

Clipped gradient (global) Clipped gradient (centered ellipse mask)
highlights_clip_threshold clipped-gradient global highlights_clip_threshold clipped-gradient masked

Parameter sweep (clip_threshold): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +0.85 +0.95 +1.00 +1.50
highlights_clip_threshold clip_threshold=+0.50 highlights_clip_threshold clip_threshold=+0.85 highlights_clip_threshold clip_threshold=+0.95 highlights_clip_threshold clip_threshold=+1.00 highlights_clip_threshold clip_threshold=+1.50

sigmoid_contrast

Parameterized sigmoid tone-curve contrast (RFC-021). Pass --value V (CLI) or value: V (MCP); range [0.5, 5.0] (1.0 = mild s-curve, 1.5 = darktable default / no curve change, 2.5 = aggressive s-curve). Replaces the v1.5.x discrete contrast_low / contrast_high entries with a single continuous-magnitude primitive.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
sigmoid_contrast ColorChecker global sigmoid_contrast grayscale global sigmoid_contrast ColorChecker masked sigmoid_contrast grayscale masked

Parameter sweep (contrast): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +1.50 +2.00 +2.50
sigmoid_contrast contrast=+0.50 sigmoid_contrast contrast=+1.00 sigmoid_contrast contrast=+1.50 sigmoid_contrast contrast=+2.00 sigmoid_contrast contrast=+2.50

blacks_lifted

Lift target black to 0.5.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
blacks_lifted ColorChecker global blacks_lifted grayscale global blacks_lifted ColorChecker masked blacks_lifted grayscale masked

blacks_crushed

Crush blacks: target 0.001 + skew -0.3.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
blacks_crushed ColorChecker global blacks_crushed grayscale global blacks_crushed ColorChecker masked blacks_crushed grayscale masked

whites_open

Open whites: target 300 (3x default).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
whites_open ColorChecker global whites_open grayscale global whites_open ColorChecker masked whites_open grayscale masked

bw_sky_drama

B&W with sky-drama mix (red-emphasis: R 0.5 / G 0.4 / B 0.1). Lightens reds and darkens blues — classic 'red filter' landscape look that emphasizes clouds against sky. normalize_grey=true.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
bw_sky_drama ColorChecker global bw_sky_drama grayscale global bw_sky_drama ColorChecker masked bw_sky_drama grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

bw_foliage

B&W with foliage mix (green-emphasis: R 0.1 / G 0.7 / B 0.2). Lightens greens — separates foliage from neighboring tones; useful for forest / botanical work where green is the dominant subject. normalize_grey=true.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
bw_foliage ColorChecker global bw_foliage grayscale global bw_foliage ColorChecker masked bw_foliage grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

toneequalizer

Parameterized 9-band tone equalizer (RFC-022 Tier 2; most complex multi-parameter ship). Pass --param NODE=V for any of: noise, ultra_deep_blacks, deep_blacks, blacks, shadows, midtones, highlights, whites, speculars. Each in [-2.0, +2.0] EV; default 0.0. Algorithm fields preserved at darktable defaults.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
toneequalizer ColorChecker global toneequalizer grayscale global toneequalizer ColorChecker masked toneequalizer grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (noise): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer noise=-1.50 toneequalizer noise=-0.50 toneequalizer noise=0.00 toneequalizer noise=+0.50 toneequalizer noise=+1.50

Parameter sweep (ultra_deep_blacks): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer ultra_deep_blacks=-1.50 toneequalizer ultra_deep_blacks=-0.50 toneequalizer ultra_deep_blacks=0.00 toneequalizer ultra_deep_blacks=+0.50 toneequalizer ultra_deep_blacks=+1.50

Parameter sweep (deep_blacks): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer deep_blacks=-1.50 toneequalizer deep_blacks=-0.50 toneequalizer deep_blacks=0.00 toneequalizer deep_blacks=+0.50 toneequalizer deep_blacks=+1.50

Parameter sweep (blacks): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer blacks=-1.50 toneequalizer blacks=-0.50 toneequalizer blacks=0.00 toneequalizer blacks=+0.50 toneequalizer blacks=+1.50

Parameter sweep (shadows): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer shadows=-1.50 toneequalizer shadows=-0.50 toneequalizer shadows=0.00 toneequalizer shadows=+0.50 toneequalizer shadows=+1.50

Parameter sweep (midtones): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer midtones=-1.50 toneequalizer midtones=-0.50 toneequalizer midtones=0.00 toneequalizer midtones=+0.50 toneequalizer midtones=+1.50

Parameter sweep (highlights): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer highlights=-1.50 toneequalizer highlights=-0.50 toneequalizer highlights=0.00 toneequalizer highlights=+0.50 toneequalizer highlights=+1.50

Parameter sweep (whites): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer whites=-1.50 toneequalizer whites=-0.50 toneequalizer whites=0.00 toneequalizer whites=+0.50 toneequalizer whites=+1.50

Parameter sweep (speculars): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.50 -0.50 0.00 +0.50 +1.50
toneequalizer speculars=-1.50 toneequalizer speculars=-0.50 toneequalizer speculars=0.00 toneequalizer speculars=+0.50 toneequalizer speculars=+1.50

sharpen

Parameterized sharpening (RFC-022 Tier 2). Pass --value V; range [0.0, 2.0] (0.0 = no sharpen, 0.5 = subtle, 1.0 = strong, 2.0 = aggressive). Radius preserved at darktable default 2.0 px, threshold at 0.5.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
sharpen ColorChecker global sharpen grayscale global sharpen ColorChecker masked sharpen grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (amount): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.50 +1.00 +1.50 +2.00
sharpen amount=0.00 sharpen amount=+0.50 sharpen amount=+1.00 sharpen amount=+1.50 sharpen amount=+2.00

crop

Parameterized crop (RFC-022 Tier 2). Pass --param cx=V cy=V cw=V ch=V — each in [0.0, 1.0]. Default 0,0,1,1 (no crop). cx/cy = top-left margin, cw/ch = bottom-right margin (so crop region is [cx..cw] x [cy..ch] in normalized coords). First workflow-primitive parameterized entry; aspect-ratio constraint preserved at -1/-1 (free).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
crop ColorChecker global crop grayscale global crop ColorChecker masked crop grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (cx): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.10 +0.20 +0.30
crop cx=0.00 crop cx=+0.10 crop cx=+0.20 crop cx=+0.30

Parameter sweep (cy): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.10 +0.20 +0.30
crop cy=0.00 crop cy=+0.10 crop cy=+0.20 crop cy=+0.30

Parameter sweep (cw): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.70 +0.80 +0.90 +1.00
crop cw=+0.70 crop cw=+0.80 crop cw=+0.90 crop cw=+1.00

Parameter sweep (ch): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.70 +0.80 +0.90 +1.00
crop ch=+0.70 crop ch=+0.80 crop ch=+0.90 crop ch=+1.00

bilat_clarity_strength

Parameterized clarity strength on bilat / local laplacian (RFC-021). Pass --value V; range [-1.0, 4.0]. 1.5 = clarity_strong-equivalent. clarity_painterly stays as a separate discrete entry — different kind, not strength.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
bilat_clarity_strength ColorChecker global bilat_clarity_strength grayscale global bilat_clarity_strength ColorChecker masked bilat_clarity_strength grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (clarity_strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.50 +1.50 +2.50
bilat_clarity_strength clarity_strength=-0.50 bilat_clarity_strength clarity_strength=0.00 bilat_clarity_strength clarity_strength=+0.50 bilat_clarity_strength clarity_strength=+1.50 bilat_clarity_strength clarity_strength=+2.50

clarity_painterly

Soft painterly local contrast (detail 0.4).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
clarity_painterly ColorChecker global clarity_painterly grayscale global clarity_painterly ColorChecker masked clarity_painterly grayscale masked

clarity_etched

L3 discrete kind — etched / over-defined clarity (#110). bilat_clarity_strength=2.0 (high local-contrast bite).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
clarity_etched ColorChecker global clarity_etched grayscale global clarity_etched ColorChecker masked clarity_etched grayscale masked

clarity_dreamy

L3 discrete kind — soft / dreamy clarity (#110). bilat_clarity_strength=-0.5 (negative bite — softens local contrast).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
clarity_dreamy ColorChecker global clarity_dreamy grayscale global clarity_dreamy ColorChecker masked clarity_dreamy grayscale masked

sharpen_edge_only

L3 discrete kind — edge-only sharpening (#110). amount=0.6 with default radius (2.0 px) and threshold (0.5). Threshold gates sharpening to detected edges only.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
sharpen_edge_only ColorChecker global sharpen_edge_only grayscale global sharpen_edge_only ColorChecker masked sharpen_edge_only grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

sharpen_overall

L3 discrete kind — whole-image sharpening with bite (#110). amount=1.2 (strong).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
sharpen_overall ColorChecker global sharpen_overall grayscale global sharpen_overall ColorChecker masked sharpen_overall grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

vignette_subtle

L3 discrete kind — gentle peripheral darkening (#110). brightness=-0.15.

ColorChecker (global) Grayscale (global)
vignette_subtle ColorChecker global vignette_subtle grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

(near-baseline diff in ColorChecker (global): subtle vignette is small at the modest gallery render size; effect is concentrated at the very corners of the frame)

(near-baseline diff in grayscale (global): subtle vignette is small at the modest gallery render size; effect is concentrated at the very corners of the frame)

vignette_strong

L3 discrete kind — pronounced peripheral darkening (#110). brightness=-0.5.

ColorChecker (global) Grayscale (global)
vignette_strong ColorChecker global vignette_strong grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

exposure

Parameterized exposure compensation (RFC-021). Pass --value V (CLI) or value: V (MCP) in EV stops; range [-3.0, +3.0]. Replaces the v1.5.x discrete expo+0.3 / expo_+0.5 / expo_-0.3 / expo_-0.5 / shadows_global_± entries with a single continuous-magnitude primitive._

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
exposure ColorChecker global exposure grayscale global exposure ColorChecker masked exposure grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (ev): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.00 -0.50 0.00 +0.50 +1.00
exposure ev=-1.00 exposure ev=-0.50 exposure ev=0.00 exposure ev=+0.50 exposure ev=+1.00

transform

Parameterized perspective / transform (#101). Closes the Lightroom Transform panel parity gap via darktable's ashift module. 5 magnitude axes: --param transform_rotation=V (image rotation in degrees), --param transform_lensshift_v=V (vertical perspective / keystone), --param transform_lensshift_h=V (horizontal perspective), --param transform_shear=V, --param transform_aspect=V (post-transform aspect adjust; default 1.0). Axis names use transform prefix. Lens-tuning floats (focal length, crop factor, ortho-correction) and the user-drawn-lines storage are preserved verbatim — those are darktable-GUI-authored when needed._

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
transform ColorChecker global transform grayscale global transform ColorChecker masked transform grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (transform_rotation): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-15.00 -5.00 0.00 +5.00 +15.00
transform transform_rotation=-15.00 transform transform_rotation=-5.00 transform transform_rotation=0.00 transform transform_rotation=+5.00 transform transform_rotation=+15.00

Parameter sweep (transform_lensshift_v): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 -0.20 0.00 +0.20 +0.50
transform transform_lensshift_v=-0.50 transform transform_lensshift_v=-0.20 transform transform_lensshift_v=0.00 transform transform_lensshift_v=+0.20 transform transform_lensshift_v=+0.50

Parameter sweep (transform_lensshift_h): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 -0.20 0.00 +0.20 +0.50
transform transform_lensshift_h=-0.50 transform transform_lensshift_h=-0.20 transform transform_lensshift_h=0.00 transform transform_lensshift_h=+0.20 transform transform_lensshift_h=+0.50

Parameter sweep (transform_shear): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.30 0.00 +0.30
transform transform_shear=-0.30 transform transform_shear=0.00 transform transform_shear=+0.30

Parameter sweep (transform_aspect): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.70 +0.90 +1.00 +1.20 +1.50
transform transform_aspect=+0.70 transform transform_aspect=+0.90 transform transform_aspect=+1.00 transform transform_aspect=+1.20 transform transform_aspect=+1.50

lens_correction

Parameterized lens correction (#95). 10 manual-override magnitude axes via darktable's lens module: --param lens_scale=V (output scaling), --param lens_tca_r=V / lens_tca_b=V (manual TCA shifts; 1.0 = no shift), --param lens_cor_distortion=V / lens_cor_vignette=V / lens_cor_ca_r=V / lens_cor_ca_b=V (per-correction-type strengths for embedded-metadata method), --param lens_v_strength=V / lens_v_radius=V / lens_v_steepness=V (manual vignette correction). NOTE: this entry's photographic effect requires lensfun identifier strings (camera/lens) and shooting metadata (focal/aperture/distance) to be populated. EXIF auto-binding for these is a follow-up; until then, the entry is most useful for overriding strength sliders on a darktable-GUI-authored baseline.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
lens_correction ColorChecker global lens_correction grayscale global lens_correction ColorChecker masked lens_correction grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (lens_scale): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +1.00 +1.50 +2.00
lens_correction lens_scale=0.00 lens_correction lens_scale=+1.00 lens_correction lens_scale=+1.50 lens_correction lens_scale=+2.00

Parameter sweep (lens_tca_r): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.98 +0.99 +1.00 +1.01 +1.02
lens_correction lens_tca_r=+0.98 lens_correction lens_tca_r=+0.99 lens_correction lens_tca_r=+1.00 lens_correction lens_tca_r=+1.01 lens_correction lens_tca_r=+1.02

Parameter sweep (lens_tca_b): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.98 +0.99 +1.00 +1.01 +1.02
lens_correction lens_tca_b=+0.98 lens_correction lens_tca_b=+0.99 lens_correction lens_tca_b=+1.00 lens_correction lens_tca_b=+1.01 lens_correction lens_tca_b=+1.02

Parameter sweep (lens_cor_distortion): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.30 +0.60 +1.00
lens_correction lens_cor_distortion=0.00 lens_correction lens_cor_distortion=+0.30 lens_correction lens_cor_distortion=+0.60 lens_correction lens_cor_distortion=+1.00

Parameter sweep (lens_cor_vignette): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.30 +0.60 +1.00
lens_correction lens_cor_vignette=0.00 lens_correction lens_cor_vignette=+0.30 lens_correction lens_cor_vignette=+0.60 lens_correction lens_cor_vignette=+1.00

Parameter sweep (lens_cor_ca_r): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.00 0.00 +1.00
lens_correction lens_cor_ca_r=-1.00 lens_correction lens_cor_ca_r=0.00 lens_correction lens_cor_ca_r=+1.00

Parameter sweep (lens_cor_ca_b): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.00 0.00 +1.00
lens_correction lens_cor_ca_b=-1.00 lens_correction lens_cor_ca_b=0.00 lens_correction lens_cor_ca_b=+1.00

Parameter sweep (lens_v_strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.50 +1.00
lens_correction lens_v_strength=-0.50 lens_correction lens_v_strength=0.00 lens_correction lens_v_strength=+0.50 lens_correction lens_v_strength=+1.00

Parameter sweep (lens_v_radius): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +2.00
lens_correction lens_v_radius=+0.50 lens_correction lens_v_radius=+1.00 lens_correction lens_v_radius=+2.00

Parameter sweep (lens_v_steepness): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +2.50 +5.00
lens_correction lens_v_steepness=+0.50 lens_correction lens_v_steepness=+1.00 lens_correction lens_v_steepness=+2.50 lens_correction lens_v_steepness=+5.00

denoise

Parameterized denoising via darktable's denoiseprofile module (#96). NLMEANS (non-local-means) mode with 4 magnitude axes: --param denoise_strength=V (primary noise slider; range [0.001, 1000.0]), --param denoise_shadows=V (preserve shadow noise vs detail; range [0.0, 1.8]), --param denoise_radius=V (patch size; range [0.0, 12.0]), --param denoise_scattering=V (search-zone spread; range [0.0, 20.0]). Axis names carry the denoise prefix to disambiguate from same-named axes on other modules (e.g. dehaze.strength). Per-channel noise calibration a[3]/b[3] auto-populated by darktable from camera+ISO database. WAVELETS mode would need an empirically-captured wavelet-curve baseline (tracked under #100 / task C); for now NLMEANS ships clean and lines up with Lightroom's patch-similarity Noise Reduction._

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
denoise ColorChecker global denoise grayscale global denoise ColorChecker masked denoise grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (denoise_strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +2.00 +5.00 +20.00
denoise denoise_strength=+0.50 denoise denoise_strength=+1.00 denoise denoise_strength=+2.00 denoise denoise_strength=+5.00 denoise denoise_strength=+20.00

Parameter sweep (denoise_shadows): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.50 +1.00 +1.40 +1.80
denoise denoise_shadows=0.00 denoise denoise_shadows=+0.50 denoise denoise_shadows=+1.00 denoise denoise_shadows=+1.40 denoise denoise_shadows=+1.80

Parameter sweep (denoise_radius): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +1.00 +3.00 +6.00 +10.00
denoise denoise_radius=0.00 denoise denoise_radius=+1.00 denoise denoise_radius=+3.00 denoise denoise_radius=+6.00 denoise denoise_radius=+10.00

Parameter sweep (denoise_scattering): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +1.00 +5.00 +10.00 +20.00
denoise denoise_scattering=0.00 denoise denoise_scattering=+1.00 denoise denoise_scattering=+5.00 denoise denoise_scattering=+10.00 denoise denoise_scattering=+20.00

filmic

Parameterized filmic v6 tone mapping (#97). Modern darktable tone-mapping; ships parallel to sigmoid (~80% of tone-mapping use cases). 8 magnitude axes: grey_point_source (default 18.45%), black_point_source (default -8.0 EV), white_point_source (default 4.0 EV), output_power (default 4.0 gamma), latitude (default 0.01), contrast (default 1.0), saturation (default 0.0), balance (default 0.0). Curve mode enums (shadows/highlights/preserve_color/version/spline_version) are pinned at darktable defaults; author discrete entries for non-default modes.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
filmic ColorChecker global filmic grayscale global filmic ColorChecker masked filmic grayscale masked

Parameter sweep (grey_point_source): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+10.00 +18.45 +25.00 +35.00
filmic grey_point_source=+10.00 filmic grey_point_source=+18.45 filmic grey_point_source=+25.00 filmic grey_point_source=+35.00

Parameter sweep (black_point_source): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-12.00 -10.00 -8.00 -5.00
filmic black_point_source=-12.00 filmic black_point_source=-10.00 filmic black_point_source=-8.00 filmic black_point_source=-5.00

Parameter sweep (white_point_source): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+2.00 +4.00 +6.00 +8.00
filmic white_point_source=+2.00 filmic white_point_source=+4.00 filmic white_point_source=+6.00 filmic white_point_source=+8.00

Parameter sweep (output_power): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+1.00 +2.00 +4.00 +6.00
filmic output_power=+1.00 filmic output_power=+2.00 filmic output_power=+4.00 filmic output_power=+6.00

Parameter sweep (latitude): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +10.00 +25.00 +50.00
filmic latitude=0.00 filmic latitude=+10.00 filmic latitude=+25.00 filmic latitude=+50.00

Parameter sweep (contrast): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +1.50 +2.00 +2.50
filmic contrast=+0.50 filmic contrast=+1.00 filmic contrast=+1.50 filmic contrast=+2.00 filmic contrast=+2.50

Parameter sweep (saturation): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-50.00 0.00 +25.00 +50.00
filmic saturation=-50.00 filmic saturation=0.00 filmic saturation=+25.00 filmic saturation=+50.00

Parameter sweep (balance): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-25.00 -10.00 0.00 +10.00 +25.00
filmic balance=-25.00 filmic balance=-10.00 filmic balance=0.00 filmic balance=+10.00 filmic balance=+25.00

texture

Parameterized texture (#92 Bucket A.6). Lightroom-style Texture via darktable's diffuse-or-sharpen module. Three axes: --param first=V (finest detail scale, primary Texture axis; range [-1.0, 1.0]), --param second=V (next-up scale; range [-1.0, 1.0]), --param sharpness=V (global sharpening; range [-1.0, 1.0]). Negative values smooth, positive enhance. All default 0.0. Closes the Lightroom Texture parity gap.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
texture ColorChecker global texture grayscale global texture ColorChecker masked texture grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (first): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 -0.20 0.00 +0.30 +0.70
texture first=-0.50 texture first=-0.20 texture first=0.00 texture first=+0.30 texture first=+0.70

Parameter sweep (second): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.30 0.00 +0.30 +0.60 +1.00
texture second=-0.30 texture second=0.00 texture second=+0.30 texture second=+0.60 texture second=+1.00

Parameter sweep (sharpness): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
texture sharpness=-0.50 texture sharpness=0.00 texture sharpness=+0.30 texture sharpness=+0.60 texture sharpness=+1.00

hsl_saturation

Parameterized HSL Saturation row (RFC-023). Lightroom HSL Color Mixer Saturation parity via darktable's colorequal module. 8 per-color axes (sat_red, sat_orange, sat_yellow, sat_green, sat_cyan, sat_blue, sat_lavender, sat_magenta); each range [-1.0, 1.0]; default 0.0. Negative desaturates that color zone (e.g. sat_orange=-0.3 → mute skin tones); positive boosts. Compose with hsl_hue and hsl_luminance for the full HSL Color Mixer.

🚫 Visual-proof rendering skipped. This entry's photographic effect requires real-raw input — its underlying darktable module produces degenerate output on the synthetic ColorChecker / grayscale fixtures (verified experimentally by varying the module's global tuning; chart pipeline doesn't recover). The byte-level apply path is verified by the 5-layer test coverage (per ADR-080). Visual proof on real raws is a v1.9.0+ work item — see _SKIP_VISUAL_PROOF_ENTRIES in the gallery script for the list and reasoning. To enable real-raw rendering, drop a fixture file at the path defined by REAL_RAW_FIXTURE (see tests/fixtures/raws/README.md).

hsl_hue

Parameterized HSL Hue row (RFC-023). Lightroom HSL Color Mixer Hue parity via colorequal. 8 per-color hue-shift axes (hue_red, hue_orange, hue_yellow, hue_green, hue_cyan, hue_blue, hue_lavender, hue_magenta); each range [-180.0, 180.0] degrees; default 0.0. Shifts that color zone toward an adjacent hue (e.g. hue_green=15.0 → foliage warmer toward yellow).

🚫 Visual-proof rendering skipped. This entry's photographic effect requires real-raw input — its underlying darktable module produces degenerate output on the synthetic ColorChecker / grayscale fixtures (verified experimentally by varying the module's global tuning; chart pipeline doesn't recover). The byte-level apply path is verified by the 5-layer test coverage (per ADR-080). Visual proof on real raws is a v1.9.0+ work item — see _SKIP_VISUAL_PROOF_ENTRIES in the gallery script for the list and reasoning. To enable real-raw rendering, drop a fixture file at the path defined by REAL_RAW_FIXTURE (see tests/fixtures/raws/README.md).

hsl_luminance

Parameterized HSL Luminance row (RFC-023). Lightroom HSL Color Mixer Luminance parity via colorequal. 8 per-color brightness axes (bright_red, bright_orange, bright_yellow, bright_green, bright_cyan, bright_blue, bright_lavender, bright_magenta); each range [-1.0, 1.0]; default 0.0. Negative darkens that color zone (e.g. bright_blue=-0.3 → deeper sky); positive lightens.

🚫 Visual-proof rendering skipped. This entry's photographic effect requires real-raw input — its underlying darktable module produces degenerate output on the synthetic ColorChecker / grayscale fixtures (verified experimentally by varying the module's global tuning; chart pipeline doesn't recover). The byte-level apply path is verified by the 5-layer test coverage (per ADR-080). Visual proof on real raws is a v1.9.0+ work item — see _SKIP_VISUAL_PROOF_ENTRIES in the gallery script for the list and reasoning. To enable real-raw rendering, drop a fixture file at the path defined by REAL_RAW_FIXTURE (see tests/fixtures/raws/README.md).

dehaze

Parameterized dehaze (#90 Bucket A.2). Lightroom-style Dehaze via darktable's hazeremoval module. Two axes: --param strength=V (range [-1.0, 1.0]; positive removes haze, negative adds atmospheric fog) and --param distance=V (range [0.0, 1.0]; depth-falloff). Closes the Lightroom Dehaze parity gap.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
dehaze ColorChecker global dehaze grayscale global dehaze ColorChecker masked dehaze grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.40 0.00 +0.20 +0.60 +1.00
dehaze strength=-0.40 dehaze strength=0.00 dehaze strength=+0.20 dehaze strength=+0.60 dehaze strength=+1.00

Parameter sweep (distance): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.20 +0.50 +0.80 +1.00
dehaze distance=0.00 dehaze distance=+0.20 dehaze distance=+0.50 dehaze distance=+0.80 dehaze distance=+1.00

wb_kelvin_delta

WB Kelvin / tint UX wrapper (#102). Same temperature module as the temperature entry, but exposes photographic units instead of raw RGB coefficients. 2 axes: --param kelvin_delta=V (range [-3000, 3000]; positive = warmer) and --param tint_delta=V (range [-200, 200]; positive = magenta-shifted). Linear approximation: red_coeff = 1 + kelvin_delta * 0.0001, blue_coeff inverse, green_coeff = 1 + tint_delta * 0.0001. Daily-use accurate; not chromatic-adaptation-perfect. The temperature entry is preserved for users who want raw coefficient control. Note: kelvin_delta affects bytes 0 (red) AND 8 (blue); the manifest's field offset 0 is the primary-effect documentation; the decoder applies the inverse to blue automatically.

ColorChecker (global) Grayscale (global)
wb_kelvin_delta ColorChecker global wb_kelvin_delta grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

Parameter sweep (kelvin_delta): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-3000.00 -1500.00 0.00 +1500.00 +3000.00
wb_kelvin_delta kelvin_delta=-3000.00 wb_kelvin_delta kelvin_delta=-1500.00 wb_kelvin_delta kelvin_delta=0.00 wb_kelvin_delta kelvin_delta=+1500.00 wb_kelvin_delta kelvin_delta=+3000.00

Parameter sweep (tint_delta): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-200.00 -100.00 0.00 +100.00 +200.00
wb_kelvin_delta tint_delta=-200.00 wb_kelvin_delta tint_delta=-100.00 wb_kelvin_delta tint_delta=0.00 wb_kelvin_delta tint_delta=+100.00 wb_kelvin_delta tint_delta=+200.00

temperature

Parameterized white balance (RFC-021; first multi-parameter ship). Three axes: --param red_coeff=V (warmer image: red↑), --param green_coeff=V (Lightroom Tint axis: green↑ → magenta-shifted, green↓ → green-shifted), --param blue_coeff=V (cooler image: blue↑). Range [0.5, 4.0] each; all default 1.0 (no shift). Replaces the v1.5.x discrete wb_cool_subtle entry. green_coeff added in #90 Bucket A.3 to close the Lightroom Tint parity gap. Starter's wb_warm_subtle remains as a discrete teaching artifact; production use of WB shifts should prefer this parameterized entry.

ColorChecker (global) Grayscale (global)
temperature ColorChecker global temperature grayscale global

🚫 Masked variant suppressed: see mask-applicable-controls for why drawn-mask binding doesn't render usefully for this module.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

Parameter sweep (red_coeff): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +1.50 +2.15
temperature red_coeff=+0.50 temperature red_coeff=+1.00 temperature red_coeff=+1.50 temperature red_coeff=+2.15

Parameter sweep (green_coeff): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.85 +0.95 +1.00 +1.15 +1.30
temperature green_coeff=+0.85 temperature green_coeff=+0.95 temperature green_coeff=+1.00 temperature green_coeff=+1.15 temperature green_coeff=+1.30

Parameter sweep (blue_coeff): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

+0.50 +1.00 +1.50 +2.14
temperature blue_coeff=+0.50 temperature blue_coeff=+1.00 temperature blue_coeff=+1.50 temperature blue_coeff=+2.14

saturation_global

Parameterized global saturation in colorbalancergb (RFC-021). Pass --value V (CLI) or value: V (MCP); range [-1.0, +1.0] (-1.0 = fully desaturated / monochrome; +0.5 = strong boost). Replaces the v1.5.x discrete sat_kill / sat_boost_moderate / sat_boost_strong entries with a single continuous-magnitude primitive.

ColorChecker (global) ColorChecker (centered ellipse mask)
saturation_global ColorChecker global saturation_global ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (saturation_global): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.00 -0.50 0.00 +0.25 +0.50
saturation_global saturation_global=-1.00 saturation_global saturation_global=-0.50 saturation_global saturation_global=0.00 saturation_global saturation_global=+0.25 saturation_global saturation_global=+0.50

vibrance

Parameterized vibrance on colorbalancergb (RFC-022 Tier 2). Pass --value V; range [-1.0, +1.0]. 0.3 = vibrance+0.3-equivalent. Vibrance protects already-saturated pixels — gentler chroma push than saturation_global. Replaces v1.5.x vibrance_+0.3._

ColorChecker (global) ColorChecker (centered ellipse mask)
vibrance ColorChecker global vibrance ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (vibrance): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
vibrance vibrance=-0.50 vibrance vibrance=0.00 vibrance vibrance=+0.30 vibrance vibrance=+0.60 vibrance vibrance=+1.00

chroma_global

Parameterized global chroma on colorbalancergb (RFC-022 Tier 2). Pass --value V; range [-1.0, +1.0]. Less saturated-pixel protection than vibrance, more aggressive than saturation_global at equal magnitudes.

ColorChecker (global) ColorChecker (centered ellipse mask)
chroma_global ColorChecker global chroma_global ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (chroma_global): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
chroma_global chroma_global=-0.50 chroma_global chroma_global=0.00 chroma_global chroma_global=+0.30 chroma_global chroma_global=+0.60 chroma_global chroma_global=+1.00

hue_angle

Parameterized global hue rotation on colorbalancergb (RFC-022 Tier 2). Pass --value V in degrees; range [-180.0, +180.0]. Rotates every pixel's hue around the color wheel without changing saturation or luminance.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
hue_angle ColorChecker global hue_angle grayscale global hue_angle ColorChecker masked hue_angle grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (hue_angle): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-90.00 -30.00 0.00 +30.00 +90.00
hue_angle hue_angle=-90.00 hue_angle hue_angle=-30.00 hue_angle hue_angle=0.00 hue_angle hue_angle=+30.00 hue_angle hue_angle=+90.00

brilliance_global

Parameterized global brilliance on colorbalancergb (RFC-022 Tier 2 / #86). Pass --value V; range [-1.0, +1.0]. Brilliance shapes per-zone luminance — the global axis moves all zones together. Per-zone variants (highlights/midtones/shadows) target specific tonal ranges.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
brilliance_global ColorChecker global brilliance_global grayscale global brilliance_global ColorChecker masked brilliance_global grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (brilliance_global): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
brilliance_global brilliance_global=-0.50 brilliance_global brilliance_global=0.00 brilliance_global brilliance_global=+0.30 brilliance_global brilliance_global=+0.60 brilliance_global brilliance_global=+1.00

brilliance_highlights

Parameterized highlight-zone brilliance on colorbalancergb (RFC-022 Tier 2 / #86). Pass --value V; range [-1.0, +1.0]. Targets only the highlight tonal zone — useful for selectively brightening or compressing high-key areas without affecting shadows / midtones.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
brilliance_highlights ColorChecker global brilliance_highlights grayscale global brilliance_highlights ColorChecker masked brilliance_highlights grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (brilliance_highlights): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
brilliance_highlights brilliance_highlights=-0.50 brilliance_highlights brilliance_highlights=0.00 brilliance_highlights brilliance_highlights=+0.30 brilliance_highlights brilliance_highlights=+0.60 brilliance_highlights brilliance_highlights=+1.00

brilliance_midtones

Parameterized midtone-zone brilliance on colorbalancergb (RFC-022 Tier 2 / #86). Pass --value V; range [-1.0, +1.0]. Targets only the midtone tonal zone — selectively shapes the body of the tonal distribution.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
brilliance_midtones ColorChecker global brilliance_midtones grayscale global brilliance_midtones ColorChecker masked brilliance_midtones grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (brilliance_midtones): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
brilliance_midtones brilliance_midtones=-0.50 brilliance_midtones brilliance_midtones=0.00 brilliance_midtones brilliance_midtones=+0.30 brilliance_midtones brilliance_midtones=+0.60 brilliance_midtones brilliance_midtones=+1.00

brilliance_shadows

Parameterized shadow-zone brilliance on colorbalancergb (RFC-022 Tier 2 / #86). Pass --value V; range [-1.0, +1.0]. Targets only the shadow tonal zone — selectively lifts or deepens dark areas without affecting highlights / midtones.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
brilliance_shadows ColorChecker global brilliance_shadows grayscale global brilliance_shadows ColorChecker masked brilliance_shadows grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (brilliance_shadows): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.60 +1.00
brilliance_shadows brilliance_shadows=-0.50 brilliance_shadows brilliance_shadows=0.00 brilliance_shadows brilliance_shadows=+0.30 brilliance_shadows brilliance_shadows=+0.60 brilliance_shadows brilliance_shadows=+1.00

hue_shadows

Parameterized per-zone hue rotation for shadows (#91 Bucket A.5; Lightroom Color Grading shadows wheel). Pass --value V; range [0.0, 360.0] degrees. Default 0.0.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
hue_shadows ColorChecker global hue_shadows grayscale global hue_shadows ColorChecker masked hue_shadows grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (hue_shadows): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +90.00 +180.00 +270.00 +350.00
hue_shadows hue_shadows=0.00 hue_shadows hue_shadows=+90.00 hue_shadows hue_shadows=+180.00 hue_shadows hue_shadows=+270.00 hue_shadows hue_shadows=+350.00

hue_midtones

Parameterized per-zone hue rotation for midtones (#91 Bucket A.5; Lightroom Color Grading midtones wheel). Pass --value V; range [0.0, 360.0] degrees. Default 0.0.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
hue_midtones ColorChecker global hue_midtones grayscale global hue_midtones ColorChecker masked hue_midtones grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (hue_midtones): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +90.00 +180.00 +270.00 +350.00
hue_midtones hue_midtones=0.00 hue_midtones hue_midtones=+90.00 hue_midtones hue_midtones=+180.00 hue_midtones hue_midtones=+270.00 hue_midtones hue_midtones=+350.00

hue_highlights

Parameterized per-zone hue rotation for highlights (#91 Bucket A.5; Lightroom Color Grading highlights wheel). Pass --value V; range [0.0, 360.0] degrees. Default 0.0.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
hue_highlights ColorChecker global hue_highlights grayscale global hue_highlights ColorChecker masked hue_highlights grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (hue_highlights): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +90.00 +180.00 +270.00 +350.00
hue_highlights hue_highlights=0.00 hue_highlights hue_highlights=+90.00 hue_highlights hue_highlights=+180.00 hue_highlights hue_highlights=+270.00 hue_highlights hue_highlights=+350.00

saturation_shadows

Parameterized per-zone saturation for shadows (#91 Bucket A.5; pairs with hue_shadows for full Lightroom shadow-zone color-grading control). Pass --value V; range [-1.0, +1.0].

ColorChecker (global) ColorChecker (centered ellipse mask)
saturation_shadows ColorChecker global saturation_shadows ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

Parameter sweep (saturation_shadows): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.50 +1.00
saturation_shadows saturation_shadows=-0.50 saturation_shadows saturation_shadows=0.00 saturation_shadows saturation_shadows=+0.30 saturation_shadows saturation_shadows=+0.50 saturation_shadows saturation_shadows=+1.00

saturation_midtones

Parameterized per-zone saturation for midtones (#91 Bucket A.5). Pass --value V; range [-1.0, +1.0].

ColorChecker (global) ColorChecker (centered ellipse mask)
saturation_midtones ColorChecker global saturation_midtones ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (saturation_midtones): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.50 +1.00
saturation_midtones saturation_midtones=-0.50 saturation_midtones saturation_midtones=0.00 saturation_midtones saturation_midtones=+0.30 saturation_midtones saturation_midtones=+0.50 saturation_midtones saturation_midtones=+1.00

saturation_highlights

Parameterized per-zone saturation for highlights (#91 Bucket A.5). Pass --value V; range [-1.0, +1.0].

ColorChecker (global) ColorChecker (centered ellipse mask)
saturation_highlights ColorChecker global saturation_highlights ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in ColorChecker (masked): below visible threshold on this chart input)

Parameter sweep (saturation_highlights): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.30 +0.50 +1.00
saturation_highlights saturation_highlights=-0.50 saturation_highlights saturation_highlights=0.00 saturation_highlights saturation_highlights=+0.30 saturation_highlights saturation_highlights=+0.50 saturation_highlights saturation_highlights=+1.00

shadows_weight

Parameterized shadow-zone falloff weight (#91 Bucket A.5; Lightroom Color Grading 'Blending' bottom). Pass --value V; range [0.0, 4.0]; default 1.0. Higher = more aggressive zone overlap.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
shadows_weight ColorChecker global shadows_weight grayscale global shadows_weight ColorChecker masked shadows_weight grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

Parameter sweep (shadows_weight): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.50 +1.00 +2.00 +4.00
shadows_weight shadows_weight=0.00 shadows_weight shadows_weight=+0.50 shadows_weight shadows_weight=+1.00 shadows_weight shadows_weight=+2.00 shadows_weight shadows_weight=+4.00

highlights_weight

Parameterized highlights-zone falloff weight (#91 Bucket A.5; Lightroom Color Grading 'Blending' top). Pass --value V; range [0.0, 4.0]; default 1.0.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
highlights_weight ColorChecker global highlights_weight grayscale global highlights_weight ColorChecker masked highlights_weight grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (highlights_weight): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

0.00 +0.50 +1.00 +2.00 +4.00
highlights_weight highlights_weight=0.00 highlights_weight highlights_weight=+0.50 highlights_weight highlights_weight=+1.00 highlights_weight highlights_weight=+2.00 highlights_weight highlights_weight=+4.00

white_fulcrum

Parameterized shadow/highlight balance point (#91 Bucket A.5; Lightroom Color Grading 'Balance' slider). Pass --value V; range [-2.0, 2.0]; default 0.0 (neutral midpoint). Negative shifts the split toward shadows; positive toward highlights.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
white_fulcrum ColorChecker global white_fulcrum grayscale global white_fulcrum ColorChecker masked white_fulcrum grayscale masked

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (white_fulcrum): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-1.00 -0.50 0.00 +0.50 +1.00
white_fulcrum white_fulcrum=-1.00 white_fulcrum white_fulcrum=-0.50 white_fulcrum white_fulcrum=0.00 white_fulcrum white_fulcrum=+0.50 white_fulcrum white_fulcrum=+1.00

grade_shadows_warm

Warm shadows (orange tint, hue 30 deg, chroma 0.3).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_shadows_warm ColorChecker global grade_shadows_warm grayscale global grade_shadows_warm ColorChecker masked grade_shadows_warm grayscale masked

grade_shadows_cool

Cool shadows (blue tint, hue 210 deg, chroma 0.3).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_shadows_cool ColorChecker global grade_shadows_cool grayscale global grade_shadows_cool ColorChecker masked grade_shadows_cool grayscale masked

grade_highlights_warm

Warm highlights (orange tint, hue 45 deg, chroma 0.2).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_highlights_warm ColorChecker global grade_highlights_warm grayscale global grade_highlights_warm ColorChecker masked grade_highlights_warm grayscale masked

grade_highlights_cool

Cool highlights (blue tint, hue 200 deg, chroma 0.2).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_highlights_cool ColorChecker global grade_highlights_cool grayscale global grade_highlights_cool ColorChecker masked grade_highlights_cool grayscale masked

grade_midtones_warm

Warm midtones (orange tint, hue 35 deg, chroma 0.25).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_midtones_warm ColorChecker global grade_midtones_warm grayscale global grade_midtones_warm ColorChecker masked grade_midtones_warm grayscale masked

grade_midtones_cool

Cool midtones (blue tint, hue 215 deg, chroma 0.25).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_midtones_cool ColorChecker global grade_midtones_cool grayscale global grade_midtones_cool ColorChecker masked grade_midtones_cool grayscale masked

grade_split_warm_cool

L3 discrete kind — classic split-toning composite (#110). Combines grade_shadows_cool (blue tint, hue 210 deg / chroma 0.3) with grade_highlights_warm (orange tint, hue 45 deg / chroma 0.2) in one entry. The signature 'cinematic' split-tone in a single primitive.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
grade_split_warm_cool ColorChecker global grade_split_warm_cool grayscale global grade_split_warm_cool ColorChecker masked grade_split_warm_cool grayscale masked

chroma_boost_shadows

Boost shadow chroma +0.3.

ColorChecker (global) ColorChecker (centered ellipse mask)
chroma_boost_shadows ColorChecker global chroma_boost_shadows ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

chroma_boost_midtones

Boost mid-tone chroma +0.3.

ColorChecker (global) ColorChecker (centered ellipse mask)
chroma_boost_midtones ColorChecker global chroma_boost_midtones ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

chroma_boost_highlights

Boost highlight chroma +0.3.

ColorChecker (global) ColorChecker (centered ellipse mask)
chroma_boost_highlights ColorChecker global chroma_boost_highlights ColorChecker masked

Grayscale column omitted: this primitive moves chroma only; gray patches have no chroma to affect.

gradient_top_dampen_highlights 🟦 mask-bound

Dampen top-half highlights via -0.5 EV through a top-bright gradient.

ColorChecker Grayscale ramp
gradient_top_dampen_highlights ColorChecker gradient_top_dampen_highlights grayscale

gradient_bottom_lift_shadows 🟦 mask-bound

Lift bottom-half shadows via +0.4 EV through a bottom-bright gradient.

ColorChecker Grayscale ramp
gradient_bottom_lift_shadows ColorChecker gradient_bottom_lift_shadows grayscale

radial_subject_lift 🟦 mask-bound

Lift +0.6 EV in a centered radial mask region (subject emphasis).

ColorChecker Grayscale ramp
radial_subject_lift ColorChecker radial_subject_lift grayscale

rectangle_subject_band_dim 🟦 mask-bound

Dim -0.3 EV in a horizontal mid-band rectangle (de-emphasize a horizon line).

ColorChecker Grayscale ramp
rectangle_subject_band_dim ColorChecker rectangle_subject_band_dim grayscale

look_portrait

L2 look — gentle skin-protective composition. exposure +0.2 EV, sigmoid_contrast 1.2 (soft s-curve), colorbalancergb saturation_global=-0.1 + vibrance=+0.2 (mild chroma push that protects saturated pixels). Targets portraiture; avoid stacking with aggressive contrast or clarity.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_portrait ColorChecker global look_portrait grayscale global look_portrait ColorChecker masked look_portrait grayscale masked

look_landscape

L2 look — vibrant dramatic landscape composition. sigmoid_contrast 2.0 (strong s-curve), colorbalancergb saturation_global=+0.3 + vibrance=+0.2, bilat_clarity_strength 1.0 (definite local-contrast pop). Aggressive — pull back via sigmoid to ~1.5 if it feels harsh.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape ColorChecker global look_landscape grayscale global look_landscape ColorChecker masked look_landscape grayscale masked

look_vintage_film

L2 look — nostalgia / faded film aesthetic. sigmoid_contrast 1.2 (gentle s-curve), colorbalancergb saturation_global=-0.2 (slight desaturation), grain_strength 25 (medium film grain), temperature warm shift (red 2.148 / blue 1.209). Pairs well with grade_shadows_warm.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_vintage_film ColorChecker global look_vintage_film grayscale global look_vintage_film ColorChecker masked look_vintage_film grayscale masked

look_cinematic_teal_orange

L2 look — Hollywood blockbuster teal-and-orange grade (#104). sigmoid_contrast 1.4 + colorbalancergb hue_shadows=210 deg / saturation_shadows=+0.3 (teal) + hue_highlights=30 deg / saturation_highlights=+0.2 (orange) + saturation_global=+0.1.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_cinematic_teal_orange ColorChecker global look_cinematic_teal_orange grayscale global look_cinematic_teal_orange ColorChecker masked look_cinematic_teal_orange grayscale masked

look_film_kodachrome

L2 look — Kodachrome film simulation (#104). sigmoid_contrast 1.4 + temperature warm (red 2.148 / blue 1.209 = wb_warm_subtle) + saturation_global=+0.2 + grain_strength=8.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_film_kodachrome ColorChecker global look_film_kodachrome grayscale global look_film_kodachrome ColorChecker masked look_film_kodachrome grayscale masked

look_film_portra

L2 look — Kodak Portra 400 portrait film (#104). sigmoid_contrast 0.9 (soft s-curve) + temperature subtle warm (red 1.5 / blue 1.3) + saturation_global=-0.1 + grain_strength=15. Compose with hsl_saturation --param sat_orange=+0.05 if you want the canonical Portra skin-warmth boost on real raws.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_film_portra ColorChecker global look_film_portra grayscale global look_film_portra ColorChecker masked look_film_portra grayscale masked

look_high_key_portrait

L2 look — high-key portrait (Adler-style fashion / commercial). exposure +0.3 EV + sigmoid_contrast 0.8 (soft s-curve) + colorbalancergb brilliance_highlights=+0.2 + saturation_global=-0.05 (retains skin saturation while reducing global). For magazine / beauty work where bright skin tones drive the look. Compose with skin_uniformity for a complete editorial pass.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_high_key_portrait ColorChecker global look_high_key_portrait grayscale global look_high_key_portrait ColorChecker masked look_high_key_portrait grayscale masked

look_low_key_portrait

L2 look — low-key portrait (Tucker / chiaroscuro voice). exposure -0.2 EV + sigmoid_contrast 1.8 (strong s-curve) + colorbalancergb brilliance_shadows=-0.3 + saturation_global=-0.10. For dramatic editorial / character portraits where deep shadows carry the mood. Compose with look_portrait_split_tone_moody for a more cinematic grade.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_low_key_portrait ColorChecker global look_low_key_portrait grayscale global look_low_key_portrait ColorChecker masked look_low_key_portrait grayscale masked

look_moody_dramatic

L2 look — moody / dramatic editorial (#104). sigmoid_contrast 2.0 (strong s-curve) + colorbalancergb saturation_global=-0.3 + vibrance=+0.1 + grain_strength=25.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_moody_dramatic ColorChecker global look_moody_dramatic grayscale global look_moody_dramatic ColorChecker masked look_moody_dramatic grayscale masked

look_70s_film

L2 look — 1970s film aesthetic (#104). temperature warm (red 2.0 / blue 1.4) + sigmoid_contrast 1.1 (gentle s-curve) + saturation_global=-0.1 + grain_strength=35 (medium grain).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_70s_film ColorChecker global look_70s_film grayscale global look_70s_film ColorChecker masked look_70s_film grayscale masked

look_90s_grain

L2 look — 1990s film aesthetic (#104). sigmoid_contrast 1.6 + temperature subtle cool (red 1.2 / blue 2.0) + grain_strength=50 (heavy grain).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_90s_grain ColorChecker global look_90s_grain grayscale global look_90s_grain ColorChecker masked look_90s_grain grayscale masked

look_2000s_digital

L2 look — early-2000s digital camera aesthetic (#104). sigmoid_contrast 1.3 + temperature subtle cool (red 1.1 / blue 1.6) + saturation_global=+0.4 (oversaturated digital signature).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_2000s_digital ColorChecker global look_2000s_digital grayscale global look_2000s_digital ColorChecker masked look_2000s_digital grayscale masked

look_subject_lift_dark_only 🟦 mask-bound

L2 look — lift only the dark pixels in a centered subject region. Drawn ellipse around the subject + luminance shadows filter. Composes RFC-029 drawn mask + RFC-024 range_filter. The user's mental model: 'in this drawn mask, only affect the dark pixels.'

ColorChecker Grayscale ramp
look_subject_lift_dark_only ColorChecker look_subject_lift_dark_only grayscale

look_sky_blue_deepen 🟦 mask-bound

L2 look — deepen sky blues in the upper half. Drawn gradient (top half) + color_h filter on cyan-blue range. Composes RFC-029 + RFC-024. Real-world workflow: dramatic sky without affecting foreground or non-blue elements above the horizon.

ColorChecker Grayscale ramp
look_sky_blue_deepen ColorChecker look_sky_blue_deepen grayscale

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_horizon_warm_glow 🟦 mask-bound

L2 look — lift warm tones near the horizon. Horizontal gradient anchored at midline + color_h filter on warm tones (orange/red). Sunset / golden-hour enhancement without affecting cool tones.

ColorChecker Grayscale ramp
look_horizon_warm_glow ColorChecker look_horizon_warm_glow grayscale

look_subject_brighten_highlights 🟦 mask-bound

L2 look — brighten only the bright pixels in the subject region. Drawn ellipse + luminance highlights filter. Catchlights, skin highlights, sparkle without blowing out midtones.

ColorChecker Grayscale ramp
look_subject_brighten_highlights ColorChecker look_subject_brighten_highlights grayscale

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_dark_pixels_global_lift 🟦 mask-bound

L2 look — lift dark pixels globally (no spatial mask). Pure parametric range_filter — luminance shadows. Useful when the intent is purely tonal: 'open up all the dark areas in the image, regardless of where they are.' Demonstrates the parametric-only path of RFC-024 / ADR-085.

ColorChecker Grayscale ramp
look_dark_pixels_global_lift ColorChecker look_dark_pixels_global_lift grayscale

skin_smooth_painterly 🟦 mask-bound

Approximate frequency separation for skin smoothing (Portrait Gap #4, cheap variant). Reduces local contrast (texture-band frequency) within the skin region — the color band stays untouched. Pass --value V or --param clarity_strength=V; range [-1.0, 4.0], typical -0.3 to -0.7 for natural smoothing. -0.5 default. Pre-baked with mask_skin_region. Not Photoshop's true frequency separation (band decomposition); approximation via bilat softening on a hue-masked region. Compose orthogonally with skin_uniformity (color-band uniformity) for the full skin-uniformity-plus-smoothing move. For sharper precision, override mask_spec via render_preview + LLM-vision (see docs/guides/llm-vision-for-masks.md Pattern 7).

ColorChecker Grayscale ramp
skin_smooth_painterly ColorChecker skin_smooth_painterly grayscale

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

Parameter sweep (clarity_strength): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.50 0.00 +0.50 +1.50 +2.50
skin_smooth_painterly clarity_strength=-0.50 skin_smooth_painterly clarity_strength=0.00 skin_smooth_painterly clarity_strength=+0.50 skin_smooth_painterly clarity_strength=+1.50 skin_smooth_painterly clarity_strength=+2.50

skin_uniformity 🟦 mask-bound

Skin-tone uniformity (RFC-033). Compresses skin-band saturation variance toward uniform appearance — Capture One's Skin Tone Uniformity equivalent for chemigram. Pre-baked with mask_skin_region so the move is scoped automatically. Pass --value V or --param sat_orange=V; range [-1.0, 0.0]. -0.3 is moderate uniformity; -0.6 is strong (typical Woloszynowicz/Adler/Nordqvist range); -1.0 fully desaturates the skin band; 0.0 is no-op. Override mask_spec for per-image manual mask if mask_skin_region's hue-range fallback leaks (Phase-1 LLM-vision fallback per RFC-032). Frequency-separation texture work composes orthogonally; this primitive is color-band uniformity only.

ColorChecker Grayscale ramp
skin_uniformity ColorChecker skin_uniformity grayscale

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_portrait_natural_skin

Restraint-first portrait foundation — Tucker/Marino-aligned. Slight warm temperature (+0.03 red), exposure +0.1 EV, sigmoid contrast 1.2 (gentle s-curve), saturation_global -0.05 + vibrance +0.1 (mild chroma shaping that protects skin tones). The starting point for portrait work that doesn't push contrast or saturation as a stylistic choice.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_portrait_natural_skin ColorChecker global look_portrait_natural_skin grayscale global look_portrait_natural_skin ColorChecker masked look_portrait_natural_skin grayscale masked

look_portrait_editorial

Magazine / fashion editorial grade. Punchier sigmoid contrast (1.6), global saturation pull-back (-0.10) — counterintuitive but the move Adler/Woloszynowicz reach for; reduced overall sat lets the split-tone read. Cool-shadows + warm-highlights split (hue_shadows=210, hue_highlights=45). Compose with skin_uniformity if skin patches fight the grade.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_portrait_editorial ColorChecker global look_portrait_editorial grayscale global look_portrait_editorial ColorChecker masked look_portrait_editorial grayscale masked

look_portrait_skin_warm_lift 🟦 mask-bound

Subject-region warm + brighten. Slight warm temperature (+0.04 red) + exposure +0.2 EV. Pre-baked with mask_skin_region so the lift scopes to skin without affecting clothing or background. Pairs with skin_uniformity for a complete portrait skin pass.

ColorChecker Grayscale ramp
look_portrait_skin_warm_lift ColorChecker look_portrait_skin_warm_lift grayscale

look_portrait_background_dim 🟦 mask-bound

Dim and de-saturate the background to push the subject forward. Exposure -0.4 EV + saturation_global -0.15. Pre-baked with mask_subject + invert: true (RFC-034) — the photographer doesn't have to construct an inverse-subject mask manually. The parametric fallback for mask_subject is coarse (midtone luminance + center-bias); for clean subject vs. background separation override the mask_spec at apply time with a manually-drawn inverted ellipse, or escalate via render_preview + LLM-vision construction (llm-vision-for-masks.md Pattern 7) for a path-form subject mask.

ColorChecker Grayscale ramp
look_portrait_background_dim ColorChecker look_portrait_background_dim grayscale

look_portrait_split_tone_moody

Cinematic split-tone portrait — cool blue shadows (hue 210, sat 0.30) + warm orange highlights (hue 45, sat 0.20), sigmoid contrast 1.4. Stronger split than look_portrait_editorial; some photographers (Adler) consider this 'fashion-only' rather than a general portrait move. Borderline survey candidate — ships, but exercise judgment.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_portrait_split_tone_moody ColorChecker global look_portrait_split_tone_moody grayscale global look_portrait_split_tone_moody ColorChecker masked look_portrait_split_tone_moody grayscale masked

look_landscape_grand_vista

Heaton/PureRAW-style grand vista. Sigmoid contrast 1.4, mildly warm shadows (hue 30, sat 0.10), vibrance +0.10, bilat clarity_strength 0.5. The chemigram shape of LR's adaptive sky + foreground lift workflow rendered globally; for sky-specific work compose with look_landscape_sky_enhance instead.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_grand_vista ColorChecker global look_landscape_grand_vista grayscale global look_landscape_grand_vista ColorChecker masked look_landscape_grand_vista grayscale masked

look_landscape_intimate_quiet

Marino-style intimate / small-scene restraint. Very gentle sigmoid contrast (1.05), saturation pulled back (-0.10), bilat softened (clarity_strength -0.3 — opposite of clarity boost). The defining stylistic choice for forest interiors, abstract details, and any scene where drama would betray the subject. Applies LESS than the baseline does, deliberately.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_intimate_quiet ColorChecker global look_landscape_intimate_quiet grayscale global look_landscape_intimate_quiet ColorChecker masked look_landscape_intimate_quiet grayscale masked

look_landscape_golden_hour

Sunset / sunrise mood. Warm temperature shift (+0.07 red), sigmoid contrast 1.3, warm shadows (hue 30, sat 0.20) + amber highlights (hue 50, sat 0.15), vibrance +0.10. Pushes the warmth that golden-hour light almost has and amplifies it without breaking color credibility. For scenes already on the warm side, apply at lower strength via opacity — not authored as parametric (look-not-primitive).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_golden_hour ColorChecker global look_landscape_golden_hour grayscale global look_landscape_golden_hour ColorChecker masked look_landscape_golden_hour grayscale masked

look_landscape_blue_hour_cool

Twilight / pre-dawn / blue-hour mood. Cool temperature shift (+0.07 blue), sigmoid contrast 1.3, cool shadows (hue 210, sat 0.20) + neutral-cool highlights (hue 200, sat 0.10), saturation_global -0.05. Opposite mood from golden_hour; equally valid genre signature. Composes with sigmoid_contrast for stronger drama if needed.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_blue_hour_cool ColorChecker global look_landscape_blue_hour_cool grayscale global look_landscape_blue_hour_cool ColorChecker masked look_landscape_blue_hour_cool grayscale masked

look_landscape_atmospheric_haze

Misty / hazy / fog-as-subject mood. Hazeremoval strength 0.5 (lift visibility while preserving the moody atmosphere), bilat clarity 0.3, warm shadows (hue 30, sat 0.10) + vibrance +0.05. The trick: lift JUST enough to read details, not enough to flatten the atmosphere. Strong hazeremoval values (>1.0) produce 'no atmosphere' results that defeat the intent — keep restrained.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_atmospheric_haze ColorChecker global look_landscape_atmospheric_haze grayscale global look_landscape_atmospheric_haze ColorChecker masked look_landscape_atmospheric_haze grayscale masked

look_landscape_dramatic_moody

Page/Adamus-style dramatic atmospheric. Sigmoid contrast 1.7 (strong), cool shadows (hue 210, sat 0.20) + warm highlights (hue 30, sat 0.15), bilat clarity_strength 0.6. The dramatic counterpart to intimate_quiet — for stormy skies, rugged terrain, and weather drama. Pair with mask_luminosity_brightest_quartile darkening for stormy-cloud emphasis.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_dramatic_moody ColorChecker global look_landscape_dramatic_moody grayscale global look_landscape_dramatic_moody ColorChecker masked look_landscape_dramatic_moody grayscale masked

look_landscape_autumn_pop

Autumn foliage / fall color. Slight warm temperature (+0.04 red), colorequal sat_orange +0.30 + sat_red +0.20 (lift autumn colors) + sat_blue -0.10 (compensating to keep skies natural — without this, skies turn cartoonish). Bilat clarity_strength 0.4 for foliage definition. A targeted seasonal grade; not for non-foliage scenes.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_landscape_autumn_pop ColorChecker global look_landscape_autumn_pop grayscale global look_landscape_autumn_pop ColorChecker masked look_landscape_autumn_pop grayscale masked

look_landscape_sky_enhance 🟦 mask-bound

Sky-targeted enhancement (Heaton 'adaptive sky' shape). Cool-tone highlights shift (hue 200, sat 0.15) + slight vibrance (+0.05). Pre-baked with mask_sky (RFC-032) so the move scopes to the sky region automatically. Compose, don't replace — this is a focused enhancement to stack on top of any landscape look. For complex skies (sunsets, partial clouds, trees protruding into sky), override mask_spec with a constructed path mask via render_preview + LLM-vision (llm-vision-for-masks.md Pattern 7).

ColorChecker Grayscale ramp
look_landscape_sky_enhance ColorChecker look_landscape_sky_enhance grayscale

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_landscape_water_silk 🟦 mask-bound

Water surfaces — silky water in long-exposure work, glassy lakes. Bilat clarity_strength -0.4 (smooths the texture, OPPOSITE of clarity), cool-tone shadows (hue 200, sat 0.10), vibrance +0.05. Pre-baked with mask_water_blue_cyan so the smoothing scopes to water without affecting rocks, foliage, or sky. Reduces clarity selectively to enhance the smoothness photographers spent shutter-time creating.

ColorChecker Grayscale ramp
look_landscape_water_silk ColorChecker look_landscape_water_silk grayscale

bw_convert

B&W conversion (RFC-033 follow-up; survey Gap #1). Single colorequal plugin with all 8 sat axes set to -1.0 (full saturation kill = grayscale). Exposes 8 bright_X parameters emulating Adams-school color-filter strength: bright_red +0.3 lightens skin / red flowers / darkens skies in B&W; bright_blue -0.2 darkens skies; bright_green +0.3 lightens foliage; etc. The chemigram analog of Photoshop Channel Mixer (Monochrome) and Silver Efex Color Filters. Universal Step 1 of any B&W workflow per the photographer survey (6/6 photographers reach for color-filter-driven conversion as their foundational B&W move).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
bw_convert ColorChecker global bw_convert grayscale global bw_convert ColorChecker masked bw_convert grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

Parameter sweep (bright_blue): rendered at multiple values via the parameterized apply path (--value V / --param NAME=V); other parameterized axes (if any) held at their dtstyle defaults.

-0.60 -0.30 0.00 +0.20 +0.50
bw_convert bright_blue=-0.60 bw_convert bright_blue=-0.30 bw_convert bright_blue=0.00 bw_convert bright_blue=+0.20 bw_convert bright_blue=+0.50

look_bw_classic_neutral

Classic B&W foundation — neutral channel weighting (no filter), mid contrast (sigmoid 1.3), mild structure (clarity 0.3). The starting point for any B&W work; compose with split-tone or chiaroscuro variants for stylistic direction. Per RFC-033 / survey Gap #1.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_bw_classic_neutral ColorChecker global look_bw_classic_neutral grayscale global look_bw_classic_neutral ColorChecker masked look_bw_classic_neutral grayscale masked

look_bw_high_contrast_chiaroscuro

Tucker/Thompson-style chiaroscuro B&W — strong sigmoid contrast (1.7), deep shadow brilliance (-0.20), lifted highlight brilliance (+0.10). For street/portrait B&W where dramatic light-shadow interplay defines the image. Compose with mask_subject for directional facial sculpting (Tucker portrait discipline).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_bw_high_contrast_chiaroscuro ColorChecker global look_bw_high_contrast_chiaroscuro grayscale global look_bw_high_contrast_chiaroscuro ColorChecker masked look_bw_high_contrast_chiaroscuro grayscale masked

look_bw_landscape_dramatic

Page/Adamus dramatic B&W landscape — red-filter-emulated conversion (bright_red +0.20 lightens land; bright_blue -0.30 darkens skies — the classic Adams-school red filter for storm-cloud drama). Sigmoid contrast 1.6 + clarity 0.5. For stormy skies, rugged terrain, weather drama. The B&W counterpart of look_landscape_dramatic_moody.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_bw_landscape_dramatic ColorChecker global look_bw_landscape_dramatic grayscale global look_bw_landscape_dramatic ColorChecker masked look_bw_landscape_dramatic grayscale masked

look_bw_split_tone_warm_shadows

Subtle warm-shadows toned B&W — sepia / selenium print evocation. Neutral B&W conversion + mid-strong sigmoid contrast (1.35) + warm-tone shadows (hue 30, sat 0.05) + cool-tone highlights (hue 210, sat 0.03). The split-tone tinting reads as 'toned print' rather than pure neutral B&W.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_bw_split_tone_warm_shadows ColorChecker global look_bw_split_tone_warm_shadows grayscale global look_bw_split_tone_warm_shadows ColorChecker masked look_bw_split_tone_warm_shadows grayscale masked

look_bw_silver_efex_zone_balanced

Whalley/Boutwell zone-system-aware balanced B&W — the restraint discipline applied to monochrome. Neutral conversion + gentle sigmoid contrast (1.15) + subtle clarity (0.15). The defining stylistic position for B&W work that doesn't push contrast or structure as a dramatic move; reads as 'measured tonal development' (Adams-school).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_bw_silver_efex_zone_balanced ColorChecker global look_bw_silver_efex_zone_balanced grayscale global look_bw_silver_efex_zone_balanced ColorChecker masked look_bw_silver_efex_zone_balanced grayscale masked

look_wildlife_subject_sharpen 🟦 mask-bound

Subject-isolated wildlife sharpening — feather / fur / scale detail lifted ON THE SUBJECT only via mask_subject (RFC-032). Sharpen amount 2.0 + bilat clarity 0.3. The chemigram realization of LR's Subject-mask + Sharpening + selective Texture pattern (Sweileh, Matiash, Dale, Gardner all reach for this). Compose with mask_subject in the manifest; pair with look_wildlife_background_blur for compositional subject emphasis.

ColorChecker Grayscale ramp
look_wildlife_subject_sharpen ColorChecker look_wildlife_subject_sharpen grayscale

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_wildlife_background_blur 🟦 mask-bound

Background softening for wildlife — bilat clarity_strength -0.5 (the softening direction; opposite of clarity boost). Pre-baked with mask_subject + invert: true (RFC-034) so the softening scopes to everything-except-subject. Mimics longer-lens / shallower-DOF rendering at edit time. Pair with look_wildlife_subject_sharpen for complete subject emphasis. Marc/Bushcrafter darktable-discipline made portable.

ColorChecker Grayscale ramp
look_wildlife_background_blur ColorChecker look_wildlife_background_blur grayscale

look_wildlife_eye_lift 🟦 mask-bound

Catchlight emphasis on the wildlife subject's eye — exposure +0.3 EV + sharpen amount 1.5, scoped to mask_eye_region (RFC-032). The eye becomes the brightest, sharpest point in the frame; gives the bird / animal its 'life.' Cross-genre echo of Portrait Move 7 (eye-detail lift). For close-up wildlife where the subject's gaze is the picture.

ColorChecker Grayscale ramp
look_wildlife_eye_lift ColorChecker look_wildlife_eye_lift grayscale

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

look_wildlife_high_iso_recovery

High-ISO wildlife recovery (low-light dance-floor, late dusk owl, early-dawn bird-burst). Manual denoiseprofile (nbhood 7, strength 1.2, scattering 2.0) + gentle sigmoid 1.25 + subtle clarity 0.2. Note: for ISO ≥ 1600 most surveyed wildlife photographers ROUTE THROUGH a sibling AI-NR tool (Topaz DeNoise / DxO PureRAW / LR AI Denoise) BEFORE this look applies; document the BYOA pattern in vocabulary-patterns.md. This look is the chemigram-only manual fallback when sibling tooling isn't configured.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_wildlife_high_iso_recovery ColorChecker global look_wildlife_high_iso_recovery grayscale global look_wildlife_high_iso_recovery ColorChecker masked look_wildlife_high_iso_recovery grayscale masked

look_wildlife_natural_warm

Warm golden-hour wildlife default — temperature +0.05 red shift + sigmoid 1.25 + vibrance +0.10 with slight saturation_global pull (-0.03 to keep the warmth credible, not cartoonish). The starting point for early-morning / late-afternoon wildlife where natural warmth IS the subject. Compose with look_wildlife_subject_sharpen for full effect.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_wildlife_natural_warm ColorChecker global look_wildlife_natural_warm grayscale global look_wildlife_natural_warm ColorChecker masked look_wildlife_natural_warm grayscale masked

look_food_appetizing_warm

Default food editorial — warm WB (+0.04 red), gentle sigmoid 1.25, vibrance +0.15 + lifted midtone brilliance +0.08. Lauren C. Short / Darina Kopcok / Joanie Simon's foundational starting point for food blog and editorial work. Pre-WB-foundation (gray card recommended); downstream HSL color shaping per look_food_orange_pop / look_food_green_natural compose orthogonally.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_food_appetizing_warm ColorChecker global look_food_appetizing_warm grayscale global look_food_appetizing_warm ColorChecker masked look_food_appetizing_warm grayscale masked

look_food_orange_pop

Lift the orange / red food band — tomato, carrot, salmon, paprika, peach. Colorequal sat_orange +0.30 + sat_red +0.20 (saturation lift on warm food colors) + slight brightness lifts. The HSL-per-color discipline that food photographers use INSTEAD of global saturation (which would destroy whites and greens). Compose on top of look_food_appetizing_warm.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_food_orange_pop ColorChecker global look_food_orange_pop grayscale global look_food_orange_pop ColorChecker masked look_food_orange_pop grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

look_food_green_natural

Lift greens — fresh herbs, salad, parsley, basil — without crossing into the cartoonish lime-green that over-edited food photography shows. Colorequal sat_green +0.20 + sat_yellow +0.10 + bright_green +0.05. The restraint discipline applied to color shaping (Tucker / Marino voice in food work). Compose on top of look_food_appetizing_warm.

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_food_green_natural ColorChecker global look_food_green_natural grayscale global look_food_green_natural ColorChecker masked look_food_green_natural grayscale masked

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (masked): below visible threshold on this chart input)

look_food_texture_subtle 🟦 mask-bound

Subtle texture lift for food — bread crust, pastry layers, meat fibers, fruit skin texture. Bilat clarity_strength +0.20 — explicit ceiling matching the food-photography-academy 'never overdone' discipline (Kopcok: 'overdoing clarity makes food look dry and unappealing'). Pre-baked with mask_subject so the texture lift scopes to the food, not the table / plate. Compose with look_food_appetizing_warm.

ColorChecker Grayscale ramp
look_food_texture_subtle ColorChecker look_food_texture_subtle grayscale

(near-baseline diff in ColorChecker (global): below visible threshold on this chart input)

(near-baseline diff in grayscale (global): below visible threshold on this chart input)

look_product_packshot_clean

Commercial packshot baseline — gentle sigmoid 1.10 (avoids the punch-the-product look), subtle vignette -0.10 (-10% brightness edges; pulls the eye to the centered product). Karl Taylor / Zoe Noble's commercial-product clean-on-white starting point. Assumes WB has been gray-card-corrected (use wb_from_gray_card MCP tool / CLI before this look applies).

ColorChecker (global) Grayscale (global) ColorChecker (centered ellipse mask) Grayscale (centered ellipse mask)
look_product_packshot_clean ColorChecker global look_product_packshot_clean grayscale global look_product_packshot_clean ColorChecker masked look_product_packshot_clean grayscale masked

Notes

  • Inputs are sRGB PNGs, not raw files. darktable processes them through its non-raw path — input color profile applies, demosaic does not. Some primitives (e.g., raw-aware white-balance moves) behave differently from how they would on a real raw. The gallery is for visual response validation, not pipeline calibration; for raw-pipeline direction-of-change validation see the e2e suite in tests/e2e/.

  • Mask-bound entries (gradient/ellipse/rectangle, marked 🟦 above) route through the drawn-mask apply path per ADR-076. The mask geometry encodes into the XMP's masks_history; you see the spatial shaping in the rendered chart.

  • Out-of-gamut patches on the ColorChecker (notably patch #18 Cyan) clip to nearest in-gamut sRGB; that clipping is in the input, not the primitive. See reference-targets/README.md.