ProPostFilmGrain
Real film grain, not TV static
- image
- IMAGE
AI images have a specific kind of too-clean look - skin like plastic, shadows with no texture, everything just a bit too airbrushed. Grain is one of the cheapest ways to break that up, and it's exactly the trick the photorealism crowd reaches for: adding subtle noise after generation makes an image read as captured instead of generated. ProPostFilmGrain is that trick as a node, and it's the flagship of the ProPost pack for a reason - it does noticeably more than a random-noise-and-blend hack.
What it actually does
Most "film grain" nodes are just noise overlaid at a fixed opacity, and it shows - too uniform, too flat, nothing like actual film stock. This one is a direct port of the Filmgrainer library, which builds grain that behaves like real film: heavier in the shadows or highlights depending on how you weight it, with distinct grain patterns rather than one blob of static. You pick a grain_type - Fine, Fine Simple, Coarse, or Coarser - and the node generates that pattern, tints it by grain_sat, and blends it back into the image weighted by shadows and highs.
The inputs that matter
- grain_type - Fine for something you'd barely notice, Coarser for a visibly gritty, pushed-film look. Start with Fine or Fine Simple; Coarse and Coarser read as a deliberate stylistic choice, not a subtle realism pass.
- grain_power (default 0.7) - overall intensity. This is the one dial to touch first.
- shadows / highs (both default 0.2) - how strongly grain shows up in dark vs. bright areas. Real film grain is more visible in shadows, so leaning
shadowsup andhighsdown is usually the realistic move. - grain_sat (default 0.5) - grain color saturation. Push it toward 0 for classic monochrome grain even on a color image;
gray_scalegoes further and desaturates the whole output. - seed - fixes the grain pattern so it's reproducible.
- scale, sharpen, src_gamma - secondary controls.
scalerenders the grain at a different resolution before compositing back (cheaper, and changes the apparent grain size);sharpenruns extra sharpening passes;src_gammacompensates the input's gamma before grain is applied. Leave these at default until you know you want them.
Single input is image, single output is IMAGE - wire it straight after your VAE decode, before (or after) Vignette and Apply LUT.
Installing it
Easiest path: open ComfyUI Manager, search propost, install, restart. Manually, it's the standard drill:
cd ComfyUI/custom_nodes
git clone https://github.com/digitaljohn/comfyui-propost.git
pip install -r requirements.txt
Restart ComfyUI afterward - a browser refresh alone won't pick up a newly installed node pack.
Where people get tripped up
This node has genuinely good reception in the community - it's one of the more praised post-processing packs out there, with people calling out that it actually looks like grain instead of the generic noise-generator look most alternatives produce. The one real workflow tip worth stealing: if you're running a batch through it, set seed to a fixed value first. A random seed regenerates the grain pattern from scratch on every single image in the batch, which is slower than it needs to be - pin it and you get consistent, faster runs.
The other thing to know going in: grain_power at 0.7 is already a fairly present amount of grain. If your goal is "just enough noise to break up AI smoothness" rather than "visible film stock," drop it down - 0.15–0.3 with shadows bumped slightly is a good starting range before you decide you want more. And if the pack doesn't show up in the node search after a manual install, it's almost always the missing pip install -r requirements.txt step or a partial restart - kill ComfyUI fully rather than just reloading the page.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| gray_scale | BOOLEAN | false | — |
| grain_type | COMBO | 4 options: Fine, Fine Simple, Coarse, Coarser | |
| grain_sat | FLOAT | 0.500–1 | — |
| grain_power | FLOAT | 0.700–1 | — |
| shadows | FLOAT | 0.200–1 | — |
| highs | FLOAT | 0.200–1 | — |
| scale | FLOAT | 1.000–10 | — |
| sharpen | INT | 00–10 | — |
| src_gamma | FLOAT | 1.000–10 | — |
| seed | INT | 11–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |