SonarAdvancedVoronoiNoise
The abstract-pattern node with a genuinely weird learning curve
- sonar_custom_noise_opt
- custom_noise
- SONAR_CUSTOM_NOISE
Voronoi noise - also called cellular noise - isn't built by filtering white noise like most of the pack. Instead it scatters feature points across the space and computes, for each pixel, the distance to its nearest point(s). The result is a field of organic cells: sharp boundaries, soft gradients toward the centers, and a structure that looks a lot like cracked mud, stained glass, or microscopic tissue depending on how you read it. As diffusion noise it tends to impose that cellular geometry on whatever you generate, which is either exactly what you want (abstract, architectural, organic) or a nightmare you'll want to walk back immediately.
The author's own node description is the most honest framing you'll get: "Voronoi noise is a very weird noise type. The default settings are just borderline usable with SDXL at a 20% ratio with normal Gaussian noise." Translation: don't feed a latent 100% voronoi and expect a coherent picture. The practical pattern is to blend it in - ~20% voronoi, ~80% gaussian, via something like SonarBlendedNoise - or use it at low denoise where it nudges structure without owning the image.
Given the depth here, the ones that matter first:
n_points- how many feature points. More points = more detail, but slower. 2 is the floor.octaves- layers of voronoi noise stacked together;gainandlacunaritycontrol how each octave's amplitude and frequency scale. This is where the "natural" texture comes from.distance_mode/result_mode- the deep end. Distance modes (euclidean, manhattan, chebyshev, minkowski, fuzz…) change how distance is measured; result modes (cellid, diff, ridge, softmin, f1–f4…) change what value each cell reports. Both accept comma-separated lists for per-octave settings,+to average modes, andmode:arg=valuesyntax for arguments. The node description explicitly says the project docs cover these better than the tooltips can.z_initial/z_increment/z_max/z_max_mode- a depth dimension: z increments across calls (so successive sampling steps can traverse a 3D voronoi field), and atz_maxthe field either resets, wraps, or bounces. This is how you get consistent-but-evolving cells across sampling steps.normalize-default/forced/disabled; force it if you're blending with weird modes.factor/rescale- the standard strength pair, plus two optional noise inputs (sonar_custom_noise_optfor chaining,custom_noiseto seed the feature points from another noise type - the tooltip warns it won't play nice with spectral modulation or seed-managing noise like Brownian).
Install is the pack's one-liner, no models:
cd ComfyUI/custom_nodes
git clone https://github.com/blepping/ComfyUI-sonar
The way in: don't start at the defaults and despair. Start at a low blend ratio with gaussian, keep the default euclidean/diff2 read of the cells, and only then start playing with octaves and result modes. And expect iteration - this node has more combinations than you'll exhaust, and "weird" is a feature here, not a bug. If your image comes out looking like stained glass, you've successfully used voronoi noise; whether that's what you wanted is the only question.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| factor | FLOAT | 1.000-10000–10000 | Scaling factor for the generated noise of this type. |
| rescale | FLOAT | 0.0000–10000 | When non-zero, this custom noise item and other custom noise items items connected to it will have their factor scaled to add up to the specified rescale value. When set to 0, rescaling is disabled. |
| n_points | STRING | 256 | Controls the number of features points in the generated noise. Higher generally results in more detail/better results but is slower. May be a comma separated list for each octave (only applicable when octave mode is set to new_features). 2 is the minimum value. |
| distance_mode | STRING | euclidean | Distance modes. You can specify a comma-separated list of items which will be used for each octave. You can specify an average of multiple distance modes by separating the names with +. Some modes can take arguments. Example syntax: modename:argname=value:argname=value All modes support scaling their output with dscale (which defaults to 1). Possible distance modes: angle, angle_sigmoid, angle_tanh, chebyshev, euclidean, fractal_norm, fuzz, manhatten, minkowski, quadratic, weight |
| z_initial | FLOAT | 0.000-10000–10000 | Initial value for z (depth). |
| z_increment | FLOAT | 1.000-10000–10000 | Amount z (depth) is incremented when applicable. |
| z_max | FLOAT | 9999.000-10000–10000 | Maximum difference from the intial value. At that point, z_max_mode will apply. When set to 0, z_increment has no effect and you will get different noise each time you call the noise sampler. |
| z_max_mode | COMBO | reset | Controls what happens when the z_max limit is hit (see tooltip for z_max). Reset will reset the feature points and z to the initial values. Wrap will reset z to the initial value. Bounce will flip the sign on the increment and do an increment. |
| result_mode | STRING | diff2 | Result modes. You can specify a comma-separated list of items which will be used for each octave. You can specify an average of multiple result modes by separating the names with +. Some modes can take arguments. Example syntax: modename:argname=value:argname=value All modes support scaling their output with rscale (which defaults to 1). Possible result modes: cellid, diff, diff2, f, f1, f2, f3, f4, fractal_norm, fuzz, gradient_magnitude, inv_f, inv_f1, inv_f2, inv_f3, inv_f4, median_distance, ridge, softmin |
| octave_mode | COMBO | new_features | Only relevant when generating multiple octaves. Controls whether octaves share a set of feature points or if they are different for each octave (note that this is slower). Modes starting with 'same' will use the same feature points per octave but may transform them. |
| octaves | INT | 31–10000 | Number of octaves of noise to generate. |
| gain | FLOAT | 0.750-10000–10000 | — |
| lacunarity | FLOAT | 2.000-10000–10000 | — |
| initial_amplitude | FLOAT | 1.000-10000–10000 | — |
| initial_scale | FLOAT | 1.000-10000–10000 | — |
| normalize | COMBO | default | Controls whether noise is normalized to 1.0 strength. |
| sonar_custom_noise_optopt | SONAR_CUSTOM_NOISE,OCS_NOISE | Optional input for more custom noise items. The following input types are supported: SONAR_CUSTOM_NOISE, OCS_NOISE | |
| custom_noiseopt | SONAR_CUSTOM_NOISE,OCS_NOISE | Optional input if you want to use some other noise type for the initial feature points. Won't work well with noise types that care about the content of the latent (I think only spectral modulation) or manage their own seed (I believe this only applies to Brownian or if you're using the custom noise parameters node to override seeds/fork the RNG). The following input types are supported: SONAR_CUSTOM_NOISE, OCS_NOISE |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SONAR_CUSTOM_NOISE | SONAR_CUSTOM_NOISE | A custom noise chain. |