Skip to content

Nodes · Off-shelf

Denoise

Off-shelfv1coreNeeds 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
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.
amountFloat1Overall denoise strength. 0 is a wire — bit-identical passthrough.
roll_offFloat2The threshold shape: 1 = soft (smooth but eats detail), higher approaches hard (edges survive, risk of ringing). 2 is the garrote sweet spot.
highFloat1Gain on the finest frequency band. Pull DOWN to protect fine detail from the denoise.
mediumFloat1Gain on the medium band.
lowFloat1Gain on the low band — large soft blotches.
very_lowFloat1Gain on the coarsest band. Usually leave at 1.
luminance_gainFloat1How hard the denoise hits brightness noise. Luma noise reads as texture — treat it gently.
chrominance_gainFloat5How hard it hits colour noise. Chroma blotches are the ugly kind — 5x luma is normal and safe.
sharpenFloat0Adds back retained fine detail after thresholding — counters the softness denoising causes.
mixFloat1Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect.
profile_lumaLutVec::new(Not documented yet.
profile_chromaLutVec::new(Not documented yet.
temporalInt0Not documented yet.
temporal_thresholdFloat0.06Not documented yet.

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