A Weird Machine project in collaboration with Brookline Interactive Group source ↗
Part of the control‑z family of free tools — undo the paywall

Hush.

Speak.

OPEN SOURCE NOISE REDUCTION + FILM EMULATION · FOR DAVINCI RESOLVE

Two free, open-source OpenFX plugins that turn the free edition of Resolve into a finishing room. Hush opens the node tree and takes the noise out — measured, and it shows every move. Speak closes the tree and gives the image its voice — real film color, halation and grain. Clean early, reconstruct late. Shoot RAW or log without noise anxiety, or being forced to pay.

Hush v3.5 · Speak v1.0 · Resolve 17+ free & Studio · macOS 11+ · Windows 10+ · MIT · Linux builds from source
LIVE TEST CARDREAL ESTIMATOR, IN YOUR BROWSER
true σ 4.00% measured σ
Why it exists · the free finishing toolkit

Go pro, and the safety net disappears.

Every phone quietly denoises before you ever see the frame. Step up to RAW or log — the formats that make real grading possible — and that baked-in cleanup is gone. Resolve's own NR is Studio-only; the third-party plugins are paid. And noise isn't cosmetic: every contrast move amplifies it, every key edges against it, every composite inherits it. So we built the safety net — free, transparent, and yours to control.

Node one · cleanFREE

Hush

Measures your clip, removes the noise — then puts the optical character back.

Auto Setup dials in every slider (you keep them all). Temporal + spatial denoise, then — new in v3.6 — lens-like acutance and film-matched grain rebuild what real optics and film would have left. It hands your grade a matte of where it succeeded, and renders its own measurements into the viewer, so nothing is a black box.

Last node · filmFREE

Speak

The film look for the end of the tree — Hush's companion.

Film-stock density and subtractive color, halation, bloom and grain — built from original color science, working in DaVinci Wide Gamut. It reads Hush's clean-confidence matte downstream to lay grain exactly where the image was cleaned most. Clean early; reconstruct late.

Sets itself in one click Every slider stays yours Rebuilds texture, not just clean Confidence matte out The viewer is the scope Color-space aware Real-time · 4 backends · MIT
Two ways to run it

One node for speed. A few for the best image.

MediaCameraRAW / log
One nodeHush⚡ Auto Setup · denoise + texture
OutputDelivergraded

Drop one node, click Auto Setup, done. Hush measures the clip and writes every setting into the sliders — clean, textured footage in seconds, still fully yours to tweak. The fastest way to a gradeable starting point.

MediaCameraRAW / log
Node 1Hushdenoise · cached
Node 2Balanceprimary
Node 3Gradethe look
Node 4Speakfilm · last
OutputDelivervia RCM
Hush's clean-confidence matte rides downstream → Speak lays grain where the image was cleaned most

Denoise early, reconstruct late. Hush cleans first on its own cached node — before the grade amplifies the noise — and exports the confidence matte. Grade in the middle. Speak lays the film look last and reads that matte. Two coupled nodes, the best possible image.

The design study · white paper

Toward the world's best free video noise reducer

A nine-lens panel of AI experts and an audit on real 4K night footage reached the same conclusion: Hush's denoising is already strong — the frontier isn't removing more noise, it's reconstructing the image's optical character once the noise is gone. Strip the noise, then put back lens-like sharpness and film-like grain, and couple the whole thing to your grade. v3.6 shipped the first wave.

Sharpen Sharpness that reads optical.

Add edge slope on the cleaned signal, gated by the noise field and clamped so it can't ring — the acutance of a lens, not the halo of a video sharpen filter. Shipped in v3.6 — the first denoiser that does.

Re-grain Grain matched to the noise removed.

Amplitude, spectrum and placement modelled on the noise actually taken out — real emulsion texture refilling the waxed shadows, weighted to where the image was cleaned most, not a flat white-noise dither.

Couple to the grade One system with your color.

A clean-confidence matte out, a qualifier matte in, halation finishing — so noise reduction and grading run as one coupled pipeline instead of two nodes fighting each other.

