Flux Lighting & Color
Levels, channel balance, and a fake depth-of-field pass in one node
- image
- depth
- image
- analysis_report
This is the node the whole pack is actually named after, and it's the one the author has kept updating (an auto_analysis mode landed in August 2025, well after the initial release) - a decent sign it's more than a copy-pasted afterthought like a couple of its packmates. It's a post-process node: full-image levels, per-channel RGB balance, brightness and saturation, plus an optional depth-of-field blur, all in one place, with the option to let it analyze the image and pick its own settings instead of you dragging ten sliders.
Why you'd reach for it
AI output has a well-known tell: oversaturation and contrast that's a little too clean, plus a flatness that comes from having no simulated lens at all. The usual fix is a manual grading pass - pull saturation down a touch, push a subtle warm or cool cast, and if you want depth, fake it with a blur that respects a depth map instead of blurring everything uniformly. That's precisely the toolkit this node bundles: instead of chaining a Levels node, a channel-mixer node, a saturation node, and a separate blur node, you get one node with all of it, plus an "auto" mode that tries to guess reasonable values for you.
Worth saying plainly: the depth-of-field here is a post-process trick, not a physically simulated lens. It uses a depth map you supply to decide what's near (stays sharp) and what's far (gets blurred), the same idea any depth-based fake-bokeh tool uses. It won't produce the actual optical artifacts a real lens does - don't expect swirly bokeh or accurate falloff shapes - but for "the background is a bit too in-focus" it's a fast, cheap fix that needs no extra model.
Inputs and outputs that matter
The required fields, grouped by what they actually do:
image- what you're grading.auto_analysis(default on) - when enabled, the node inspects the image and decides its own corrections instead of using your manual sliders verbatim.analysis_strength(0–1, default 0.7) controls how much of that auto-suggested correction actually gets applied - think of it as a blend between "do nothing" and "fully trust the auto mode."black_level/mid_level/white_level(defaults 0 / 0.5 / 1) - a classic Levels-tool adjustment: where black, midtone, and white get remapped to.red_level/green_level/blue_level(0–2, default 1 each) - per-channel gain, for pushing a color cast.brightness/saturation(0–2, default 1 each) - self-explanatory global adjustments.
Optional, for the depth-of-field pass:
depth(IMAGE) - a depth map. Without one, leavedof_modeonnone; the blur options have nothing to key off without it.dof_mode-none,mock,gaussian, orbox. Three different blur algorithms of increasing... well, "gaussian" is the smoother, more standard one; "box" is the cheaper, blockier one; "mock" reads like a lighter-weight approximation of gaussian.dof_radius(1–128, default 8) sets blur strength/kernel size,dof_samples(1–3, default 1) trades quality for speed.auto_brightness/auto_color_balance/auto_saturation/auto_contrast(all default on) - fine-grained switches for whatauto_analysisis allowed to touch, so you can let it fix exposure while keeping your own color cast, for instance.debug_mode(default off) - surfaces whatever internal diagnostics the node has.
Two outputs: image, the graded result, and analysis_report (STRING) - a text summary of what the auto-analysis actually decided. Route that into a Show Text or Note node if you want to see its reasoning rather than guessing.
Installing it
Manager: search ComfyUI-Light-N-Color. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/KAVVATARE/ComfyUI-Light-N-Color.git
Restart. No model downloads - this is pure image-math (numpy/opencv-python/pillow/torch), so it's genuinely install-and-go compared to most nodes on comfy.icu that want a checkpoint or two.
Common issues
- Manual sliders seem ignored -
auto_analysisdefaults to on. If you're carefully hand-tuningblack_level/white_level/color and nothing seems to stick, that's why: the auto pass is layered on top. Turnauto_analysisoff, or dropanalysis_strengthtoward 0, for direct manual control. - Depth-of-field doing nothing - the DOF fields only matter once
depthis wired up anddof_modeis offnone. No depth map, no blur, regardless ofdof_radius. - Expecting a real optical blur - it's a depth-keyed post-process, not a rendered lens simulation. Good enough for "soften the background," not for matching a specific camera's bokeh character.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| auto_analysis | BOOLEAN | true | — |
| analysis_strength | FLOAT | 0.70–1 | — |
| black_level | FLOAT | 0.000–1 | — |
| mid_level | FLOAT | 0.500–1 | — |
| white_level | FLOAT | 1.000–1 | — |
| red_level | FLOAT | 1.000–2 | — |
| green_level | FLOAT | 1.000–2 | — |
| blue_level | FLOAT | 1.000–2 | — |
| brightness | FLOAT | 1.000–2 | — |
| saturation | FLOAT | 1.000–2 | — |
| depthopt | IMAGE | — | |
| dof_modeopt | COMBO | 4 options: none, mock, gaussian, box | |
| dof_radiusopt | INT | 81–128 | — |
| dof_samplesopt | INT | 11–3 | — |
| auto_brightnessopt | BOOLEAN | true | — |
| auto_color_balanceopt | BOOLEAN | true | — |
| auto_saturationopt | BOOLEAN | true | — |
| auto_contrastopt | BOOLEAN | true | — |
| debug_modeopt | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| analysis_report | STRING | — |