FilmGrain
Film grain for when the AI polish is too clean
- image
- IMAGE
You know that look. The render comes out of the sampler technically perfect and completely lifeless - smooth as a beauty filter, no texture anywhere. FilmGrain is the fix. It's the node from this pack that people actually talk about, and for good reason: it's the difference between an image that looks generated and one that looks captured. The photorealism essay in our knowledge base says it plainly - adding subtle noise in post is one of the highest-leverage tricks for making images read as real photos, and this node is that trick in a single box.
What it actually does
It generates Perlin noise - four octaves of it, so the grain has that organic, not-repeating structure instead of flat static - scales it by the scale slider, then adds it to your image. A temperature pass and a vignette pass ride along on the same node, so you can warm up a shot and darken the corners in one stop instead of chaining three nodes.
The inputs that matter:
- intensity (0–1, default 0.2) - how much grain. 0.05–0.15 is the "this is a photo" range; above 0.3 you're going full horror movie.
- scale (1–100, default 10) - the size of the noise. Low values give you fine, tight film grain; high values give you chunky organic texture. For a 1024px image you'll mostly live between 5 and 20.
- temperature (−100 to 100) - positive warms the image (boosts reds and greens), negative cools it toward blue. Great for pushing a shot "golden hour" or "cold daylight" after the fact.
- vignette (0–10) - darkens the corners. One honest gotcha: the code clamps the strength to 1 internally, so everything above that does exactly the same thing. Dial it 0.1–0.5 and move on.
Output is a single IMAGE, straight back into whatever you had after the sampler - wire it to Save Image or straight into your next filter.
How to install it
FilmGrain ships in the ComfyUI-post-processing-nodes pack, so you get 22 other nodes free with it.
- ComfyUI Manager: search "post processing nodes" (or the pack title), hit install, restart ComfyUI.
- Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/EllangoK/ComfyUI-post-processing-nodes
Then restart. That's the whole install - there's no requirements.txt and no model download. It only needs torch, numpy, opencv and Pillow, all of which a stock ComfyUI already has. You'll find the node under postprocessing → Effects in the node menu.
Things people trip on
Because the grain has no seed input, it's regenerated fresh every time you run - which is exactly what you want for video (it animates naturally), and usually fine for stills since you can't tell one grain pattern from another at low intensity. The node loops frame-by-frame in numpy on the CPU, so a huge batch adds a noticeable hitch, but a single image is instant. And if the grain looks like sand, you set scale too low or intensity too high. Start subtle - that's the whole trick.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| intensity | FLOAT | 0.200–1 | — |
| scale | FLOAT | 101–100 | — |
| temperature | FLOAT | 0-100–100 | — |
| vignette | FLOAT | 0.000–10 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |