Denoise + Detail
Clean up noisy AI output without smearing it to plastic
- image
- mask
- image
- mask
- denoise_detail_info
This is the node I'd reach for first from the whole MKRShift pack. x1DenoiseDetail ("Denoise + Detail") is a Lightroom/Capture One-style noise reduction pass that cleans up grainy, low-denoise generations and upscale artifacts without turning skin into wax. If you've ever stared at a hi-res fix result and thought "sharper, but now everyone's a mannequin," this is aimed at exactly that failure.
It sits under MKRShift Nodes/Utility/Photo in the pack by Cris K B, and it's one of the few nodes here that doesn't use a settings_json blob - the author gave it real sliders, which tells you it's meant for hands-on fiddling.
How it works
It's a two-part pipeline, both of which you can see in the source. First, denoise: the luma channel is blurred and blended with the original (luma_denoise controls how much, luma_radius how wide), and the same happens for chroma (chroma_denoise / chroma_radius) - that's the "clean the color noise separately from the luminance" trick that separates real denoise from a dumb Gaussian. An edge_preserve gate computes the difference between the image and its blur to find edges, then protects them from the smoothing. That's the difference between "denoised" and "smeared": edges stay crisp, flat areas get clean.
Then the detail half: a high-pass filter (image minus its own blur at detail_radius) is added back scaled by detail_boost, which restores texture after the noise removal. grain_protect is the clever bit - it detects fine high-frequency noise and suppresses the detail boost there, so you sharpen the real texture without re-amplifying the grain you just removed.
The inputs that matter
luma_denoise/chroma_denoise- how much smoothing (defaults 0.30 / 0.45). Raise chroma more than luma; color noise is uglier than luminance grain.edge_preserve- how hard to protect edges (default 0.72). Crank it when faces matter.detail_boost- how much texture to add back after denoising. Can go negative (-1 to 2) if you want extra smoothing.grain_protect- stops the boost from resurrecting noise (default 0.25).mix- global strength; 1.0 is full effect, drag to 0.5 for a subtler pass.
There's an optional mask with mask_feather and invert_mask for denoising only part of the frame, and the node outputs image, the applied mask, and a denoise_detail_info string that tells you the exact settings plus mask coverage - genuinely useful when you're dialing in a batch.
Installing it
It's part of MKRShift Nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart ComfyUI, or install via ComfyUI Manager by searching MKRShift_Nodes. No requirements.txt, no model downloads, no keys - this is pure torch/numpy/PIL math that runs in milliseconds.
Where it fits
The post-processing KB's rule applies here: reach for the cheap deterministic primitive before a generative re-pass. Most people "fix" noisy faces by firing another diffusion pass at them (ADetailer, hi-res fix), which can hallucinate and change identity. x1DenoiseDetail is the instant, deterministic alternative for the case where the image is good but grainy - denoise, boost detail, done. If the image is actually broken, a detailer is still the right tool. This node is for polish, and for polish it's excellent.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| luma_denoise | FLOAT | 0.300–1 | — |
| chroma_denoise | FLOAT | 0.450–1 | — |
| edge_preserve | FLOAT | 0.720–1 | — |
| luma_radius | FLOAT | 2.80–32 | — |
| chroma_radius | FLOAT | 3.60–64 | — |
| detail_boost | FLOAT | 0.25-1–2 | — |
| detail_radius | FLOAT | 1.50.2–16 | — |
| grain_protect | FLOAT | 0.250–1 | — |
| mix | FLOAT | 1.000–1 | — |
| mask_feather | FLOAT | 10.00–256 | — |
| invert_mask | BOOLEAN | false | — |
| maskopt | MASK | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| denoise_detail_info | STRING | — |