68
Ideas raised
22
Kept, filtered
77
AI agents run
Read the design study →
Authored by Claude, commissioned by Stephen Walter
Before / After

Drag the line.

denoised
noisy
NOISY IN HUSHED
Validation scene, 5% injected noise → +14.9 dB PSNR at defaults. Fine texture and 2-px lines survive.
Two tools, one idea

The ballet: clean early, reconstruct late.

Hush and Speak are the two ends of the same node tree — and they were built to dance. One takes noise out at the top, before the grade can amplify it. The other puts optical character back at the bottom, after the grade is done. Between them, your creative work sits on a clean signal and ships wearing real film. Neither needs the other to be useful — but together they're a complete finishing pipeline that used to cost hundreds of dollars and a Studio license.

First node · the safety net

Hush opens the tree

Measures the clip, removes the noise while it can still see the neighbour frames, and hands your grade a clean signal to build on.

  • Denoise before contrast and keys amplify it
  • Rebuilds acutance and grain it had to smooth
  • Exports a clean-confidence matte — a map of where it worked hardest
the handoff
Last node · the signature

Speak closes it

Takes the graded image and gives it a voice — film-stock density, subtractive color, halation and grain, built from real color science.

  • Film character after the creative grade is locked
  • Reads Hush's matte to lay grain exactly where the image was cleaned most
  • One look in wide gamut → Rec.709, P3 or HDR
Why the handoff matters

Denoising and re-graining are usually strangers — you smooth at the start and sprinkle grain at the end, hoping they meet. Because Speak reads the exact matte Hush wrote, grain lands heaviest precisely where the denoiser cleaned deepest — the shadows and flat skies that lost their texture get it back, and the areas that were always sharp stay sharp. Clean early, reconstruct late, and let the two tools compare notes in the middle.

How it works

Five steps. Click each to learn more.

auto-cycling — click any step to explore
1Measure3 estimators × 16 brightness bands · lock what you see
2Temporal±8 px tracked · hard knee + Ghost Guard · zero ghosting
3Spatialself-truing Noise EQ · Deep Clean · Detail Rescue
4Refinesat curve · texture · deband · grain
5Inspectscopes + views · the viewer becomes the scope

Three estimators measure the noise of every frame: median frame-to-frame difference (immune to the correlated, blotchy noise compression creates), plus fine and coarse Laplacian statistics — with a separate estimate for every brightness band, because shadows are noisier than highlights. Robust medians keep edges, texture and motion out of the measurement, and exactly-flat pixels (letterbox bars, crushed blacks) are excluded so they can't drag the estimate toward zero. The measurement runs live every frame — Lock Profile freezes exactly what you see at the playhead (confirmed by a tracked sweep of its neighbours), and Auto Region finds the flattest patch and places the sampling box for you.

Measured, not promised

The numbers.

Every build must pass a synthetic-truth test suite before release: scenes with precisely known injected noise, so improvement is measured, not eyeballed.

PSNR before → after (dB, higher is better)

640×360 validation scenes · σ = 5% · defaults · v3.5
Static shot26.0 → 40.9 dB
Correlated (compressed) noise26.0 → 35.4 dB
Slow drift — motion-tracked in v326.0 → 38.3 dB
Fast motion26.0 → 36.0 dB
Auto Setup vs defaults (noisy footage, v3.1)40.6 → 45.6 dB

Plus: 146 synthetic-truth checks per build (auto must beat defaults on every footage class, ghosting regressions are build failures), GPU output verified against the CPU reference across 56 configurations to ~10⁻⁶ · 98 fps HD / 26 fps UHD max quality on an M1 Max (118 fps HD locked).

Transparency is the feature

See what it sees.

Resolve's built-in NR is a black box: sliders in, pixels out. Hush renders its measurements into the viewer — because a tool this consequential to your image shouldn't require faith. Every step has its own Scope checkbox, the panels combine over any view, and they're drawn by the same kernels that filter — the display can't disagree with what's happening. Here is each one on the color page:

