Image Simplex Noise
Add noise that looks like water and clouds, not static
- image
- mask
- IMAGE
Plain Gaussian noise is static. Simplex noise is what static looks like if it went to art school - smooth, curving, organic patterns with no grid artifacts and no sharp edges. Image Simplex Noise layers that pattern into an image, which makes it the node you reach for when you want film grain that moves like water, subtle fabric or skin texture, or a gentle "this photo got roughed up by weather" feel instead of a TV screen full of white fuzz.
It's one of a family of procedural noise generators in the Skoogeer-Noise pack (Perlin, Worley, reaction-diffusion, fBm and this one). Simplex is the middle child and the best default: it's cheaper than Worley, smoother than Perlin, and its curves read as "organic" in a way Gaussian noise never will.
How it works
The node builds fractal simplex noise, which is just several layers (octaves) of simplex noise stacked on top of each other. Each octave doubles the frequency (that's lacunarity) and shrinks the amplitude (that's persistence). Low octaves give you broad, slow shapes; high octaves add fine detail on top. Sum them and you get that classic cloud-like, multi-scale texture.
The pattern is normalized, then scaled by strength relative to the image's own standard deviation - so strength means roughly the same thing regardless of how bright or contrasty your input is. 1.0 is a heavy hand, 0.5 is the default and visibly changes things, 0.05 is a whisper.
Inputs that matter
The full list is long but you'll actually touch four things:
- seed - fixes the pattern. Same seed, same texture, every run.
- frequency - higher = finer, tighter pattern; lower = bigger, cloudier blobs.
- octaves - 4 is a good default. Drop to 1 for a single smooth field; push toward 8 for texture that's rich up close.
- strength - how much of the pattern actually lands. Start low.
The rest are quality-of-life. channel_mode shared applies one field to all RGB channels (keeps colors coherent); per_channel reseeds per channel, which is where you get chromatic "channel bleed" glitch vibes. temporal_mode only matters for video/image batches: locked reuses the pattern per frame (stable, won't flicker), animated reseeds each frame for living texture. The optional mask input localizes the noise to masked areas - resize it to image resolution, so use it when you only want the sky or the water textured.
The single IMAGE output wires straight into a preview, save, or the next node in your chain.
Installing it
It ships in the Skoogeer-Noise pack, so install the pack once and you get all of these nodes. Easiest is ComfyUI Manager: search "Skoogeer-Noise", install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
# restart ComfyUI
Dependencies are torch, numpy>=1.26, einops>=0.7, pyyaml>=6.0.3 - all things ComfyUI almost certainly already has. No model downloads, no API keys, nothing to fetch.
Gotchas
- "Nothing happened." If your image looks untouched,
strengthis too low for the pattern you chose, or you've connected a mask that covers the wrong region. Bump strength to 1+ first to confirm the node is alive, then dial back. - Video flickers. You left
temporal_modeonanimated. Switch tolocked. - Don't decode-and-reencode to do this in image space on a latent workflow - there's a
LatentSimplexNoisesibling in the same pack that runs before the VAE, which is cheaper and plays nicer with img2img chains.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image to perturb with simplex noise. | |
| seed | INT | 00–18446744073709550000 | Seed controlling the simplex lattice offsets. |
| frequency | FLOAT | 2.000.01–64 | Base lattice frequency for the simplex grid. |
| octaves | INT | 41–12 | Number of simplex layers to accumulate. |
| persistence | FLOAT | 0.500–1 | Amplitude multiplier applied between octaves. |
| lacunarity | FLOAT | 2.01–6 | Frequency multiplier applied between octaves. |
| strength | FLOAT | 0.500–5 | Scale of the normalized simplex noise relative to the image's standard deviation. |
| channel_mode | COMBO | shared | Reuse a single noise field for all channels or reseed per channel. |
| temporal_mode | COMBO | locked | locked reruns the same pattern per frame; animated reseeds each frame. |
| maskopt | MASK | Optional mask (often image-sized) to limit the noise injection to masked areas. The mask is resized to the image resolution (bicubic when downscaling). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |