Nodes/ComfyUI-FlowDenoise/Extract Noise (Chroma/Luma)
ComfyUI Node

Extract Noise (Chroma/Luma)

The noise microscope

By AIMZ-GFX·Created 5 months ago·Updated about a month ago· 44
Extract Noise (Chroma/Luma)
  • original
  • clean
  • noise_total
  • noise_chroma
  • noise_luma
noise_amplify5.0
color_spaceYCbCr
noise_previewheatmap

Tuning a denoiser by eye is guessing. You crank a strength slider, squint at the preview, crank it again - and you can't actually tell whether what's disappearing is flicker or eyelash detail. Extract Noise (Chroma/Luma) is the FlowDenoise pack's diagnostic node: it shows you, literally, what the denoising is removing, split into chroma and luma so you know which of your two strength sliders to touch.

What it does

You feed it two things: your original frames and a clean version of the same clip (almost always the output of Temporal Flow Average). It subtracts one from the other - that difference is the noise - then presents it in three ways:

  • noise_total - the full noise signal, original minus clean in RGB.
  • noise_chroma - color noise only.
  • noise_luma - luminance/detail noise only.

To split chroma from luma it converts both images into a color space where the channels separate cleanly - YCbCr (default), HSV, or LAB - and treats channel 0 as luma and channels 1–2 as chroma. That's why the same color_space option exists on Selective Denoise: what you see here is what that node blends there. Pick LAB if you want the separation to track human perception better than the default.

The preview modes

Noise is tiny - values around a few percent of full range - so you won't see it raw. The noise_preview enum picks how it's visualized, and noise_amplify scales it:

  • heatmap (default) - magnitude mapped through a turbo-style colormap, blue→cyan→yellow→red. Best for spotting where the noise is.
  • signed - red for positive noise, blue for negative. Useful when you suspect a systematic bias, like a color cast pulsing one direction.
  • gray - the classic grayscale, centered at 0.5.

One gotcha: in heatmap mode, each frame is auto-normalized to its own maximum, and noise_amplify is ignored - it only scales gray (and signed normalizes per frame too). So don't be confused when the slider does nothing in heatmap mode. A single loud spike can also make an otherwise-average frame render almost black in heatmap because the colormap stretches to that spike. That's normal, not a bug.

Where it sits in the workflow

It's a preview node - every output is an IMAGE you eyeball, not something that flows onward. The standard FlowDenoise wiring:

VHS_LoadVideo ─┬─> Temporal Flow Average ──> clean ──> Selective Denoise (clean)
               └─> original ──────────────────────────> Selective Denoise (original)
Temporal Flow Average.clean ──> Extract Noise (clean)
VHS_LoadVideo (original) ─────> Extract Noise (original) ──> PreviewImage

Practical workflow: run the denoise once, then look at noise_total. If the residue is almost entirely chroma, you know to push chroma_strength and leave luma_strength alone - you're killing color flicker without touching texture. If noise_luma is clean but the clip still shimmers, your problem isn't what this pack removes. One honest caveat from the pack's launch thread: even after the flicker looks gone to the naked eye, this node usually still shows residue - the visualization is more sensitive than your eyeballs, which is exactly why two denoise passes are often recommended.

Installing it

Same as the rest of the pack - ComfyUI Manager, search "ComfyUI-FlowDenoise" and install, or:

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

then restart. The pack has one dependency that trips everyone up: memfof isn't on PyPI, so pip install memfof fails. Manager's requirements.txt / install.py handle it automatically; manually it's:

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

(Portable installs: python_embeded\python.exe -m pip install git+....) The MEMFOF weights download from HuggingFace on first use of Temporal Flow Average. Note that this node itself does no flow computation - it's pure tensor math on original and clean, so it's instant and runs on CPU happily.

Troubleshooting

  • Preview looks black / washed - check the heatmap auto-normalization note above, and that you've actually fed a different clean than original. If they're identical, the noise is exactly zero.
  • noise_amplify does nothing - you're in heatmap mode. Switch to gray to see it work.
  • Not sure what you're looking at - wire each of the three outputs to its own PreviewImage and compare. The signed mode is the tiebreaker for whether you're fighting bias or symmetric noise.
  • Clean input looks smeared - that's a Temporal Flow Average tuning problem (window too big, color_threshold too loose), not this node. Fix it upstream.

It's a small node with a single job, but it's the difference between tuning the pack by feel and tuning it by evidence. Run it once before you start, once after, and the whole pack makes sense.

CategoryFlowDenoise

Inputs (5)

NameTypeDefaultDescription
originalIMAGE
cleanIMAGE
noise_amplifyFLOAT5.01–50Amplification factor for noise preview visualization
color_spaceCOMBOYCbCrColor space for separating luma and chroma noise
noise_previewCOMBOheatmapNoise preview mode: heatmap (magnitude->color), signed (red=+/blue=-), gray (classic 0.5-centered)

Outputs (3)

NameTypeDescription
noise_totalIMAGE
noise_chromaIMAGE
noise_lumaIMAGE