Noise Reduction
A denoise that doesn't turn your image to wax
- image
- image
You upscaled a generation and it came back with a familiar mess: grain everywhere, chroma noise splotches in the shadows, and any denoise that actually removes it leaves faces looking airbrushed. Noise Reduction is the Darkroom pack's take on fixing this without the wax-skin side effect. It's a multi-pass guided filter - the edge-preserving kind - which is exactly what you want when the thing you're cleaning up has real texture you'd like to keep.
How it works
The node splits the image into luminance and chrominance (YCbCr) and treats them differently:
- Luminance gets a guided filter. That's an edge-aware smoothing: it averages flat areas hard while respecting edges, so a jawline or a strand of hair survives while sensor-style noise in smooth regions gets crushed. That's the mechanism behind the
luminance_detailslider - higher keeps more fine detail. - Color gets gaussian chrominance smoothing. Chroma noise lives in low-resolution color channels, so you can blur it heavily without touching detail at all.
You get seven presets plus a Custom mode: Light, Medium (the default), Heavy, Color only, Luminance only, Portrait (smooth skin, keep detail), and High ISO (aggressive). The preset names genuinely match their behavior, and the "Portrait" preset is the one to start with on faces.
The inputs that matter
preset- the quick way in. Pick one, get a result.luminance_amount/color_amount- the two strengths, in case you want to denoise brightness but leave chroma alone (or vice versa).luminance_detail- detail preservation. Higher keeps fine texture; too low is where the "wax" look comes from.luminance_contrast- preserves tonal transitions. Think of it as the antidote to "everything smoothed to a single tone."strength- the global blend between the original (0) and the denoised result (1). The classic Darkroom safety valve that every node in the pack carries.
One gotcha: presets override the sliders. The manual luminance_* and color_* controls only apply when preset is set to "Custom". If you've dialed in something perfect and then switch presets, your sliders quietly stop mattering - switch back to Custom to restore them.
Where it fits in the workflow
Run it early in the Raw subcategory chain - after exposure and white balance, before sharpening or any film grain. Grain and denoise are natural enemies, so grain (Film Grain or Film Grain Pro) goes after this node in the final pass.
It's a spatial filter, which means it's one of the nodes the pack's README explicitly excludes from LUT bake chains. A .cube LUT is per-pixel; denoise needs to look at neighbors, so it can't be baked. If you're exporting a LUT grade, apply denoise to the photo after extraction, not inside the chain.
Also worth knowing: this is a classic algorithmic denoise, not a neural one. It won't hallucinate detail that isn't there - no AI upscaler magic. What it does is remove real noise while preserving what's genuinely in the image, deterministically, in a fraction of a second. For most ComfyUI finishing work that's the right trade.
Installing it
Part of the full ComfyUI-Darkroom pack, installed once:
cd ComfyUI/custom_nodes
git clone https://github.com/jeremieLouvaert/ComfyUI-Darkroom.git
pip install -r ComfyUI-Darkroom/requirements.txt
Or find "Darkroom" in ComfyUI Manager. It needs scipy, opensimplex, rawpy, exifread, Pillow; restarts after install; shows up under AKURATE/Darkroom/Raw. Pure numpy/scipy, no GPU needed, no model downloads.
If your "noise" is actually a structural artifact - tiling, banding, or compression - no denoise will fix that; it's not that kind of tool. For real high-ISO-style grain and chroma splotches, it's the one you'll reach for.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| preset | COMBO | Medium — general purpose | Quick presets. Select 'Custom' to use manual sliders |
| luminance_amountopt | FLOAT | 550–100 | Luminance noise reduction strength (only used with Custom preset) |
| luminance_detailopt | FLOAT | 450–100 | Detail preservation. Higher = keep more fine detail |
| luminance_contrastopt | FLOAT | 500–100 | Local contrast preservation. Higher = keep more tonal transitions |
| color_amountopt | FLOAT | 550–100 | Color noise reduction (chrominance smoothing) |
| color_detailopt | FLOAT | 400–100 | Color detail preservation. Higher = keep more chromatic edges |
| strengthopt | FLOAT | 1.000–1 | Blend between original (0) and denoised (1) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |