Contrast Brightness
The two sliders you reach for before anything clever
- image
- IMAGE
Every photo edit starts the same way: it's a little flat, pull the contrast; a little dark, lift the brightness. This node is exactly that - no curves, no histograms, no LUTs, just the two knobs. If you're building a batch photo-finishing pipeline with the Photography Nodes pack, this is the front door, the first thing in the chain that sets the baseline everything else grades on top of.
How it works
Under the hood it's embarrassingly simple, and that's the point. Every pixel gets multiplied by contrast and then shifted by brightness: clamp((image * contrast) + brightness). Contrast pivots around zero, brightness is an additive offset on a -1 to +1 scale. There's no gamma curve, no luminance-aware processing - which means it's predictable and fast, and it's exactly what you want when you need a deterministic starting point for a whole batch of images rather than a clever tone curve that behaves differently on every frame.
The contrast slider runs 0.05–4, where 1 is neutral. Values below 1 flatten (handy for that washed-out "filmic base" before a LUT), values above 1 punch. Brightness sits at 0 neutral, -1 all the way black, +1 blown out. The node clamps the output to 0–255-equivalent so you never get NaN or out-of-range pixels further down the graph.
Inputs that matter
Just two:
- contrast - 0.05–4, default 1. Your main dial for punch vs. flat
- brightness - -1 to 1, default 0. Lift or drop exposure
One IMAGE in, one IMAGE out.
Install
It's part of Photography Nodes, so it's a one-time pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/TrophiHunter/ComfyUI_Photography_Nodes
Restart and look under TrophiHunter/Photography (ComfyUI Manager: search "Photography Nodes"). No requirements.txt, no model files - pure torch math.
Where people get burned
The main trap is treating contrast as a sharpening tool. Cranking contrast to 3 on a soft image gives you crunchy clipped edges, not detail - that's what Sharpen Unsharp Mask is for. Also note this is a linear adjustment, so on already-contrasty images it clips highlights fast; the pack's Levels Adjustment gives you the input/output range control if you're fighting blown whites. In the author's example workflow, Contrast → Levels → Saturation → LUT is the canonical opening sequence, and honestly that ordering is the right lesson: flatten with contrast, re-range with levels, then grade.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| contrast | FLOAT | 1.0000.05–4 | — |
| brightness | FLOAT | 0.000-1–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |