Nodes/RES4LYF/Film Grain
ComfyUI Node Runs on cloud

Film Grain

Kill the plasticky AI look with real grain

By ClownsharkBatwing·Created 2 years ago·Updated 17 days ago· 1,222
Film Grain
  • image
  • IMAGE
density1.00
intensity1.00
highlights1.00
supersample_factor4
repeats1

One of the fastest ways to make an AI image stop looking like an AI image is to put a little grain back on it. Modern models - Flux especially - render surfaces too clean, too even, that faintly plastic sheen everyone recognizes on sight. Film Grain is a dead-simple post-process node that adds a controllable layer of photographic grain over a finished image, which breaks up those too-smooth gradients and reads to the eye as "shot on a camera" rather than "generated." It's a finishing touch, not a sampler - it runs on pixels after VAE Decode, not on latents.

It ships inside RES4LYF (by ClownsharkBatwing), a pack best known for its flow-matching samplers and schedulers, but which also carries a handful of image utilities like this one. You'll most often see it tacked onto the end of a Flux or SDXL graph, right before the save node.

How it works

It generates a noise/grain pattern and composites it over your image, with knobs for how dense the grain is, how strong it is, and how it behaves in the bright parts of the frame. The supersample_factor is the quality lever most people miss: the grain is rendered at a higher internal resolution and then scaled down, which gives you finer, more film-like grain instead of chunky single-pixel noise. Higher factor, finer grain, a bit more compute.

The inputs and output

  • image - the finished image to grain (post-decode).
  • intensity (default 1.0) - how strong the grain is overall. This is the one you'll ride most. A little goes a long way; full strength looks like a snowstorm.
  • density (default 1.0) - how much of the frame the grain covers. Lower it for sparser, subtler texture.
  • highlights (default 1.0, range up to 255) - controls how grain behaves in bright areas. Real film shows less grain in the highlights; this lets you protect blown-out regions from looking noisy.
  • supersample_factor (default 4, up to 8) - the grain's internal render resolution. 4 is a good balance; push it up for finer grain at a compute cost.
  • repeats (default 1) - accumulate multiple grain passes for a denser, more built-up texture.

The single output is IMAGE - send it to your Save Image (or a further post node). That's the whole node.

Installing it

ComfyUI Manager: search RES4LYF, install, restart. Or from a terminal: cd ComfyUI/custom_nodes && git clone https://github.com/ClownsharkBatwing/RES4LYF, then cd RES4LYF && pip install -r requirements.txt if you run a venv (portable ComfyUI points at its embedded pip). Restart and hard-refresh with F5. No model files - it's an image filter.

Where people get burned

  • Too much grain. The defaults are on the heavy side for a subtle look. Start by dropping intensity well below 1.0 - think seasoning, not a coat of paint. You want it noticeable only when you toggle it off.
  • Wrong place in the graph. This is a pixel-space post-process. Put it after VAE Decode, not before, and after any upscaling - grain applied then upscaled turns to mush.
  • Noisy highlights. If the bright areas look gritty and wrong, that's the highlights control's job; lower it so grain fades where the image is brightest.
  • Node won't load. "Film Grain" here is the RES4LYF one - the pack has to be installed. (Several packs ship a similarly named node; if a workflow expects this specific one, install RES4LYF.)
CategoryRES4LYF/images

Inputs (6)

NameTypeDefaultDescription
imageIMAGE
densityFLOAT1.000.01–1
intensityFLOAT1.000.01–1
highlightsFLOAT1.000.01–255
supersample_factorINT41–8
repeatsINT11–1000

Outputs (1)

NameTypeDescription
IMAGEIMAGE