Nodes/S42 CutFlow/🎞 S42 CutFlow Film Grain
ComfyUI Node

🎞 S42 CutFlow Film Grain

The Cheapest Way to Kill the 'AI Look'

By GeekyGhost·Created 6 months ago·Updated 4 months ago· 3
🎞 S42 CutFlow Film Grain
  • clip
  • clip
  • frame_count
  • info
intensity0.15
grain_size1.0
color_modemono
animatedyes
seed42

AI video has a telltale "too clean" quality: perfectly smooth gradients, zero noise, like the footage was rendered in a lab. Real cameras have grain. Film has grain. And the community consensus - backed by a whole thread on why AI video looks fake - is that a subtle grain pass is one of the single cheapest moves for making generated footage read as captured rather than generated. S42CF_FilmGrain is the S42 CutFlow node that does exactly that, procedurally, on every frame.

What it does

It overlays noise onto your clip. That's it - a deterministic pixel operation, no model, no VRAM. But the details matter:

  • intensity - 0.05 is subtle, 0.15 is standard film, 0.5 is heavy ISO noise. For the "make it feel organic" job you want 0.05–0.15. Heavy grain is a look; subtle grain is a fix.
  • grain_size - 1.0 is fine grain, 2–4 gets coarser and more visible. Fine grain reads as film; coarse grain reads as a stylistic choice.
  • color_mode - mono (default) is luminance-only grain, the classic film look. color adds per-channel noise that reads more like digital sensor noise.
  • animated - this is the one that bites people. Set to yes (the default), each frame gets a unique grain pattern, which is what makes video grain look natural. Set it to no and you get the same static grain stamped on every frame - in motion that looks like a dirty overlay, instantly. If your grain looks "stuck," this is the culprit. Leave it on yes for video.
  • seed - the random seed. Because it's seeded, your grain pattern is reproducible, which matters if you're batch-processing a project and want every clip to share the same texture character.

Where it sits in a workflow

Grain is a finishing move. It goes near the end of your chain - after color grade, after sharpening - so the noise you add doesn't get amplified by later processing. A typical S42 CutFlow finishing stack: FrameBlend (kill jitter) → ColorAdjust (grade) → FilmGrain (add texture) → export. And since this pack's whole thesis is that you should be able to finish video inside the node graph instead of exporting to After Effects, this is one of the nodes that earns its keep.

It outputs clip plus frame_count and info like every CutFlow clip node. Same IMAGE-batch I/O as everything else, so it slots between a VHS loader and a video saver with no format gymnastics.

Install

Part of the one-pack S42 CutFlow install. ComfyUI Manager → search "S42 CutFlow" → Install → restart. Or:

cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/S42-CutFlow.git
pip install -r S42-CutFlow/requirements.txt

Restart fully; the console should show [S42 CutFlow] Loaded 53 total nodes. Film Grain needs only numpy/PIL - the only pack-level dependency worth mentioning is OpenCV (opencv-python-headless in the requirements, spelled opencv-python in the README; either clears the "No module named 'cv2'" error). No models to download, no GPU footprint, runs on CPU in milliseconds per frame.

A word to the wise on this pack generally: Geeky Ghost describes S42 CutFlow as a work in progress being refined for LTX Desktop, and the node count (53) includes a lot of expanded experimental stuff. The core filter nodes like this one are the stable, trustworthy part.

CategoryS42 CutFlow/Filters

Inputs (6)

NameTypeDefaultDescription
clipIMAGEVideo clip to add grain to.
intensityFLOAT0.150–1Grain intensity. 0.05 = subtle, 0.15 = standard film, 0.5 = heavy ISO noise.
grain_sizeFLOAT1.00.5–4Grain particle size. 1.0 = fine grain. 2-4 = coarser, more visible grain.
color_modeCOMBOmono'mono' = luminance-only grain (classic film). 'color' = per-channel noise (digital/chromatic).
animatedCOMBOyes'yes' = unique grain pattern per frame (natural). 'no' = static grain (same every frame).
seedINT420–999999Random seed for reproducible grain patterns.

Outputs (3)

NameTypeDescription
clipIMAGE
frame_countINT
infoSTRING