ComfyUI Node

Film Grain

A Pinch of Noise That Makes It Look Shot, Not Generated

By 5agado·Created 12 months ago·Updated 18 days ago· 1
Film Grain
  • images
  • image
strength0.07
batch_size128

AI video and images have a tell: surfaces that are too clean, gradients that band, a flatness that reads as "generated" even when the composition is perfect. Film grain is the oldest trick in the book for hiding that. Add a little noise and the eye stops seeing the synthetic smoothness and starts seeing "texture." The Film Grain node from the Sagado pack is a one-knob version of that trick, and it's built to run over whole batches of video frames without wrecking your VRAM.

How it works

Mechanically it's simple and you can reason about it: for each batch of frames, it draws Gaussian noise with torch.randn_like (mean 0, standard deviation 1), scales it by strength, adds it to the image, and clamps the result to 0–1. That's it - additive luminance noise, which is exactly what photographic grain looks like at a small scale.

The detail that makes it video-friendly is the batching. It processes the input in chunks of batch_size (default 128) frames at a time, moving each chunk to the GPU, adding noise, and shipping it back to an intermediate device before the next chunk. That means a 600-frame video doesn't require 600 frames of tensor sitting in VRAM at once. Small thing, but it's the difference between this node working on a 12GB card and OOMing.

Inputs and output

  • images (IMAGE) - a batch of frames or a single image; it doesn't care.
  • strength (FLOAT, default 0.07, range 0–1) - the noise level. 0.07 is a subtle, believable film grain. Crank it toward 0.2 and you get heavy, stylized static.
  • batch_size (INT, default 128, step 32) - chunk size for VRAM management.
  • Output: image (IMAGE) - the grained batch, ready for your Save Video or preview.

Install

Standard pack install: ComfyUI Manager → "Sagado Nodes for ComfyUI", or

cd ComfyUI/custom_nodes
git clone https://github.com/5agado/ComfyUI-Sagado-Nodes
pip install -r ComfyUI-Sagado-Nodes/requirements.txt

Restart. Depends on torch (a given) plus the pack's base requirements - nothing extra.

Where people get burned

The classic mistake is strength. Grain is a "barely visible is right" effect - if you can clearly see noise at 0.07, you're looking at a video still at 100% zoom and need to stop. On downscaled or low-bitrate output, visible grain turns into crawling compression artifacts; that's why the default is low and why you should keep it low unless you're going for a deliberate retro-look. And since it's random noise on every frame, you get the natural temporal shimmer of real film - which is what you want. The only thing it won't do is grain that's aware of image content; it's uniform across shadows and highlights, which is fine for most uses and a known simplification if you're a colorist about it.

CategorySagado-Nodes

Inputs (3)

NameTypeDefaultDescription
imagesIMAGE
strengthFLOAT0.070–1
batch_sizeINT128

Outputs (1)

NameTypeDescription
imageIMAGE