auto-cycling — click a tab to explore
viewer — simulated color page
Hush scope in the viewer
01HUSH OPEN NR
02BALANCE
03SECONDARIES
04LOOK

The Measurements panel — input noise (blue) vs what's left after temporal stacking (amber), frames averaged, SNR gain, the noise-vs-brightness curve, and the histogram with its median. Tick it in Step 1; LOCKED appears when the profile is frozen.

For the technically curious

The math, briefly.

Measuring noise without a chart

Everything is calibrated in units of the noise standard deviation σ. The primary estimator for video is the frame you just watched — on static pixels, frame difference is pure noise with spread √2σ, regardless of spatial correlation:

σ_T = median(|I_t − I_t±1|) / (0.6745 · √2)

Motion robustness: the unbiased median and 20th-percentile estimates agree on static footage; motion inflates the median first, so disagreement means "trust only the static quantile." Spatially, Immerkær's operator (response std = 6σ, rejects gradients) runs at two scales — and per brightness band, using a 35th percentile so a band full of real texture can't fake a high reading:

σ_fine = median(|L ∗ I|) / (6 · 0.6745) L = [1 −2 1; −2 4 −2; 1 −2 1] gain(band) = 1 + w · (σ_band/σ_ref − 1) w = n/(n + 2000) (confidence)

The anti-ghosting stack: a gate that cannot ghost

w = 1 − smoothstep(1.13·g·σ_T, 1.13·g·σ_T + k·g·σ_T, |Δpatch|) g = gain(brightness band)

Full weight while a difference is explainable by noise; exactly zero past the knee. An earlier version used a Gaussian falloff — its fat tail blended pixels several σ apart at 30–40% weight and turned slow pans into soup. The hard knee ended that structurally, and a slow-drift regression test now makes ghosting a build failure. Since v3.4 the knee is calibrated per brightness band (the g above): shadows on a real camera run 1.5–2.2× noisier than mids, so a flat knee starved them of averaging — they read as motion — while highlights got a knee that was too wide. Measured: +1.35 dB in the shadows on a brightness-profiled scene, highlights unchanged.

Three more layers back the knee up. Motion Tracking re-aims each neighbour patch before gating — a step-4 coarse search on 2×2 block means (so a big step sees structure, not aliasing), then a converging ±1 walk, out to ~±8 px — and any shifted winner faces a 1.7× steeper roll-off plus an acceptance margin, so misaligned periodic texture cannot blend. Ghost Guard gates the signed patch mean:

w ×= 1 − smoothstep(1.13·g·σ_T, …, |mean_signed(Δpatch)|) σ_mean = √2σ/3 → knee ≈ 2.4σ_mean

Pure-noise differences cancel when averaged with their signs — coherent motion doesn't — so the slow, subtle smear the magnitude gate physically can't see gets its weight cut, for ~0.01 dB on static footage. And the firefly zapper clips single-frame impulses (hot pixels, sensor sparkles) to the 3-frame temporal median — only when three independent tests agree, so thin fast-moving detail survives. It stays deliberately un-scaled by brightness: at 6σ, the gain curve cannot flip a genuine impulse.

Lock what you see (v3.4)

Unlocked, the profile is measured live on every frame — park somewhere and the numbers follow the content under the box. Lock Profile freezes the playhead measurement, hardened by a tracked sweep: the patch is followed across the ±4 neighbouring frames by SAD over sampled luma with a zero-motion prior (featureless patches score every candidate alike, so the prior keeps the box still instead of letting it random-walk along the noise), measured at its tracked position, and a frame votes only if its σ lands within 1.6× of the playhead's and its patch brightness within 0.13. A subject crossing the patch is rejected; the worst case is exactly the measurement you approved. Auto Region places the box for you: every candidate patch is scored by local variance minus the expected noise variance at its brightness, so a dark noisy flat — the best measurement spot on most night footage — is not mistaken for texture.

