Image Worley Noise
Cracks, bubbles, and reptile skin from one noise function
- image
- mask
- IMAGE
Worley noise is the one in the procedural family that makes borders. Where simplex and Perlin produce smooth blobs, Worley (also called cellular or Voronoi noise) scatters points around and then measures distance to the nearest one - so you get cell walls, cracks, bubbles, stained-glass boundaries, alligator skin, dried mud. If your effect needs seams, this is your node.
In the Skoogeer-Noise pack it sits alongside the simplex, Perlin and fBm generators. It's the most characterful of them and the slowest, because every pixel does a nearest-feature-point search across however many cells you asked for. That's fine on a single image; just know that per_channel mode multiplies the work.
How it works
The node scatters feature_points "seed" points across the image plane and computes, for each pixel, the distance to its nearest point. That distance field is the noise - a smooth gradient inside each cell, with hard boundaries where two cells meet. Then it's run through the same fractal stacking as the other nodes: octaves layers, persistence shrinking amplitude per layer, lacunarity multiplying the feature point count per layer.
The two controls unique to Worley are worth knowing:
- distance_metric -
euclideangives round, organic cells;manhattanandchebyshevproduce diamond and square cell shapes, respectively. This one alone changes the whole texture family. - jitter - how far feature points drift inside their cell. Low jitter = clean, regular grid; high jitter = chaotic, clumped cells. 0.35 is the default and a good middle ground.
Everything else follows the pack's conventions: seed fixes the whole field, strength scales the normalized pattern relative to the image's own standard deviation, channel_mode shared/per_channel controls whether each RGB channel gets its own field (per-channel = color fringing), and temporal_mode locked/animated decides whether video frames share a pattern or reseed each frame. The optional mask limits the injection to masked regions.
Inputs that matter
If you're starting from defaults, the knobs you'll actually turn are feature_points (cell density - fewer points, bigger cells), jitter, and strength. The others are fine where they are. Output is a single IMAGE that feeds a preview, save node, or further processing.
Installing it
It's part of the Skoogeer-Noise pack - install once, get all the noise nodes. ComfyUI Manager: search "Skoogeer-Noise", install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
# restart ComfyUI
Standard deps only (torch, numpy, einops, pyyaml) - no model downloads.
Gotchas
- It's slow. Worley does a neighbor search per pixel, and per-channel mode multiplies that by three. On a big batch expect a progress bar - that's normal, not a hang.
- "I want bubbles but I got cracked mud." Bump
jitterup and raisefeature_points. The distance metric also decides a lot of the look - trymanhattanif cells feel too round. - Fringing in colors.
channel_modeisper_channel. Switch tosharedfor a clean single texture. - Want the same cellular texture in the latent instead?
LatentWorleyNoiseruns before the VAE and stays in sync with the model's working space.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image to perturb with Worley (cellular) noise. | |
| seed | INT | 00–18446744073709550000 | Seed for the feature point distribution. |
| feature_points | INT | 161–4096 | Base number of feature points scattered across the plane. |
| octaves | INT | 31–8 | Number of cellular layers to accumulate. |
| persistence | FLOAT | 0.650–1 | Amplitude multiplier between Worley octaves. |
| lacunarity | FLOAT | 2.01–6 | Multiplier for the feature point count between octaves. |
| distance_metric | COMBO | euclidean | Distance metric used when measuring feature proximity. |
| jitter | FLOAT | 0.350–1 | How far feature points can drift inside each cell. |
| strength | FLOAT | 0.500–5 | Scale of the normalized Worley noise relative to the image's standard deviation. |
| channel_mode | COMBO | shared | Shared noise for all channels or reseeded per channel. |
| temporal_mode | COMBO | locked | locked reuses a single noise 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 | — |