Nodes/ComfyUI-Darkroom/Exposure & Tone
ComfyUI Node

Exposure & Tone

The Camera Raw basics panel, as a single ComfyUI node

By jeremieLouvaert·Created 5 months ago·Updated 2 days ago· 101
Exposure & Tone
  • image
  • image
exposure0.0
contrast0
highlights0
shadows0
whites0
blacks0
strength1.00

Every raw editor on earth opens with the same six controls: exposure, contrast, highlights, shadows, whites, blacks. That panel is where most photography actually happens - it's the whole "expose for the subject, grade the tones" philosophy in six sliders. Exposure & Tone is that panel as a single ComfyUI node, and it's the natural first stop in any Darkroom grade.

The six sliders

  • exposure (−5 to +5 EV) - the whole-image brightness in f-stops. +1 doubles brightness, exactly like opening up a stop of light. This is the "get the overall exposure right" control; everything else is relative to it.
  • contrast (−100 to +100) - midtone contrast around 18% grey, the photographer's reference point for "middle gray." Positive pushes midtones apart for punch; negative flattens.
  • highlights (−100 to +100) - the top ~25% of the tonal range. Push positive to lift, negative to recover clipped highlights. This is the recovery slider that pulls detail back from a bright sky.
  • shadows (−100 to +100) - the bottom ~25%. Positive opens shadows up, negative crushes them. The classic "lift the shadows so you can see into the dark areas" control.
  • whites (−100 to +100) - the top ~10%, the white clipping point. Positive pushes whites toward true white; negative pulls them down.
  • blacks (−100 to +100) - the bottom ~10%, the black clipping point. This is how you set whether the image has true black or lifted, filmic black.

If that order feels familiar, it should - it's the Lightroom/Camera Raw basic panel, and the two sets overlap deliberately: highlights/shadows are parametric (they recover or compress without hard-clipping), while whites/blacks set the actual endpoints.

Plus the pack-standard strength blend (0–1) to dial the whole adjustment back.

How it works

Like everything in Darkroom, it operates in linear light - sRGB gamma is removed before processing and reapplied after, which is why the exposure slider behaves like real stops rather than a flat brightness multiply. That linear-light math is the whole pack's architecture and it's why the nodes compose so cleanly: exposure first, then White Balance, then the grading nodes, then grain.

Output is a single image. It's a per-pixel color transform, so it's on the README's list of nodes you can put inside a LUT bake chain - an exposure-and-tone adjustment is exactly the kind of thing you'd want to bake into a .cube for reuse.

How to actually use it

The professional order is: set exposure first so the overall image reads right, then pull highlights down to recover any blown areas, then lift shadows to see into the dark, then use whites/blacks to set clean endpoints, and finally add contrast last - because contrast after endpoint-setting behaves predictably, while contrast before fights your endpoints.

A common beginner mistake: fixing a dark image by cranking exposure and whites at once. Exposure already moves the endpoints; adding whites on top clips everything to white. Let one control do its job, look at the histogram, then move on.

Installing it

Part of the full ComfyUI-Darkroom pack:

cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom.git
pip install -r ComfyUI-Darkroom/requirements.txt

Or search "Darkroom" in ComfyUI Manager. Needs scipy, opensimplex, rawpy, exifread, Pillow. Restart and it's under AKURATE/Darkroom/Raw. No GPU, no models, no API - pure numpy/scipy, instant even on large batches.

It's not a flashy node. It's the boring, essential one - and most good grades start here, whether the image came out of a camera or a diffusion model.

CategoryAKURATE/Darkroom/Raw

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
exposureFLOAT0.0-5–5Exposure in EV stops. +1 = double brightness
contrastFLOAT0-100–100Midtone contrast around 18% grey
highlightsFLOAT0-100–100Recover or boost highlights (top ~25% of tonal range)
shadowsFLOAT0-100–100Open up or crush shadows (bottom ~25% of tonal range)
whitesFLOAT0-100–100White clipping point adjustment (top ~10%)
blacksFLOAT0-100–100Black clipping point adjustment (bottom ~10%)
strengthoptFLOAT1.000–1Blend between original (0) and adjusted (1)

Outputs (1)

NameTypeDescription
imageIMAGE