Nodes/Orion4D_FXMax/Orion4D · Film Grain APP
ComfyUI Node

Orion4D · Film Grain APP

The fastest way to make AI images look photographed

By orion4d·Created 3 months ago·Updated 3 months ago· 15
Orion4D · Film Grain APP
  • image
  • mask
  • image
  • mask
preset
raw_settings

One of the most reliable tricks in the realism playbook is dead simple: add grain. A hint of noise tells the brain this was captured by optics and film, not rendered by a diffusion model. Orion4D_FXMax_FilmGrain (displayed "Orion4D · Film Grain APP") is the pack's procedural film-simulation node, and it goes well beyond adding random static - it models the actual physics of grain plus a few lens-accident extras.

How it works

Under the hood it generates noise three different ways:

  • Poisson - models photon shot noise, the statistical fluctuation of light hitting a sensor or emulsion. This is the one that looks real rather than like TV static, and it's the default.
  • Perlin - coherent, cloud-like noise for clumpy or organic grain.
  • Gaussian - classic uniform sensor noise.

Then the controls do the photography work: grain size and softness, monochrome vs. chroma (color) grain, adaptive grain with shadow boost and highlight protection (so shadows get grain and blown highlights stay clean), plus optional halation, vignette, chromatic aberration, and lens distortion for the full "shot on film" package. If you've been prompting "Kodak Portra 400" and hoping, this is the deterministic version.

Inputs and outputs

Pack-standard schema:

  • image - the IMAGE tensor.
  • preset - Fine Film Grain, Classic 400 ISO, Push Process Coarse, or Vintage Lens.
  • raw_settings - "Embedded JSON settings used for workflow portability. Managed automatically by the APP."
  • mask (optional) - grain only part of the frame, e.g. keep faces smoother.

Outputs: image and mask. The grain_seed control (inside the APP) matters for video - set it fixed per shot if you want grain to stay consistent across frames.

The honest performance warning

This is the pack's slowest node, full stop. The README is upfront: it generates procedural noise pixel-by-pixel and does bilinear-interpolated lens distortion, all on the CPU with NumPy and PIL. Fine for stills - on a normal-size image it's a moment - but on 4K batches or AnimateDiff video it'll genuinely slow your loop down. For video, either skip grain or apply it to the final composite only, once, not per-frame inside the generation loop.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/orion4d/Orion4D_FXMax.git
# restart ComfyUI

Or ComfyUI Manager → "Orion4D_FXMax". No model downloads, Pillow-only. The Open APP preview with the before/after slider is where you'll actually find the right grain amount - it should read as texture, not as a dirty screen.

Gotchas

Subtle is the whole game. If someone can name the grain, it's too much. Also note the mono/chroma toggle: chroma grain on dark shadows reads as "pushed film," monochrome grain reads as neutral - pick per look, don't default to max. And if an image already has sensor noise baked in, adding more stacks rather than hiding it.

CategoryOrion4D_FXMax/filters

Inputs (4)

NameTypeDefaultDescription
imageIMAGE
presetCOMBO4 options: Fine Film Grain, Classic 400 ISO, Push Process Coarse, Vintage Lens
raw_settingsSTRINGEmbedded JSON settings used for workflow portability. Managed automatically by the APP.
maskoptMASK

Outputs (2)

NameTypeDescription
imageIMAGE
maskMASK