Image Color Noise
Grain, on demand, in whatever color you want
- Image
The name is slightly wrong, and it's worth knowing before you wire it up: this node doesn't add noise to an image. It generates a noise image from scratch - a standalone grain texture at whatever size you ask for. If you've ever wanted film grain you can composite over a frame, or a colored-noise texture to use as a conditioning map or a VAE noise experiment, this is the generator.
That's more useful than it sounds. Real film grain is colored noise, not random sparkle - and a generator means you can make a seamless, seedable, reproducible texture without hunting down an asset. ComfyUI's own VAE noise lives in latent space; this one is plain pixels you can preview, blend, or feed anywhere.
How it works
It builds a "power noise" texture: noise whose spectral profile is shaped by frequency and attenuation rather than being uniform static. noise_type picks the color of the noise - grey (single-channel luminance, the classic grain look), white (equal power everywhere, the static you'd rather avoid for film), and the colored families red, pink, green, blue - where the colors are about power distribution across frequencies, not the hue of the pixels. red noise is the heavy, rumbling low-frequency stuff; pink is the familiar 1/f falloff that reads as organic; mix blends the types.
width/height- texture dimensions (64–4096, default 512).frequency(default 0.5) andattenuation(default 0.5) - shape the power spectrum. Higher attenuation means more energy in low frequencies, i.e. chunkier, slower-varying grain.seed- a plain integer, so the same settings always reproduce the same grain. That's the whole reproducibility story in one widget.
The result is normalized to 8-bit, so you get a clean 0–255 texture. Single output: Image.
Using it
The obvious wiring is composite: generate grain at your frame size and blend it with screen (lighten) or soft_light at low opacity for an analog feel. Or use a low-frequency red noise at small size as a smooth, tileable variation map. Because it's seeded, the same grain returns every run - which is what you want for a consistent look, and mildly annoying if you forget to randomize and wonder why every frame has the identical film grain.
Installing it
ComfyUI Manager → search "ComfyUI-UtilsCollection", or:
cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI-UtilsCollection
Restart. Light deps (opencv-python, typing-extensions), no models. Newer-extension-API pack, so keep ComfyUI current.
One honest gotcha: it's a generator, so if you dropped it into a workflow expecting an "add grain to my photo" node with an image input, you'll find there's no image socket at all. Composite the output yourself - this is the ingredient, not the recipe.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 51264–4096 | — |
| height | INT | 51264–4096 | — |
| frequency | FLOAT | 0.500–100 | — |
| attenuation | FLOAT | 0.500–100 | — |
| noise_type | COMBO | 7 options: grey, white, red, pink, green, blue, +1 | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Image | IMAGE | — |