Nodes/DJZ-Nodes/Film Grain Effect (video)
ComfyUI Node

Film Grain Effect (video)

Film grain, first edition — six moods, one slider

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
Film Grain Effect (video)
  • images
  • IMAGE
presetsubtle
base_intensity0.10
time_scale1.0
noise_scale0.20
seed0

FilmGrainEffect is the first-gen film grain node from DJZ-Nodes, and it does one thing very well: it adds grain to a batch of frames that moves over time instead of sitting there statically. For video finishing - that last 2% that separates "AI clip" from "film clip" - this is the cheaper, simpler ancestor of the pack's V2 grain node. If you don't need to write custom math, this is honestly the one to use.

How it works

Each frame gets a time-varying intensity computed from a preset "expression" where t is the frame number (scaled by time_scale). The intensity is then multiplied by base_intensity, and gaussian noise scaled by noise_scale is added to the pixels. The clever part is in the presets - six hand-tuned time curves:

  • subtle - slow sine swell, the "barely there" default.
  • vintage - a sine plus a decaying burst, grain that flickers down like an old reel.
  • unstable_signal - fast oscillation with a burst component, like a signal dropout.
  • dip - a gaussian dip every ~60 frames; brief darkening, like a splice.
  • ebb - slow tidal rise and fall.
  • flow - the most "alive" one, with layered sines that never quite settle.

So the same base_intensity gives you very different character depending on preset - that's the whole point of the node. Unlike V2, the expressions are hardcoded, not editable. No custom input, and no seed either, so the exact noise pattern differs every run.

The inputs

Five of them: preset, base_intensity (0-1, start at 0.05-0.1), time_scale (0.1-10, speeds the modulation), noise_scale (grain coarseness), and seed. Yes, there's a seed field in the schema, but it seeds the RNG stream, not the whole pattern - the time-varying presets still make each frame's noise differ. Output is a single IMAGE batch at the source resolution.

Installing

Part of the DJZ-Nodes pack from Drift Johnson (MushroomFleet). Standard install:

cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt

Or "DJZ-Nodes" in ComfyUI Manager. Pure numpy under the hood, no extra deps.

Which version to reach for

The V2 sibling adds a custom preset with a real expression editor (sin, cos, exp, normal, uniform). If you want reproducible grain or to write your own temporal curve, use V2. If you want six good defaults and nothing to think about, this one is simpler and the presets are identical. The trap people hit: cranking base_intensity past ~0.2 and calling it "grain" - at that point it's noise you're adding, and you should probably be on unstable_signal with a low intensity instead. Start subtle, apply it after your color grade, and let the time curve do the work.

Categoryimage/effects

Inputs (6)

NameTypeDefaultDescription
imagesIMAGE
presetCOMBOsubtle6 options: subtle, vintage, unstable_signal, dip, ebb, flow
base_intensityFLOAT0.100–1
time_scaleFLOAT1.00.1–10
noise_scaleFLOAT0.200–1
seedINT00–18446744073709550000

Outputs (1)

NameTypeDescription
IMAGEIMAGE