Latent Simplex Noise
Perlin's less-aliased cousin for organic latent drift
- latent
- mask
- LATENT
Simplex noise is what Perlin noise grew up into. Same idea - smooth, lattice-based noise where nearby points are correlated - but built on a simplex grid instead of a square one. That kills the visible axis-aligned "square grid" bias classic Perlin has, produces smoother gradients, and it's cheaper to compute in higher dimensions. For latent perturbation purposes the practical difference is: Perlin tends to read as cloud-like and slightly directional; simplex reads as more purely organic - flowing, marbley, less obviously grid-structured.
You'd reach for this node when you want variation that stays natural. It's the go-to for subtle texture drift on a person's skin or fabric between samples, for organic "flow" perturbations before a second pass, and honestly just for that background sheen of life that flat Gaussian noise can't give you. Because it's smooth, a low-strength simplex bump won't destroy your composition the way random static can - it nudges the image in coherent blobs.
The inputs
Same fractal stack as the Perlin node, which is intentional - you can build either noise from the same mental model:
frequency(default 2) - base lattice frequency. Lower = broader features, higher = finer.octaves(default 4) - stacked layers of the noise; each one finer and fainter than the last.persistence(0.5) andlacunarity(2.0) - amplitude and frequency multipliers between octaves. The defaults are the boring-but-correct values.strength(0.5) - how hard the noise hits, scaled relative to the latent's standard deviation. 0.5 is subtle, 1.0 is noticeable, anything above 2 is deliberate destruction.channel_mode-shareduses one noise field for all channels;per_channelreseeds per channel for more colorful breakup.temporal_mode- this one exists here (unlike the Perlin node) because this node generates 2D noise:lockedreuses one pattern across frames for temporal stability,animatedreseeds each frame. If you're doing video latents and thelockedresult looks frozen, that's the dial.
seed for reproducibility, optional mask to localize, single LATENT output that replaces your latent in the graph.
Installing it
Part of Skoogeer-Noise. ComfyUI Manager → search "Skoogeer-Noise" → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
Restart ComfyUI. No downloads beyond the pack itself; deps are torch, numpy, einops, pyyaml - all already present in a standard ComfyUI install.
How it differs from the Perlin node, and gotchas
If you're choosing between the two, the honest take is that the difference is subtle at the strengths you'll actually use. Simplex is marginally smoother and has that temporal_mode for 5D video latents; Perlin is a shade more "terrain-like" and auto-generates 3D noise for video shapes. Try both at strength 0.5 and pick the one whose artifacts you like. Common failure: cranking strength while leaving octaves at 4+ - you get a fully melted image and blame the node. Drop octaves first, then raise strength. And on Flux.2, wrap any latent noise node with the Unpatchify Flux.2 Latent → Patchify Flux.2 Latent pair or the patchified 128-channel layout will produce blocky artifacts.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | Latent 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 latent'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 latent resolution (bicubic when downscaling). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |