Image Perlin Fractal Noise
Smooth, Structured Texture Instead of Static
- image
- mask
- IMAGE
Gaussian noise is static. Perlin noise is weather. That's the entire pitch for Image Perlin Fractal Noise: instead of adding random static to an image, it adds smooth, correlated, band-limited texture - the kind that reads as clouds, smoke, marble, ripples, or terrain, not as TV snow. If your project is about feeling organic rather than looking noisy, this is the node.
It comes from the Skoogeer-Noise pack and does exactly what the name says: builds fractal Perlin noise (Perlin summed over several octaves) and injects it into an image. Use it for subtle atmospheric variation, background texture, or blending a generated texture onto a render. Because it's seeded, the same settings reproduce the same pattern forever - which makes it usable in a loop where consistency across frames matters.
How it works
Perlin noise is generated on a smooth lattice, then layered like a fractal: each octave doubles the frequency (lacunarity) while halving the amplitude (persistence). More octaves means finer detail layered on top of the broad shape. The final normalized field is scaled by the image's standard deviation times strength, so strength means the same thing regardless of what image you feed in. channel_mode controls whether all RGB channels share one pattern (shared, monochrome-ish) or each gets its own (per_channel, more colorful). For 5D video tensors, temporal_mode decides whether the pattern is locked across frames or reseeded per frame.
The inputs that matter
image- the target image.seed- pattern reproducibility.frequency- base lattice frequency; higher = finer detail.octaves- texture richness. 3–5 is a good range; more is slower.strength- overall intensity, relative to image std.channel_mode/temporal_mode- shared vs per-channel, and locked vs animated for video.
Output is the perturbed IMAGE.
Installing it
Ships in Skoogeer-Noise. Manager → search "Skoogeer-Noise", or:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
Restart ComfyUI. Deps are torch, numpy>=1.26, einops, pyyaml>=6.0.3 - no model downloads, no fuss.
Common gotchas
If your result looks like static anyway, your frequency is probably too high - that's where Perlin collapses toward white noise. Keep base frequency low (1–3) for the organic look. And don't expect Perlin to be fast at huge octave counts; each octave is a full resample pass. per_channel mode can surprise you by making colors drift apart across channels - that's not a bug, it's independent patterns per channel, and it's exactly what you want when you want rainbow texture. If you need a different flavor, the pack has the same node built on simplex or Worley bases (see Image Fractal Brownian Motion, which lets you pick).
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image that will be perturbed with fractal Perlin noise. | |
| seed | INT | 00–18446744073709550000 | Seed controlling the procedural noise pattern. |
| frequency | FLOAT | 2.000.01–64 | Base lattice frequency. Higher values produce finer details. |
| octaves | INT | 41–12 | Number of noise layers to accumulate. |
| persistence | FLOAT | 0.500–1 | Amplitude multiplier between octaves. |
| lacunarity | FLOAT | 2.01–6 | Frequency multiplier between octaves. |
| strength | FLOAT | 0.500–5 | Scale of the normalized 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 | — |