Nodes/ComfyUI-FlowDenoise/Selective Denoise
ComfyUI Node

Selective Denoise

The dial that kills chroma flicker without smearing detail

By AIMZ-GFX·Created 5 months ago·Updated about a month ago· 44
Selective Denoise
  • original
  • clean
  • denoised
chroma_strength0.80
luma_strength0.30
color_spaceYCbCr
clamp_outputtrue

Here's the thing about Temporal Flow Average: its output is too clean. Run a video clip through it at full strength and you get buttery smooth frames with all the texture averaged out - great reference, bad final. Selective Denoise is the node that takes that too-clean reference and dials it back to taste, with separate control over color and detail. If FlowDenoise has a "where the actual denoising happens" node, this is it.

What it does

It takes your original frames and a clean version of them, converts both into a color space, and blends each part independently:

  • chroma_strength - how much of the clean version's color replaces the original's (0 = keep original color, 1 = fully clean color).
  • luma_strength - same idea for luminance, which carries texture and edges.

The magic is that these are separate sliders. AI-video artifacts are overwhelmingly chroma problems - color flicker, chroma spikes, random color pops - so you can hammer chroma while barely touching luma, and keep all the fine detail the generator produced. That's the entire reason this node exists: the pack's author built it after noticing that strong denoising of Seedance clips was eating detail people wanted to keep.

The color_space choice (YCbCr default, HSV, LAB) should match whatever you used in Extract Noise - that's how you keep the preview and the blend consistent. clamp_output (default on) just clamps the final RGB to [0,1] so out-of-range color-space math can't produce blown highlights.

The settings people actually use

From the README's recommended settings, and they're worth trusting:

AI-generated video (Seedance, Kling, etc.) - kill flicker, keep detail:

chroma_strength: 0.7–0.9
luma_strength: 0.1–0.3
color_space: YCbCr

Film grain removal - heavier, perceptually-tuned:

chroma_strength: 0.5–0.7
luma_strength: 0.3–0.5
color_space: LAB

Chroma-only cleanup - don't touch luminance at all:

chroma_strength: 0.9
luma_strength: 0.0

Where people get burned: cranking luma_strength toward 1 to "clean it up" is how you end up with waxy, detail-free video. The trade-off is unavoidable - more denoise, more detail lost - and the whole point of the two sliders is that you almost never need both high.

Outputs and wiring

Single output, denoised (an IMAGE), which feeds straight into VHS_VideoCombine to export:

VHS_LoadVideo ─┬─> Temporal Flow Average ──> clean ──> Selective Denoise (clean)
               └─> original ──────────────────────────> Selective Denoise (original)
Selective Denoise.denoised ──> VHS_VideoCombine ──> Match Source Color Tags (optional)

The denoised frames are what you actually ship. If you run Match Source Color Tags afterward, that's fixing the container metadata, not these pixels.

Installing it

Same pack as the rest of the FlowDenoise nodes - ComfyUI Manager, search "ComfyUI-FlowDenoise", install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/AIMZ-GFX/ComfyUI-FlowDenoise.git

The one dependency that always bites: memfof is not on PyPI, so pip install memfof dies with "Could not find a version." Use the GitHub URL (Manager's requirements.txt / install.py do this automatically):

pip install git+https://github.com/msu-video-group/memfof.git

Portable: python_embeded\python.exe -m pip install git+.... You only need this for the upstream Temporal Flow Average - Selective Denoise itself is pure tensor blending, no model, no flow, instant even on CPU. You'll also want Video Helper Suite for the VHS_* I/O nodes in the standard workflow.

Troubleshooting

  • Still seeing flicker at my settings - this is the most-reported issue in the pack's launch thread. Real users found one pass often isn't enough; run the whole thing again and it cleans up the residue the first pass leaves. The author's own guidance: if you set both strengths to 1.0 you get the fully-denoised result, so the node is doing its job - the fix is a second pass, not stronger settings.
  • Ghosting on moving subjects - that's inherited from Temporal Flow Average (lower its color_threshold / shrink its window_size), not this node. Blending can't invent clean frames; it can only mix what it's given.
  • Colors look off / washed - make sure clamp_output is on, and that color_space matches what you used elsewhere in the graph. Mixing YCbCr blending with an LAB preview is a recipe for confusion.
  • Waxy, over-smoothed video - luma_strength too high. Drop it below 0.3 and lean on chroma instead. If you genuinely need heavy luma denoise (film grain), accept the softness and use LAB which respects perceptual lightness better.

Think of it as a mix knob between "noisy original" and "clean reference," with a separate balance for color and detail. Tune it with Extract Noise in the loop and you'll stop guessing.

CategoryFlowDenoise

Inputs (6)

NameTypeDefaultDescription
originalIMAGE
cleanIMAGE
chroma_strengthFLOAT0.800–1How much to denoise chroma (0=keep original, 1=fully clean)
luma_strengthFLOAT0.300–1How much to denoise luma (0=keep original, 1=fully clean)
color_spaceCOMBOYCbCrColor space for luma/chroma separation
clamp_outputBOOLEANtrueClamp output to [0,1] range

Outputs (1)

NameTypeDescription
denoisedIMAGE