Spatial filtering that measures its own inheritance

Compression correlates noise across frames, so temporal averaging removes less than √N theory promises. Hush re-measures the residual on the merged image itself — at two scales since v3.2, so blotch that survives the merge cannot hide from a fine-scale estimator — and tunes non-local means to that measurement: filter strength h = 1.15σ_residual for luma, 2.2σ for chroma, patch distances bias-corrected by the 2σ² noise alone contributes. Since v3.3 every chroma estimate is per-channel (blue-channel night noise puts several times more energy on Cb than Cr, and a combined median splits the difference badly for both), and Deep Clean can run a gentle 0.6·h pre-pass whose corrections are hard-clamped to noise size — structure-safe by construction. The Noise EQ's larger bands work on block means with corrections clipped to noise scale, so each band removes only its own size; a sparse luma-guided pass reaches 23 px for chroma blotches and 47 px for luma stains.

Detail Rescue: why cranking it can't blur (v3.1)

out = in − a · clamp(in − NLM(in), −k, +k) k = σ · (2 + 6·(1 − rescue))

Ordinary NR applies the filter's correction in full — push it hard and the correction at an edge is huge, which is exactly what blur is. Detail Rescue clamps the correction to a noise-sized bound: in flat areas the correction is noise-sized, so smoothing passes through untouched, but at an edge or in texture the over-large correction is cut back to k. The worst case any pixel can move is bounded by construction — so the strength sliders (now up to 150, EQ Fine to 300 with real h-widening) become safe to crank. At full crank on the test scene it recovers +3.5 dB of structure.

Measurement hygiene (v3.1)

Exactly-flat samples — letterbox bars, crushed blacks, generated graphics, pixels bit-identical to all eight neighbours — carry no noise evidence, and enough of them collapses every median. All estimators now skip them: on a letterboxed test the measured σ went from collapsed to within 0.3% of truth. The Noise Removed view auto-gains to the measured noise level with a soft knee (0.5 + 0.5·d/(0.5+|d|)), so clean footage still reads and highlights compress instead of clipping into blobs.

Engineering

