Nodes/Skoogeer-Noise/Image Fractal Brownian Motion
ComfyUI Node

Image Fractal Brownian Motion

Pick Your Noise Primitive, Layer It, Done

By ttulttul·Created 9 months ago·Updated 3 months ago· 14
Image Fractal Brownian Motion
  • image
  • mask
  • IMAGE
seed0
base_noisesimplex
frequency2.00
feature_points16
octaves5
persistence0.50
lacunarity2.0
distance_metriceuclidean
jitter0.35
strength0.50
channel_modeshared
temporal_modelocked

If the pack's Perlin node is "smooth organic texture," this is the one-stop shop for choosing your texture flavor. Image Fractal Brownian Motion builds the same kind of layered fractal noise - fBm, for short - but lets you pick the base primitive: simplex, perlin, or worley. Perlin gives you the smooth gradient look, simplex is its slightly cheaper, slightly more organic cousin, and Worley produces the cellular, bubble, crackled patterns you'd recognize from lava lamps and lizard skin. One node, three texture personalities.

fBm itself is the workhorse of procedural graphics: take a base noise, add it at increasing frequencies with decreasing amplitude, and you get detail at every scale that still reads as one coherent material. It's why mountains look mountainous and clouds look cloudy instead of either flat or static-y. If you want to inject that into an image - subtle surface variation, a background texture, texture blending - this is the node.

How it works

The octaves parameter is the number of layers stacked on top of each other; lacunarity is how fast the frequency climbs between layers, and persistence is how fast the amplitude shrinks. Worley-specific knobs (feature_points, distance_metric, jitter) only do anything when base_noise = worley, so you can ignore them the rest of the time. The normalized result is scaled by the image's standard deviation times strength, keeping the knob meaningful across different inputs. channel_mode shares one field across channels or reseeds per channel; temporal_mode locks the pattern across video frames or animates it.

The inputs that matter

  • image - target image.
  • base_noise - simplex (default), perlin, or worley.
  • octaves - layer count; 4–6 is the sweet spot.
  • strength - intensity, relative to image std.
  • channel_mode / temporal_mode - per-channel vs shared, and frame-locked vs animated.

Output is the perturbed IMAGE.

Installing it

Part of Skoogeer-Noise. Manager → search "Skoogeer-Noise", or:

cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise

Restart ComfyUI. Deps are the ComfyUI-standard torch, numpy>=1.26, einops, pyyaml>=6.0.3; no model downloads.

Common gotchas

The trap is dialing octaves up in search of detail and wondering why your machine is chugging - every octave is another full-res pass, and the cost adds up fast, especially with Worley (which has to scan feature points). Also, base_noise changes more than the texture: the whole character of the field flips, so tune frequency after you pick a base, not before. And if you go per_channel on an RGB image, each color channel gets an independent pattern - great for rainbow textures, confusing if you wanted monochrome grain and didn't realize why the hue was drifting.

CategoryImage/Noise

Inputs (14)

NameTypeDefaultDescription
imageIMAGEImage to enrich with fractal Brownian motion.
seedINT00–18446744073709550000Seed for the base noise generator.
base_noiseCOMBOsimplexNoise primitive accumulated by the fBm stack.
frequencyFLOAT2.000.01–64Fundamental frequency for simplex/perlin bases (acts as a multiplier for Worley).
feature_pointsINT161–4096Base feature point count (used when base noise is Worley).
octavesINT51–12Number of fBm layers to accumulate.
persistenceFLOAT0.500–1Amplitude multiplier between fBm layers.
lacunarityFLOAT2.01–6Frequency multiplier between fBm layers.
distance_metricCOMBOeuclideanDistance metric used when the base noise is Worley.
jitterFLOAT0.350–1Feature jitter amount for Worley base noise.
strengthFLOAT0.500–5Scale of the normalized fBm field relative to the image's standard deviation.
channel_modeCOMBOsharedShared fBm field per sample or reseeded per channel.
temporal_modeCOMBOlockedlocked reuses the same fBm 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