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
- 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 |
|---|---|---|---|
| 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 | Overall denoise strength. 0 is a wire — bit-identical passthrough. |
| roll_off | Float | 2 | 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 | Gain on the finest frequency band. Pull DOWN to protect fine detail from the denoise. |
| medium | Float | 1 | Gain on the medium band. |
| low | Float | 1 | Gain on the low band — large soft blotches. |
| very_low | Float | 1 | Gain on the coarsest band. Usually leave at 1. |
| luminance_gain | Float | 1 | How hard the denoise hits brightness noise. Luma noise reads as texture — treat it gently. |
| chrominance_gain | Float | 5 | How hard it hits colour noise. Chroma blotches are the ugly kind — 5x luma is normal and safe. |
| sharpen | Float | 0 | Adds back retained fine detail after thresholding — counters the softness denoising causes. |
| mix | Float | 1 | Dissolves the effect back toward the input. 0 = off (bit-identical), 1 = full effect. |
| profile_luma | Lut | Vec::new( | Not documented yet. |
| profile_chroma | Lut | Vec::new( | Not documented yet. |
| temporal | Int | 0 | Not documented yet. |
| temporal_threshold | Float | 0.06 | Not 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