LC Image Denoise
Smooth the flat bits, keep the edges
- image
- image
- noise_report
Blurring an image to clean it up has one fatal flaw: the edges you want to keep are exactly the parts the blur destroys. LC Image Denoise (LCImageDenoise) is the LC123 pack's edge-preserving answer - it blurs the flat regions and leaves the boundaries alone, which is the difference between "denoised" and "smudged."
The mechanism is a classic: Gaussian-blur a copy, measure how much detail was lost, and only apply the blur where there wasn't any detail to lose. That's the whole secret, and it's the same family as the bilateral/guided filters the post-processing docs describe - smoothing flat areas while keeping boundaries crisp, which is what you want for cleaning up a render without turning it to mush.
The inputs
Four, all simple:
- blur_strength (sigma, 0.001–8, default 1) - how strong the Gaussian is. This is the "how much smoothing" knob.
- edge_preservation (0.001–0.25, default 0.05) - the threshold that decides what counts as an edge. Higher = more detail survives (fewer things treated as noise); lower = more aggressive smoothing.
- radius_multiplier (0–3, default 1) - scales the kernel radius relative to blur strength. A big radius smooths larger structure, not just pixel noise.
- strength (0–1, default 0.75) - the blend between original and denoised. 0 is the original, 1 is fully denoised.
One output: image, with the pack's signature on-node before/after wipe when you hover.
How to actually use it
The defaults are sensible (0.75 strength, 1 sigma, 0.05 edge) for a light clean-up. Where it earns its keep:
- Cleaning up after an aggressive sampler - a slightly crunchy render smooths out without the hair and fabric going plastic.
- Before a sharpen pass - denoise then sharpen is a classic combo; you kill the noise, then the sharpener only has real edges left to work on, so you get crispness without amplifying grain.
- On real photos - shot-on-phone noise on flat surfaces (walls, skies, skin) flattens out while text, eyes, and fine detail survive.
It's pixel math - instant, deterministic, no model. Put it after the sampler and before Save Image, and it plays well with the rest of the LC123 FX chain since everything passes IMAGE.
Install
Part of ComfyUI_LC123_nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes
or ComfyUI Manager, then restart. Pure torch - no pip extras, no model files.
Where people get burned
Two failure modes, both understandable. If you crank blur_strength way up expecting a stronger denoise, you'll instead start eating real detail - keep sigma under ~3 and compensate with strength instead. And if you find faces going waxy, your edge_preservation is too low; raise it toward 0.1 and only the flat regions get smoothed. This is a quiet niche pack with no community lore to consult, so those two knobs are the whole tuning story - the source in lc_image_tools.py is short and honest about it.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| blur_strength | FLOAT | 1.0000.001–8 | Gaussian blur strength (sigma) |
| edge_preservation | FLOAT | 0.0500.001–0.25 | Higher keeps more edges/detail |
| radius_multiplier | FLOAT | 1.000–3 | Kernel radius scale relative to blur strength |
| strength | FLOAT | 0.750–1 | Blend between original (0) and denoised (1) |
| mode | COMBO | smart | smart = measures the noise in each image and cleans brightness and colour noise separately, keeping pores and hair (uses luma / chroma / keep_detail). legacy = the old edge-gated blur (uses blur_strength / edge_preservation / radius_multiplier). |
| luma | FLOAT | 1.000–3 | smart: how hard brightness noise (grain) is cleaned, relative to the noise measured in the image. 1 = tuned default, 0 = leave brightness alone. |
| chroma | FLOAT | 1.000–3 | smart: how hard colour noise (blotches, rainbow speckle) is cleaned. Colour edges follow the brightness edges, so they stay sharp. 0 = leave colour alone. |
| keep_detail | FLOAT | 0.500–1 | smart: how much of the original texture comes back where it stands clearly above the noise (pores, hair, fabric). Smooth areas stay clean either way. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | The denoised image. |
| noise_report | STRING | smart mode: the noise measured in each image (brightness and colour, out of 255). |