Latent Worley Noise
Cellular noise for cracks, bubbles, and organic tessellation
- latent
- mask
- LATENT
Perlin and simplex give you smooth clouds. Worley gives you cells. Instead of interpolating between lattice gradients, it scatters a set of feature points across the plane and measures the distance to the nearest one at every pixel. The result is that honeycomb / cracked-mud / biological-cell look - think dried earth, frog skin, lizard scales, bubble wrap at the macro level. When you're generating patterns, that's exactly the vocabulary you need for things Perlin can't do: discrete, tessellated structure.
In latent space, that translates to a perturbation that imposes cell boundaries on your image. Low strength, low feature_points gives you subtle organic dappling - the kind of thing that makes skin or stone read as "grown" rather than "rendered." Higher feature_points with a big strength pushes hard toward cracked, mosaic, and split-viz texturing. It's the node in this pack you reach for when the brief says biological or geological and plain noise isn't cutting it.
The inputs that matter
The fBm stack is there (octaves, persistence, lacunarity), but Worley's distinctive controls are what you should learn:
feature_points(default 16) - the number of cell centers scattered across the plane. Fewer = bigger cells, fewer of them. This is your cell-size dial.distance_metric-euclidean(default) for round-ish organic cells,manhattanfor diamond/angular faceting,chebyshevfor square-ish, blocky cells. This is the single most interesting option on the node and people sleep on it.jitter(0.35) - how far each feature point can drift inside its cell. 0 gives perfectly regular honeycomb; 1 gives chaotic, overlapping organic blobs. Higher jitter is usually what you want for "grown" rather than "printed" textures.strength(0.5) - how hard the pattern hits, scaled to the latent's standard deviation.channel_mode-sharedkeeps one cellular field across channels;per_channelreseeds per channel for multicolored breakup.temporal_mode-lockedreuses one pattern across frames,animatedreseeds each frame for 5D video latents.
seed for repeatability, optional mask to localize the injection, one LATENT output.
Installing and using it
It's in the Skoogeer-Noise pack. ComfyUI Manager → search "Skoogeer-Noise", or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
Restart ComfyUI. No models or API keys - the only deps (torch, numpy, einops, pyyaml) ship with ComfyUI already.
Common issues
The big gotchas are the same shape as the other noise nodes: strength too low → "nothing happened," octaves too high → "everything melted." For Worley specifically, most people's first run looks too regular - that's jitter at 0.35 with euclidean giving you textbook honeycomb. Crank jitter toward 0.7–1.0 and flip the distance_metric around if you want something that looks alive instead of machined. One more: the feature_points count is a base that gets multiplied per octave by lacunarity, so a high feature_points with 4+ octaves explodes the cell count fast - drop octaves first if the texture turns to static. And on Flux.2, wrap it with Unpatchify Flux.2 Latent → Patchify Flux.2 Latent like any latent-space op in this pack.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | Latent 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 latent'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 latent resolution (bicubic when downscaling). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |