Animated Noise (Purz)
Film grain and TV static that actually moves
- image
Static noise is the lazy man's animation - every frame is random, so nothing needs to be coherent. Animated Noise (Purz) is the opposite: it's noise with memory. Each frame evolves from the last via a moving wave, so you get drifting, swirling grain instead of frantic flicker. That's the difference between "TV static" and "organic film grain," and it's the whole reason this node exists.
It's one of the four Purz/Patterns/Animated nodes in ComfyUI-Purz, the pack by PurzBeats (a Comfy Org staffer). If you've used the animated checkerboard or stripes, the wave controls will look familiar - same engine, different base pattern.
How it works
The node generates a base noise texture (random, smooth, or cloudy), then modulates it with an animating wave - a phase that advances with each frame - and finally maps the combined result onto a color ramp between two hex colors. The output is a batch of frames you can play back or feed to a video combiner.
The star of the show is the noise_type dropdown: random (pure static, closest to TV snow), smooth (interpolated low-res noise - soft, organic, default), and cloudy (blobby, like clouds drifting). Pick smooth and a low wave factor and you've got something that reads as subtle film grain; crank the wave and it becomes an evolving liquid texture.
The inputs that matter
- width / height - canvas size (64–4096).
- noise_type -
random,smooth, orcloudy. - intensity - 0.1 to 2, default 1. How strong the noise is before the wave touches it.
- seed - 0–9999. Reproducible: same seed + same settings = same frames.
- frame_count - number of frames in the output batch, up to 300.
- wave_type / wave_direction / wave_shape - the motion engine.
wave_directiondefaults toradialhere, which gives that nice center-out swell;horizontalandverticalare useful for directional drift. - wave_scale - wave frequency; lower = slower, larger-scale motion.
- wave_factor - wave strength, 0–2. This is your "how much does it move" dial - 0 makes it a static noise texture.
- math_operation - how the wave is combined with the noise (
add,multiply,maximum…). - reverse_phase - flips the direction of travel.
- color1 / color2 - hex endpoints for the color ramp. Defaults are black→white; a sepia pair (
#3b2f2f→#e8d5b7) instantly reads as aged film. - color_ramp_type -
linear,ease,b_spline,cardinal,constant.
Output is image, an IMAGE batch with frame_count frames.
Installing it
ComfyUI Manager - search ComfyUI-Purz - or:
cd ComfyUI/custom_nodes/
git clone https://github.com/purzbeats/ComfyUI-Purz.git
cd ComfyUI-Purz
pip install -r requirements.txt
Restart ComfyUI. Requirements are OpenCV, Pillow, torch, numpy; no models, no downloads beyond the pack.
Where people get burned
The big one: random noise is not temporal noise. If you want film grain on a video, random with a high intensity will shimmer distractingly because every frame is independent - that's the "TV static" look, which you sometimes want and usually don't. For grain that settles like real film, use smooth or cloudy and keep intensity under 1. And as with all the animated nodes, watch resolution × frame_count - 300 frames at high res is a real render. Prototype small, then scale up.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 51264–4096 | — |
| height | INT | 51264–4096 | — |
| noise_type | COMBO | smooth | 3 options: random, smooth, cloudy |
| intensity | FLOAT | 1.00.1–2 | — |
| seed | INT | 00–9999 | — |
| frame_count | INT | 301–300 | — |
| wave_type | COMBO | sine | 5 options: sine, cosine, square, triangle, sawtooth |
| wave_scale | FLOAT | 0.100.01–1 | — |
| wave_direction | COMBO | radial | 4 options: horizontal, vertical, diagonal, radial |
| wave_shape | COMBO | sine | 3 options: sine, square, triangle |
| math_operation | COMBO | add | 12 options: add, subtract, multiply, divide, power, minimum, +6 |
| wave_factor | FLOAT | 0.500–2 | — |
| reverse_phase | BOOLEAN | false | — |
| color1 | STRING | #000000 | — |
| color2 | STRING | #FFFFFF | — |
| color_ramp_type | COMBO | linear | 5 options: linear, ease, b_spline, cardinal, constant |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |