Nodes/DJZ-Nodes/Video Noise Factory
ComfyUI Node

Video Noise Factory

Procedural animated noise and film grain

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
Video Noise Factory
    • IMAGE
    width512
    height512
    num_frames24
    noise_typeRGB Turbulence
    noise_scale1.0
    octaves4
    persistence0.50
    turbulence0.5
    frequency1.0
    saturation1.0
    grain_presetsubtle
    grain_expression0.08 * normal(0.5, 0.15) * (1 + 0.2 * sin(t/25))
    base_intensity0.10
    time_scale1.0
    grain_scale0.20
    red_balance1.0
    green_balance1.0
    blue_balance1.0
    noise_seed0
    grain_seed0

    Video Noise Factory is a straight-up procedural generator: it synthesizes animated noise and film grain from scratch - no input image, no model. You give it a resolution and a frame count, and it hands back a batch of moving abstract textures. It's for when you need dynamic backgrounds, a noise overlay for a VHS/analog look, abstract looping footage, or just grain to layer over a clean render so it stops looking like a clean render.

    This is the "generation" end of DJZ-Nodes' effects family, and it shares its DNA with the pack's video post tools - only instead of processing your frames, it makes its own.

    How it works

    The node is built on OpenSimplex noise (the smoothed, natural-looking cousin of Perlin noise) plus a per-pixel math layer for grain. There are eight noise_type flavors, and they're distinct algorithms, not just recolors:

    • Plasma - flowing plasma blobs; RGB Turbulence - turbulent distortion per color channel; Prismatic - smooth rainbow transitions; HSV Noise - noise computed in hue/saturation space, so the colors stay rich; Perlin RGB - independent Perlin fields per channel; Polychromatic Cellular - Voronoi-style cell patterns; Rainbow Fractal - fractal layering with rainbow hues; Color Wavelet - wave-like patterns with color phase shifts.

    Shared noise dials (noise_scale, octaves 1–8 for layering detail, persistence for how each octave contributes, turbulence, frequency, saturation) tune whichever type you picked.

    Then there's the film grain layer, which is a separate system on top of the noise. grain_preset offers a few ready-made personalities (subtle, vintage, unstable_signal, dip, ebb, flow) and custom, where grain_expression is a math string you write with t (frame) and normal(...) available - the default is 0.08 * normal(0.5, 0.15) * (1 + 0.2 * sin(t/25)), which reads as "moderate random grain that breathes slowly." base_intensity scales it, time_scale speeds the animation, grain_scale sets the grain's fineness.

    The inputs that matter

    • width/height (64–4096) and num_frames (1–1000) - this is a generator, so you set the canvas and length, not an input image.
    • noise_type - the biggest lever; try all eight, they're wildly different.
    • noise_seed and grain_seed - two independent seeds so you can hold the pattern still while re-rolling the grain, or vice versa.
    • red_balance/green_balance/blue_balance (0–2) - channel tinting, handy for pushing the whole output warm or cool.
    • octaves and persistence - the two knobs that move it from "smooth gradient" to "detailed texture."

    Output is a single IMAGE batch, num_frames long.

    Installing it

    Standard DJZ-Nodes install:

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

    Restart ComfyUI, or find it via ComfyUI Manager by searching "DJZ-Nodes". The opensimplex dependency in requirements.txt is what powers this node.

    Troubleshooting

    • Grain expression does nothing / breaks. It's eval-based with a restricted namespace. Keep it to simple math with t, sin, cos, normal; a bad expression falls back to 1.0 and your grain silently vanishes.
    • Output is too smooth. Bump octaves (6–8) and raise noise_scale; low octaves give you featureless blobs.
    • Grain is invisible. base_intensity at 0.1 is subtle by design - raise it, or drop grain_scale so the grain is finer and denser.
    • "Why does this look like a screensaver?" Because it kind of is one - that's the intended use. If you wanted it for grain overlay, layer it over footage with a blend node rather than using it as the whole frame.

    Good honest tool. The film grain side alone justifies it if you do analog-video finishing, and the generator end is fun to throw at backgrounds when you're out of ideas.

    Categoryimage/generation

    Inputs (20)

    NameTypeDefaultDescription
    widthINT51264–4096
    heightINT51264–4096
    num_framesINT241–1000
    noise_typeCOMBORGB Turbulence8 options: Plasma, RGB Turbulence, Prismatic, HSV Noise, Perlin RGB, Polychromatic Cellular, +2
    noise_scaleFLOAT1.00.1–10
    octavesINT41–8
    persistenceFLOAT0.500–1
    turbulenceFLOAT0.50–2
    frequencyFLOAT1.00.1–5
    saturationFLOAT1.00–2
    grain_presetCOMBOsubtle7 options: custom, subtle, vintage, unstable_signal, dip, ebb, +1
    grain_expressionSTRING0.08 * normal(0.5, 0.15) * (1 + 0.2 * sin(t/25))
    base_intensityFLOAT0.100–1
    time_scaleFLOAT1.00.1–10
    grain_scaleFLOAT0.200–1
    red_balanceFLOAT1.00–2
    green_balanceFLOAT1.00–2
    blue_balanceFLOAT1.00–2
    noise_seedINT00–4294967295
    grain_seedINT00–4294967295

    Outputs (1)

    NameTypeDescription
    IMAGEIMAGE