Nodes/Skoogeer-Noise/Image Simplex Noise
ComfyUI Node

Image Simplex Noise

Add noise that looks like water and clouds, not static

By ttulttul·Created 9 months ago·Updated 3 months ago· 14
Image Simplex Noise
  • image
  • mask
  • IMAGE
seed0
frequency2.00
octaves4
persistence0.50
lacunarity2.0
strength0.50
channel_modeshared
temporal_modelocked

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, strength is 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_mode on animated. Switch to locked.
  • Don't decode-and-reencode to do this in image space on a latent workflow - there's a LatentSimplexNoise sibling in the same pack that runs before the VAE, which is cheaper and plays nicer with img2img chains.
CategoryImage/Noise

Inputs (10)

NameTypeDefaultDescription
imageIMAGEImage to perturb with simplex noise.
seedINT00–18446744073709550000Seed controlling the simplex lattice offsets.
frequencyFLOAT2.000.01–64Base lattice frequency for the simplex grid.
octavesINT41–12Number of simplex layers to accumulate.
persistenceFLOAT0.500–1Amplitude multiplier applied between octaves.
lacunarityFLOAT2.01–6Frequency multiplier applied between octaves.
strengthFLOAT0.500–5Scale of the normalized simplex noise relative to the image's standard deviation.
channel_modeCOMBOsharedReuse a single noise field for all channels or reseed per channel.
temporal_modeCOMBOlockedlocked reruns the same pattern per frame; animated reseeds each frame.
maskoptMASKOptional 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)

NameTypeDescription
IMAGEIMAGE