Nodes/Skoogeer-Noise/Image Perlin Fractal Noise
ComfyUI Node

Image Perlin Fractal Noise

Smooth, Structured Texture Instead of Static

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

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).

CategoryImage/Noise

Inputs (10)

NameTypeDefaultDescription
imageIMAGEImage that will be perturbed with fractal Perlin noise.
seedINT00–18446744073709550000Seed controlling the procedural noise pattern.
frequencyFLOAT2.000.01–64Base lattice frequency. Higher values produce finer details.
octavesINT41–12Number of noise layers to accumulate.
persistenceFLOAT0.500–1Amplitude multiplier between octaves.
lacunarityFLOAT2.01–6Frequency multiplier between octaves.
strengthFLOAT0.500–5Scale of the normalized 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