Skip to content

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

  1. 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).
  2. Bake the profile so the threshold holds across the shot.
  3. Protect a band by pulling its gain down rather than lowering amount.
  4. For a locked-off or slow shot, raise temporal — it removes noise the spatial stage would have to blur its way to.

Inputs

InputWhat it takes
inthe image this node works on
masklimits the effect to this matte — the engine's universal mask slot, applied for every node that declares it

Outputs

OutputType
outImage

Parameters

ParameterTypeDefaultWhat it does
channelsChoicergbaWhich 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_posFloat2[0.0, 0.0]Corner of the noise-analysis box. Box a FLAT, detail-free patch at least 80×80 px.
analysis_sizeFloat2[0.0, 0.0]Size of the analysis box. Under 80×80 it is ignored and the whole frame is measured.
amountFloat1.0Overall denoise strength. 0 is a wire — bit-identical passthrough.
roll_offFloat2.0The threshold shape: 1 = soft (smooth but eats detail), higher approaches hard (edges survive, risk of ringing). 2 is the garrote sweet spot.
highFloat1.0Gain on the finest frequency band. Pull DOWN to protect fine detail from the denoise.
mediumFloat1.0Gain on the medium band.
lowFloat1.0Gain on the low band — large soft blotches.
very_lowFloat1.0Gain on the coarsest band. Usually leave at 1.
luminance_gainFloat1.0How hard the denoise hits brightness noise. Luma noise reads as texture — treat it gently.
chrominance_gainFloat5.0How hard it hits colour noise. Chroma blotches are the ugly kind — 5x luma is normal and safe.
sharpenFloat0.0Adds back retained fine detail after thresholding — counters the softness denoising causes.
mixFloat1.0Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect.
profile_lumaLut0 pointsThe measured noise profile from Analyse — noise per brightness. Analyse once and the strength holds across the shot instead of pulsing.
profile_chromaLut0 pointsThe measured noise profile from Analyse — noise per brightness. Analyse once and the strength holds across the shot instead of pulsing.
temporalInt0Frames either side to average in as well (0 = spatial only). Content that moves more than temporal_threshold is left alone, so nothing ghosts.
temporal_thresholdFloat0.06How different a neighbouring frame's pixel may be and still be averaged in.
disabledBoolfalseBypass: the node passes its first input through untouched (D in the graph). The knobs keep their values for when it comes back.
labelTextA note shown under the node in the graph — what this node is FOR. Never affects the render or the cache.
hide_inputBoolfalseDraw 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