Affine Perlin Noise Options
The organic mask, tuned
- noise_options
Perlin noise is the "organic" pattern in WAS Affine - smooth fractal noise that reads like natural texture instead of static, which is exactly why the README points you at it for landscapes, foliage, and anything with soft variation. Affine Perlin Noise Options is the small node that tunes it, emitting the pattern parameters as a noise_options DICT.
The knobs
- perlin_scale (default 48) - base feature size in pixels. Larger = smoother, wider blobs; smaller = finer detail. This is the one you'll actually touch.
- perlin_octaves (default 4) - how many noise layers are summed. More octaves add multi-frequency detail; 1 is basically a smooth blob field.
- perlin_persistence (default 0.55) - amplitude falloff per octave. Lower = the fine octaves carry less energy = smoother result.
- perlin_lacunarity (default 2.2) - frequency multiplier between octaves. 2.0 is the classic doubling; higher pushes detail finer, faster.
How it fits
Wire the noise_options output into the noise_options input of Latent Affine, any of the affine samplers, or Affine Pattern Noise. These parameters are layered on top of the base options DICT, overriding only the perlin_* keys - so your shared mask tuning (strength, blur, threshold) still applies on top.
The defaults are the author's starting point. Honestly, you can run perlin for a long time touching only perlin_scale: 32 for coarse blobs, 128 for fine detail. The octave/persistence/lacunarity trio is for when you specifically want richer or flatter texture.
Installing
Part of WAS Affine by WASasquatch. ComfyUI Manager → Install Custom Nodes → search "WAS Affine" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was_affine
Restart ComfyUI. ComfyUI 1.0.0+, torch and numpy.
Common issues
The usual gotcha is assuming this node alone does anything - it doesn't. It only builds a DICT; without a wire to an affine node's noise_options, the settings are inert. Also remember all four knobs matter together: cranking octaves without raising lacunarity gives you same-frequency detail stacked on itself, which is a common way to get a muddy mask. If you're using the Super Options node (WASLatentAffineOptions), you already have these same perlin_* inputs there - this node is the clean version for when perlin is your only pattern.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| perlin_scale | FLOAT | 484–1024 | Base feature size in pixels. Larger = smoother patterns. |
| perlin_octaves | INT | 41–8 | Number of noise octaves to sum (multi-frequency detail). |
| perlin_persistence | FLOAT | 0.550.1–1 | Amplitude falloff per octave (lower = less high-frequency energy). |
| perlin_lacunarity | FLOAT | 2.21–4 | Frequency multiplier per octave (2.0 doubles frequency each octave). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| noise_options | DICT | — |