Nodes/ComfyUI-NKD-Basic-Tools/😺NKD Film Grain
ComfyUI Node

😺NKD Film Grain

Film grain that shimmers on video instead of sitting frozen on top

By Nekodificador·Created about a month ago·Updated 3 days ago· 71
😺NKD Film Grain
  • image
  • mask
  • image
â—„amount25.0â–º
â—„size25.0â–º
â—„roughness50.0â–º
â—„color0â–º
â—„animatetrueâ–º
â—„seed0â–º

Grain is the cheapest realism hack in the book. Real cameras and film have noise; AI output doesn't, and a flat, clean, noiseless frame is a big part of why generated images read as generated. The community has been saying it for years - subtle grain is one of the top replies to "why does my AI video look fake?" - and this node is the ComfyUI-native version of that trick, modeled on the Lightroom / Camera Raw feel rather than a noise-on-top afterthought.

😺NKD Film Grain gives you Amount, Size and Roughness, which is exactly Lightroom's grain vocabulary: amount for how much shows through, size for coarse versus fine, roughness for how irregular the grain is (it blends a fine and a coarse field, like Lightroom does). It's monochrome by default; raise Color for dye-cloud color grain.

The setting that matters most: animate

This is what separates it from every "add noise" node. On a video batch, with animate on (the default), each frame gets fresh grain - so it shimmers like real emulsion instead of sitting frozen on top. Frozen grain on video is a dead giveaway: the texture is pinned to the frame while the image moves under it. The author credits the shimmer behavior to inspiration from FastFilmGrain and radiance, and it's the reason to pick this node over a static-noise composite for anything moving.

  • amount (0–100, default 25) - how much grain shows through.
  • size (0–100, default 25) - bigger = coarser, chunkier grain.
  • roughness (0–100, default 50) - irregularity.
  • color (0–100, default 0) - 0 is clean monochrome; raise it for dye-cloud color grain.
  • seed - same seed, same grain. Lock it if you want a repeatable look.

The optional mask input confines the grain to part of the frame, feathered by its values so soft edges blend in - the standard use is graining the background (where you blurred) and leaving the subject clean, which pairs naturally with 😺NKD Field Blur.

Where it fits

Reach for it at the end of the pipeline, after upscaling - upscalers can smear grain you added earlier, and grain should be the last thing to touch the pixels anyway. It's a deterministic additive-noise pass, which is the whole point: you don't re-roll a generation to add texture you can add in milliseconds. Subtle is the move; cranked grain reads as an effect, and the "AI look" you were escaping just becomes "Instagram filter."

Output is a single image.

Install and gotchas

Install via ComfyUI Manager (search ComfyUI-NKD-Basic-Tools) or:

cd ComfyUI/custom_nodes
git clone https://github.com/Nekodificador/ComfyUI-NKD-Basic-Tools

Restart after. Pack dependencies are onnxruntime and huggingface_hub; neither is needed here. One caution from the post-processing side of the community: grain is the cheapest single move, not the whole recipe - it usually wants motion blur and a bit of chromatic aberration alongside to really sell the "captured, not generated" look.

Category😺NKD Nodes/Basic

Inputs (8)

NameTypeDefaultDescription
imageIMAGE—
amountFLOAT25.00–100How much grain shows through (Lightroom Amount).
sizeFLOAT25.00–100Grain size — bigger = coarser, chunkier grain.
roughnessFLOAT50.00–100Irregularity of the grain: blends a fine and a coarse field, like Lightroom.
colorFLOAT00–1000 = clean monochrome grain. Raise for colored dye-cloud grain.
animateBOOLEANtrueFresh grain on every frame of the batch — real film shimmer. Off = the same static grain on all frames.
seedINT00–18446744073709550000Same seed, same grain.
maskoptMASKOptional — confine the grain to the mask, feathered by its values (soft edges blend in).

Outputs (1)

NameTypeDescription
imageIMAGEThe grained image.