ER Regrain
Film grain that knows where to sit
- images
- images
- grain_layer
- grain_layer_alpha
Film grain is the cheapest single move for killing the "AI look," and the KB's post-processing doc says it plainly: smooth, denoised, grain-free output is one of the tells that an image was generated, and putting grain back is worth more than another quality tag in the prompt. But most grain nodes just sprinkle uniform noise on top of everything - which looks like noise sprinkled on top of everything, especially in shadows where real film grain dies down and in skies where it's barely visible at all.
ER Regrain does grain the way film stocks actually do it. The differentiator is a luminance response control: at 0 you get uniform grain everywhere; dialed toward film-like, the grain follows real stock behavior and concentrates where your eye and the film's density curve put it - strongest in the midtones, quieter in the deep shadows and the bright sky. That's the difference between "I added noise" and "this was shot on film." It's from the ER VFX Nodepack by Héctor Gallego (ER Academy).
The controls
Inputs are images plus a params string; the knobs live on the node face with a live WebGL preview. The short list:
- amount - grain strength.
- grain_size - grain cell size in pixels; bigger reads as faster/higher-ISO stock.
- color_amount - 0 = monochrome grain (classic, and the safest against chroma noise on skin), 1 = full RGB grain.
- response - the film-character control above: uniform → midtone-weighted.
- seed - the pattern.
And the video note that matters: on frame batches the grain is animated per frame, like real film - static grain on video is a dead giveaway of an effect slapped on after the fact. This node rolls a fresh pattern each frame, which is exactly what makes footage look shot rather than filtered.
The layer outputs
Grain is unusual among the ER light passes because it lives around mid-gray, not black: images (grain applied), grain_layer (grain only over mid-gray, for Overlay/Linear Light compositing - and clean enough to feed an edit model directly, no alpha), and grain_layer_alpha (RGBA where alpha = deviation from mid-gray, for normal-blend compositing in ER Combine). That mid-gray framing is deliberate: grain isn't additive light, it's texture, and Overlay is its natural home.
Where it fits
The end of the line, after upscaling - grain applied earlier just gets denoised, upscaled, or blurred away by whatever comes next. Typical final stack: generation → grade/color correct → glow or lens pass → ER Regrain → save. Keep amount modest and response biased toward midtone weighting and it'll sit in the image instead of on top of it.
Installing
ER Regrain is part of the ER VFX Nodepack. ComfyUI Manager → search "ER VFX Nodepack" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/esperandoelrender/ComfyUI-ER-VFX-Nodepack.git
Restart and search "ER" (image/adjust). No extra dependencies or model downloads. If you previously installed the standalone er_regrain pack this grew from, remove that folder first so the node doesn't register twice.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| paramsopt | STRING | {} | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | The image with the grain applied. |
| grain_layer | IMAGE | Grain only over mid gray (RGB): Overlay / Linear Light in a compositor, or feed edit models directly (no alpha). |
| grain_layer_alpha | IMAGE | Grain only with alpha (RGBA, alpha = deviation from mid gray): for normal-blend compositing. Do NOT feed this one to edit models. |