Nodes/ComfyUI GOAT Nodes/🐐 Fast Film Grain
ComfyUI Node

🐐 Fast Film Grain

Cheap, real grain instead of a fake overlay

By AconexOfficialΒ·Created 2 years agoΒ·Updated 12 months agoΒ· 11
🐐 Fast Film Grain
  • image
  • IMAGE
β—„strength0.10β–Ί
β—„grainmixed_cudaβ–Ί
β—„seed0β–Ί

Most AI images have a "too clean" problem. Skin looks like plastic, shadows look flat, and the whole thing screams "rendered" instead of "photographed." A pass of film grain is one of the cheapest fixes for that - it breaks up the smoothness and gives the eye some texture to read as "real," the same trick photo editing plugins have leaned on for decades. Fast Film Grain is GOAT Nodes' answer to doing that inside ComfyUI without reaching for a whole compositing suite.

The name is honest: it's built to be fast. Instead of one fixed grain algorithm, it gives you six ways to generate the noise, in two flavors - a plain CPU version and a _cuda version of the same method that runs on your GPU instead. gaussian is the simplest: pure random noise, quick and predictable. fft generates noise in frequency space with a low-pass filter, which gives you a softer, more organic grain pattern closer to actual film scan noise instead of pure static. mixed blends the two. The _cuda variants of all three do the identical math, just on the GPU - worth using if you're already GPU-bound in your pipeline and want to skip a CPU round-trip.

Inputs and outputs that matter

  • image - what you're graining.
  • strength (0–1, default 0.1) - how much grain gets mixed in. 0.1 is genuinely subtle; push toward 0.3+ if you want it visible, and treat anything past 0.5 as a stylistic choice rather than a realism one.
  • grain - pick your generation method: gaussian, gaussian_cuda, fft, fft_cuda, mixed, mixed_cuda (defaults to mixed_cuda).
  • seed - same idea as your sampler's seed. Lock it if you want the exact same grain pattern reproduced across runs; randomize it if you don't want every image in a batch to share identical noise.

One output: IMAGE, ready to save or feed into whatever's next in your pipeline - this is a finishing-touch node, so put it near the end, after upscaling and color work, not before.

How to install it

Easiest path is ComfyUI Manager: search "GOAT Nodes" (or "ComfyUI GOAT Nodes"), hit install, restart ComfyUI. Manually, it's the standard drop-in:

cd ComfyUI/custom_nodes
git clone https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes.git

then restart. No models to download and nothing heavy to pull in - this is a pure image-processing node, not something that needs weights.

Common issues & troubleshooting

Pick _cuda only if you actually have CUDA. If you're running ComfyUI on CPU or on a Mac (MPS), the _cuda variants either won't have a GPU to run on or will silently fall back - stick to plain gaussian, fft, or mixed in that case. This isn't a documented gotcha from the pack, just how CUDA-specific code paths behave in general; if you hit an error mentioning CUDA and you know you're not on an Nvidia card, that's your answer.

Grain looks too uniform or "digital." That's usually the gaussian mode being exactly what it says - pure random noise with no structure. If you want something closer to actual analog film grain (which has correlated blob-like clumping, not independent per-pixel noise), try fft or mixed instead; the low-pass filtering in the FFT path is what gives it that softer, clumpier look.

Restart, not reload. Like any newly installed custom node, if it doesn't show up in the node search after cloning, you need a full ComfyUI restart - the browser "refresh" button alone won't re-scan the custom_nodes folder.

The pack's own README is honest that it's still filling in per-node docs for a lot of these - Fast Film Grain is one of the few that already has a real description there, which tells you it's probably one of the more finished, more-used nodes in the set. If you've used WAS Node Suite's film grain node before, this is the same idea done leaner: fewer knobs, but a GPU-accelerated path WAS never had.

Category🐐 GOAT Nodes/Postprocessing

Inputs (4)

NameTypeDefaultDescription
imageIMAGEβ€”
strengthFLOAT0.100–1β€”
grainCOMBOmixed_cuda6 options: gaussian, gaussian_cuda, fft, fft_cuda, mixed, mixed_cuda
seedINT00–1125899906842624β€”

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”