Nodes · Filter
Denoise
Filterv1coreNeeds full input
Overview
À-trous wavelet denoise against a measured noise profile, plus a temporal stage. Analysing once and baking the profile keeps the strength from wandering frame to frame across a shot.
How to
- Box a flat, detail-free patch with
analysis_pos/analysis_size(at least 80×80, or it is ignored and the whole frame is measured). - Bake the profile so the threshold holds across the shot.
- Protect a band by pulling its gain down rather than lowering
amount. - For a locked-off or slow shot, raise
temporal— it removes noise the spatial stage would have to blur its way to.
Inputs
| Input | What it takes |
|---|---|
| in | the image this node works on |
| mask | limits the effect to this matte — the engine's universal mask slot, applied for every node that declares it |
Outputs
| Output | Type |
|---|---|
| out | Image |
Parameters
| Parameter | Type | Default | What it does |
|---|---|---|---|
| channels | Choice | rgba | Which channels this node writes: rgba, rgb (alpha passes through untouched), alpha only, all, or none (bypass). Everything unselected comes straight from the input — same as Nuke. allrgbargbalphanone |
| analysis_pos | Float2 | [0.0, 0.0] | Corner of the noise-analysis box. Box a FLAT, detail-free patch at least 80×80 px. |
| analysis_size | Float2 | [0.0, 0.0] | Size of the analysis box. Under 80×80 it is ignored and the whole frame is measured. |
| amount | Float | 1.0 | Overall denoise strength. 0 is a wire — bit-identical passthrough. |
| roll_off | Float | 2.0 | The threshold shape: 1 = soft (smooth but eats detail), higher approaches hard (edges survive, risk of ringing). 2 is the garrote sweet spot. |
| high | Float | 1.0 | Gain on the finest frequency band. Pull DOWN to protect fine detail from the denoise. |
| medium | Float | 1.0 | Gain on the medium band. |
| low | Float | 1.0 | Gain on the low band — large soft blotches. |
| very_low | Float | 1.0 | Gain on the coarsest band. Usually leave at 1. |
| luminance_gain | Float | 1.0 | How hard the denoise hits brightness noise. Luma noise reads as texture — treat it gently. |
| chrominance_gain | Float | 5.0 | How hard it hits colour noise. Chroma blotches are the ugly kind — 5x luma is normal and safe. |
| sharpen | Float | 0.0 | Adds back retained fine detail after thresholding — counters the softness denoising causes. |
| mix | Float | 1.0 | Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect. |
| profile_luma | Lut | 0 points | The measured noise profile from Analyse — noise per brightness. Analyse once and the strength holds across the shot instead of pulsing. |
| profile_chroma | Lut | 0 points | The measured noise profile from Analyse — noise per brightness. Analyse once and the strength holds across the shot instead of pulsing. |
| temporal | Int | 0 | Frames either side to average in as well (0 = spatial only). Content that moves more than temporal_threshold is left alone, so nothing ghosts. |
| temporal_threshold | Float | 0.06 | How different a neighbouring frame's pixel may be and still be averaged in. |
| disabled | Bool | false | Bypass: the node passes its first input through untouched (D in the graph). The knobs keep their values for when it comes back. |
| label | Text | A note shown under the node in the graph — what this node is FOR. Never affects the render or the cache. | |
| hide_input | Bool | false | Draw the node without its input wire — a tidy graph for a node whose source is obvious (a Dot, a viewer tap). |
Known edges
The temporal stage rejects any neighbouring frame further than temporal_threshold on any channel, so a moving edge finds no partners and is passed through rather than ghosted. A fast-moving shot therefore gets less temporal benefit; motion-compensated averaging is not built.
Since
27 Aug 2026 — the temporal stage