Nodes/Tenser Tensor/TT Add Film Grain
ComfyUI Node

TT Add Film Grain

Procedural film grain that survives upscaling

By tenser-tensor·Created 7 months ago·Updated 5 months ago· 0
TT Add Film Grain
  • image
  • IMAGE
seed0
scale0.25
strength0.15
saturation0.20
toe0.000
upscale_mode
antialiasfalse

Film grain is the cheapest trick in the cinematic book: a little organic noise on top of a too-perfect AI render and suddenly it looks like footage instead of a render. TT Add Film Grain does that, but it does it the right way - it doesn't just splatter random noise on your image. It generates a small, blurred, color-noise field, upscales it to your image size, and blends it with shadow-aware math. The result reads as grain, not static.

It's a postproduction node from TenserTensor, and its personality is "cinematic, procedural, and deterministic."

The inputs that matter

  • seed - grain pattern is seeded, so you can reproduce a specific grain. Different seed, different grain; the node calls torch.manual_seed with it.
  • strength (default 0.15) - how much grain. 0.15 is subtle and tasteful; past 1 you're making it the subject of the image.
  • scale (default 0.25) - the grain texture is generated at this fraction of image size and then upscaled. Smaller = finer grain. This is the detail people get wrong: crank scale up and the grain gets chunky, not stronger.
  • saturation (default 0.2) - how colorful the grain is. 0 is monochrome (often the most filmic), higher gives that grainy-video color noise.
  • toe (−0.2 to 0.5, default 0) - controls where grain sits in the tone curve. A positive toe lifts shadows, changing how grain behaves in dark areas. Play with it if grain is eating your blacks.
  • upscale_mode (bilinear/bicubic/lanczos/nearest/area) and antialias - how the grain field is resized. Lanczos is the safe default for quality; nearest gives harsh, digital grain.

The mechanism is worth understanding because it's why this node is good: generate small RGB noise, split into YCbCr, blur the three channels with different kernel sizes (3, 15, 11 - so luminance blurs least and one chroma channel blurs most), recombine, and weight the channels (red double, blue triple) for that classic color-grain look. Then it's upscaled to full size and composited with a screen-blend style that respects your toe. Procedural means no texture files, no model downloads, and it works at any resolution.

Install and caveats

cd ComfyUI/custom_nodes
git clone https://github.com/tenser-tensor/ComfyUI-TenserTensor

or ComfyUI Manager → "TenserTensor" → install → restart. Deps: gguf and kornia - kornia does the blurring and color math, so if this node errors with a missing-module message, that's the package to check.

Where people get burned: applying grain before upscaling, then upscaling - which doubles the grain and makes it look mushy. Grain is a last-step effect: save it for right before the final output. And it's a legacy V1 node, migrated to Deprecated/ after the pack's move to ComfyUI's API V3, with removal planned for a future major release. It works today; if you love this look, keep an eye on the pack's V3 postproduction section for the successor.

CategoryTenserTensor/Postproduction

Inputs (8)

NameTypeDefaultDescription
imageIMAGE
seedINT00–18446744073709550000
scaleFLOAT0.250.25–2
strengthFLOAT0.150–10
saturationFLOAT0.200–2
toeFLOAT0.000-0.2–0.5
upscale_modeCOMBO5 options: bilinear, bicubic, lanczos, nearest, area
antialiasBOOLEANfalse

Outputs (1)

NameTypeDescription
IMAGEIMAGE