Nodes/MKRShift_Nodes/Denoise + Detail
ComfyUI Node

Denoise + Detail

Clean up noisy AI output without smearing it to plastic

By criskb·Created 7 months ago·Updated 5 months ago· 0
Denoise + Detail
  • image
  • mask
  • image
  • mask
  • denoise_detail_info
luma_denoise0.30
chroma_denoise0.45
edge_preserve0.72
luma_radius2.8
chroma_radius3.6
detail_boost0.25
detail_radius1.5
grain_protect0.25
mix1.00
mask_feather10.0
invert_maskfalse

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.

CategoryMKRShift Nodes/Utility/Photo

Inputs (13)

NameTypeDefaultDescription
imageIMAGE
luma_denoiseFLOAT0.300–1
chroma_denoiseFLOAT0.450–1
edge_preserveFLOAT0.720–1
luma_radiusFLOAT2.80–32
chroma_radiusFLOAT3.60–64
detail_boostFLOAT0.25-1–2
detail_radiusFLOAT1.50.2–16
grain_protectFLOAT0.250–1
mixFLOAT1.000–1
mask_featherFLOAT10.00–256
invert_maskBOOLEANfalse
maskoptMASK

Outputs (3)

NameTypeDescription
imageIMAGE
maskMASK
denoise_detail_infoSTRING