๐ผ> Film Grain
The small imperfection that makes AI output stop looking airbrushed
- image
- image
Adding a bit of noise back into a generated image sounds backwards - you just spent a whole pipeline getting a clean image, why degrade it? But it's one of the most consistently reached-for tricks for photorealism specifically because clean, noise-free output is one of the tells that gives away an AI image. Dedicated "amateur photography" LoRAs bake grain in for exactly this reason; if you're not using one of those, or you want the effect on an image where you can't retrain anything, a simple grain post-process like this node does the same job cheaply, after the fact.
It's a small, single-purpose node: add subtle random noise across the image at a controllable strength and grain size.
How it works
It layers randomized per-pixel noise on top of the image. intensity scales how strong that noise is; std_dev controls the spread/variance of the noise distribution, which in practice changes how coarse or fine the resulting grain looks.
The inputs and outputs that matter
image- the source to add grain to.intensity(default0.01, range 0โ0.1) - how strong the grain is. The range is deliberately narrow and low - even the max value of0.1is meant to stay subtle, not turn the image into visible static. Start near the default and nudge up slowly.std_dev(default1, integer range 1โ5) - controls the noise's grain character. Lower values read as finer, tighter grain; higher values push toward a coarser, chunkier look.
One output: image, the grainy result - typically applied late in a post-processing chain, after color grading and before (or alongside) other film-look effects like YANC's Fog or Lens Distortion if you're stacking a full "shot on film" treatment.
How to install it
Via ComfyUI Manager: search "yanc" or "YANC - Yet Another Node Collection," install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ALatentPlace/ComfyUI_yanc
then restart. No extra dependencies, no downloads.
Common issues & troubleshooting
The effect is barely visible. That's usually intentional at default settings - the point is subtlety, an imperfection you feel more than consciously notice. If you want an obviously gritty, high-ISO look rather than a subtle photographic texture, push intensity toward the top of its range and raise std_dev for coarser grain, and know you're moving outside where the default range is designed to sit.
Grain looks uniform/flat rather than organic. A single Film Grain pass at a fixed setting across the whole image can look more mechanical than real film grain, which varies with exposure and shadow/highlight regions. If that's bothering you, some workflows mask the grain node to apply more strongly in shadows than highlights - this node doesn't have a built-in mask input for that, so it'd need a separate masked-blend step if you want that level of control.
You're chasing "realism" and grain alone isn't getting you there. Grain helps, but it's one piece of a bigger picture - the community's broader finding on photorealism is that naming actual camera/film equipment in the prompt does more heavy lifting than any single post-processing pass. Treat this node as the finishing touch on an already-photographic-leaning generation, not a fix for one that reads as CGI-smooth from the start.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | โ | |
| intensity | FLOAT | 0.010โ0.1 | โ |
| std_dev | INT | 11โ5 | โ |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | โ |