One reference implementation in C++; Metal, CUDA and OpenCL kernels are line-by-line ports, and a parity harness drives the actual plugin GPU entry point — the one Resolve calls — asserting agreement with the reference to ~10⁻⁶ across 56 configurations, with 146 synthetic-truth checks gating every build (including "Auto Setup must beat stock defaults on every footage class", a slow-drift no-ghosting regression, and v3.4's tracked-sweep suite: the tracker must recover planted shifts, stay put on featureless patches, and reject an occlusion crossing the sampling region). Even the film grain is bit-deterministic (integer-hash value noise). Honest limitations: no motion-vector compensation and no neural net — that's what keeps it fast, predictable, and free.

ResolutionBest quality (NLM r3 · 5 frames · blotch)Locked profileRender Boost (sequential)Faster mode
HD 1920×108010.2 ms/frame — 98 fps8.5 ms — 118 fps11.0 ms — 91 fps6.2 ms — 162 fps
UHD 3840×216039 ms/frame — 26 fps33 ms — 30 fps41 ms — 24 fps22 ms — 45 fps
The other half · free & open-source · v1.0

Meet Speak.

Hush quiets the noise. Speak gives the image its voice. A free film-emulation plugin for the end of your node tree — film-stock character, split toning, subtractive saturation, halation and grain. It works in DaVinci Wide Gamut (some steps in linear light), so Resolve Color Management delivers Rec.709, P3 or HDR from a single look. Where Hush is the safety net, Speak is the signature.

v1.0 · macOS (Metal) · Windows/Linux (OpenCL) · MIT · reads Hush's clean-confidence matte
MEDIACameraRAW / log
NODE 1HushDenoise · cached
NODE 2BalancePrimary
NODE 3GradeCurves · windows
NODE 4SpeakFilm · linear + DWG
OUTPUTRec.709via RCM
◄  working space · DaVinci Wide Gamut / Intermediate  ► RCM output → Rec.709 / P3 / HDR
Stock & density Emulate film, from physics.

Characteristic (H&D) density curves and a subtractive dye model, with every curve plotted live on screen — the scope samples the exact math the pixels use. Original color science, not cloned profiles, and every module gated by measurement: all four compute backends agree to ~2×10⁻⁵.

Subtractive color Saturation that behaves like film.

Subtractive CMY mixing compresses highlight saturation and bends hue toward the dyes — the reason film reads like film — plus split toning by tonal range, done in the right domain.

Light & grain Light behaves like light.

Halation re-exposes the negative before the curve — so a blown highlight blooms white-hot, and a blue neon halates blue, never a pasted red overlay. Grain is density noise per dye layer: loud in the shadows, gone at paper white, boiling every frame — and it reads Hush's clean-confidence matte to land exactly where the denoiser cleaned. Clean early, reconstruct late, in one handoff.

A free rival to paid film tools like Dehancer and Film Look Creator — built from original color science, working in the free version of Resolve, and it shows its work. Read the approach →

Get it

Install in a minute.

  1. macOS: download the .pkg from the latest release and double-click (signed with an Apple developer ID — if Gatekeeper objects, right-click → Open). Windows: download the zip, then double-click Install OpenNR (Windows).bat — or just drag OpenNR.ofx.bundle into C:\Program Files\Common Files\OFX\Plugins.
  2. Restart DaVinci Resolve.
  3. Find it under Effects → OpenFX → Filters → Hush → Hush Open NR. Drag onto an early node on the Color page (or a clip on the Edit page).
  4. Click Auto Setup, then tick a Scope checkbox (Step 1 Measurements, Step 2 Motion Map, Step 3 Noise EQ) to watch it work. For tricky footage, click Auto Region to have the sampling box placed on the flattest patch (or drag the yellow rectangle yourself), then Lock Profile to freeze exactly what you see — the box turns blue with a padlock. Untick scopes before rendering.

Works in the free version of Resolve (third-party OpenFX has been supported there since v15). The Windows build renders via OpenCL (NVIDIA, AMD and Intel GPUs); Linux builds from source.

Colorist tips

Tip 01 · Do this first Denoise at node one, grade with it on.

Put Hush at the very start of your node tree and leave it enabled while you grade — every contrast and saturation move amplifies whatever noise it sits on, so grade on the clean signal. Want smooth playback? Toggle the node off (Cmd/Ctrl-D) while you work, or right-click the node and turn on its node cache so it renders once and plays free.

Tip 02 · Free friends Pair it with Resolve's own free tools.

Hush composes beautifully with what's already in the free version. Classic move: a Lum vs Sat curve on a later node, pulling saturation out of the darkest stops — chroma noise lives in the shadows, and what filtering can't remove, desaturation hides. (Hush's own Shadow Desaturate does this in-plugin; the curve gives you a finer hand.)

Tip 03 · Texture back Re-texture inside, sharpen after.

After the smoothing, Step 4 puts authentic energy back: Luma Texture re-injects the original brightness grain, and Film Grain (with Size and Color) lays down clean, midtone-weighted synthetic stock. Even so, a subtle sharpening node right after Hush is sometimes the last five percent.

The bigger project

Part of control‑z — undo the paywall.

Hush and Speak are two of a growing family of free, open-source tools built on one belief: the best free video editor in the world, DaVinci Resolve, shouldn't leave amateurs stranded at the features a Studio license or an expensive plugin locks away. control‑z is the toolkit that closes those gaps — cleanup, prep, finishing and delivery — so whether you're an aspiring filmmaker, a journalist, an advocate, an artist, or just someone who wants the form of the work to match what it says, the tools are there and they're free.

Hush + Speakdenoise & film emulation — you're here
Community Highlighterlong meetings → highlight reels
Scribelocal transcripts & captions
Clear · Rise · Depthrescue, upscale, depth mattes
+ morean evolving suite
Explore control‑z.org → free forever · local-first · shows its work