Video Denoise
Clean grain and banding without touching the source
- video
- video
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
nlmeanswhere a lighter pass would do. Start at 0.3 and creep up. - Banding still visible after denoise - you used a general denoiser; switch to
debandorgradfun, 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.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| method | COMBO | atadenoise | 5 options: atadenoise, nlmeans, fftdnoiz, deband, gradfun |
| strength | FLOAT | 0.300–1 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |