Nodes/ComfyTV/Video Denoise
ComfyUI Node

Video Denoise

Clean grain and banding without touching the source

By jtydhr88·Created 3 months ago·Updated about 16 hours ago· 725
Video Denoise
  • video
  • video
force_run_token0
project_id
parent_output_id0
methodatadenoise
strength0.30

Noise is the thing that gets amplified by every later step. You sharpen, you grade, you upscale, and the sensor grain from a dark shot becomes a texture you can't scrub out. Video Denoise is the stage that deals with it early - one strength slider mapped onto a menu of real denoise algorithms, and the source clip stays untouched.

What it does

It runs a denoise/cleanup filter over the whole clip on ▶ Run (FFmpeg filters through PyAV) and writes a new COMFYTV_VIDEO snapshot. The single strength dial (0–1, default 0.3) gets remapped internally to sensible per-filter parameters, so you pick a method and push one slider instead of tuning six thresholds.

The method dropdown is where the real choice lives:

  • atadenoise (default) - adaptive temporal denoise; fast, good all-rounder.
  • nlmeans - non-local means; the cleanest result, also the slowest.
  • fftdnoiz - frequency-domain denoise.
  • deband - removes banding (those visible steps in skies and gradients).
  • gradfun - smooths gradient banding.

For banding specifically, reach for deband or gradfun, not a general denoiser - that's the distinction the docs hammer. For general grain, atadenoise is the right default and nlmeans is the one to break out when it's a hero shot that deserves the render time.

Where it fits

Order matters. Denoise before sharpening, upscaling, or heavy grading - clean footage first so you're not amplifying noise - and before Frame Interpolate, because the motion estimator in minterpolate handles clean footage much better than noisy frames. It's also a common pre-pass in the FX chain; stack it at the front so everything downstream starts from a quiet image.

Install and troubleshooting

Pack-standard install: git clone https://github.com/jtydhr88/ComfyTV into ComfyUI/custom_nodes, restart, under ComfyTV → VideoFX. No models - pure PyAV processing, no GPU.

  • Run errors "strength must be > 0" - you set the slider to 0, which is "no denoise," and the node refuses to pretend otherwise.
  • Detail looks smeared - strength is too high, or you used nlmeans where a lighter pass would do. Start at 0.3 and creep up.
  • Banding still visible after denoise - you used a general denoiser; switch to deband or gradfun, which are built for exactly that.

Output is a COMFYTV_VIDEO snapshot, so native-ComfyUI consumers need a ← ComfyTV Video Bridge. Inside the pack it chains directly into the next VideoFX stage.

CategoryComfyTV/VideoFX

Inputs (6)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
methodCOMBOatadenoise5 options: atadenoise, nlmeans, fftdnoiz, deband, gradfun
strengthFLOAT0.300–1
videooptCOMFYTV_VIDEO

Outputs (1)

NameTypeDescription
videoCOMFYTV_VIDEO