OCSNoise PerlinAdvanced
The same Perlin idea, with 40 knobs on it
- ocs_noise_opt
- OCS_NOISE
OCSNoise PerlinSimple is the friendly version of Perlin noise for samplers. This is the same idea with every dial exposed - separate lacunarity and resolution per axis, tileable dimensions, depth wrapping, padding, channel-aware 3D slicing, device control. If PerlinSimple is "make me some structured noise," PerlinAdvanced is "make me structured noise with this exact frequency in height, that exact frequency in width, and make the depth tile." It's a lot of surface area, but you can ignore 90% of it and only touch the two or three controls that matter to you.
What it is
An OCS_NOISE generator for ancestral/SDE sampling, like its simpler sibling, but with per-axis frequency control and a pile of 3D-specific options. It outputs OCS_NOISE and plugs into the same places: OCS Substeps custom_noise, or via an OCS Param. The ocs_noise_opt input lets you chain multiple noise generators, and factor/rescale control scaling.
The inputs that matter (for most people)
octaves,persistence,break_pattern- identical to PerlinSimple, and the three you'll actually tune.break_patternat 0.9+ unless you want blobs.lacunarity_height/lacunarity_width/lacunarity_depth- where Advanced splits things up. Each axis has its own frequency multiplier between octaves (defaults 2). For simple use, just keep them equal.res_height/res_width/res_depth- periods of noise per axis. Comma-separated per-octave.depth(default 16) - 3D mode.depth_over_channelsis the interesting 3D flag: off means each channel gets its own independent 3D noise pattern; on means depth is multiplied by the channel count and each channel is a slice of one shared pattern.normalizeanddevice-device(default vs GPU) is worth a glance: GPU generation may be slightly faster but gives different results on different GPUs, so if reproducibility matters, keep the default.
The genuinely niche set - wrap_depth, max_depth, initial_depth, tileable_*, pad_*, initial_amplitude, the per-axis initial_frequency_* - are for 3D/tiling experiments and animation-style workflows. Most people will never touch them.
The gotchas
Same shape constraint as PerlinSimple, but stricter: the README notes the relevant dimension including padding must be a multiple of lacunarity ** (octaves - 1) * res. wrap_depth repeats noise, so the author suggests lowering s_noise in the sampler when depth is low or you'll get banding. And blend is a trap - the tooltip admits that settings other than the LERP default "may not work at all or may not actually generate Perlin noise," and extra blend modes only unlock if you install ComfyUI-bleh.
Installing
With the pack: Manager search "Overly Complicated Sampling", or git clone https://github.com/blepping/comfyui_overly_complicated_sampling into ComfyUI/custom_nodes and restart. No models, no mandatory dependencies. Start from PerlinSimple, confirm you like the effect, then graduate to this one when you hit a wall - that's the intended path and it'll save you an afternoon of knob-flipping.
Inputs (32)
| Name | Type | Default | Description |
|---|---|---|---|
| factor | FLOAT | 1.000-100–100 | Scaling factor for the generated noise of this type. |
| rescale | FLOAT | 0.0000–100 | 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. |
| depth | INT | 16 | When non-zero, 3D perlin noise will be generated. |
| detail_level | FLOAT | 0.00-10000–10000 | Controls the detail level of the noise when break_pattern is non-zero. No effect when using 100% raw Perlin noise. |
| octaves | INT | 2 | Generally controls the detail level of the noise. Each octave involves generating a layer of noise so there is a performance cost to increasing octaves. |
| persistence | STRING | 1.0 | Controls how rough the generated noise is. Lower values will result in smoother noise, higher values will look more like Gaussian noise. Comma-separated list, multiple items will apply to octaves in sequence. |
| lacunarity_height | STRING | 2 | Lacunarity controls the frequency multiplier between successive octaves. Only has an effect when octaves is greater than one. Comma-separated list, multiple items will apply to octaves in sequence. |
| lacunarity_width | STRING | 2 | Lacunarity controls the frequency multiplier between successive octaves. Only has an effect when octaves is greater than one. Comma-separated list, multiple items will apply to octaves in sequence. |
| lacunarity_depth | STRING | 2 | Lacunarity controls the frequency multiplier between successive octaves. Only has an effect when depth is non-zero and octaves is greater than one. Comma-separated list, multiple items will apply to octaves in sequence. |
| res_height | STRING | 1 | Number of periods of noise to generate along an axis. Comma-separated list, multiple items will apply to octaves in sequence. |
| res_width | STRING | 1 | Number of periods of noise to generate along an axis. Comma-separated list, multiple items will apply to octaves in sequence. |
| res_depth | STRING | 1 | Number of periods of noise to generate along an axis. Only has an effect when depth is non-zero. Comma-separated list, multiple items will apply to octaves in sequence. |
| break_pattern | FLOAT | 1.00-10000–10000 | Applies a function to break the Perlin pattern, making it more like normal noise. The value is the blend strength, where 1.0 indicates 100% pattern broken noise and 0.5 indicates 50% raw noise and 50% pattern broken noise. Generally should be at least 0.9 unless you want to generate colorful blobs. |
| initial_depth | INT | 0 | First zero-based depth index the noise generator will return. Only has an effect when depth is non-zero. |
| wrap_depth | INT | 0 | If non-zero, instead of generating a new chunk of noise when the last slice is used will instead jump back to the specified zero-based depth index. Only has an effect when depth is non-zero. |
| max_depth | INT | -1 | Basically crops the depth dimension to the specified value (inclusive). Negative values start from the end, the default of -1 does no cropping. Only has an effect when depth is non-zero. |
| tileable_height | BOOLEAN | false | Makes the specified dimension tileable. |
| tileable_width | BOOLEAN | false | Makes the specified dimension tileable. |
| tileable_depth | BOOLEAN | false | Makes the specified dimension tileable. Only has an effect when depth is non-zero. |
| blend | COMBO | lerp | Blending function used when generating Perlin noise. When set to values other than LERP may not work at all or may not actually generate Perlin noise. |
| pattern_break_blend | COMBO | lerp | Blending function used to blend pattern broken noise with raw noise. |
| depth_over_channels | BOOLEAN | false | When disabled, each channel will have its own separate 3D noise pattern. When enabled, depth is multiplied by the number of channels and each channel is a slice of depth. Only has an effect when depth is non-zero. |
| pad_height | INT | 0 | Pads the specified dimension by the size. Equal padding will be added on both sides and cropped out after generation. |
| pad_width | INT | 0 | Pads the specified dimension by the size. Equal padding will be added on both sides and cropped out after generation. |
| pad_depth | INT | 0 | Pads the specified dimension by the size. Equal padding will be added on both sides and cropped out after generation. Only has an effect when depth is non-zero. |
| initial_amplitude | FLOAT | 1.00-10000–10000 | Controls the amplitude for the first octave. |
| initial_frequency_height | FLOAT | 1.00-10000–10000 | Controls the frequency for the first octave for the this axis. |
| initial_frequency_width | FLOAT | 1.00-10000–10000 | Controls the frequency for the first octave for the this axis. |
| initial_frequency_depth | FLOAT | 1.00-10000–10000 | Controls the frequency for the first octave for the this axis. |
| normalize | COMBO | Controls whether the output noise is normalized after generation. | |
| device | COMBO | default | Controls what device is used to generate the noise. GPU noise may be slightly faster but you will get different results on different GPUs. |
| ocs_noise_optopt | OCS_NOISE,SONAR_CUSTOM_NOISE | Optional input for more custom noise items. The following input types are supported: OCS_NOISE, SONAR_CUSTOM_NOISE |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| OCS_NOISE | OCS_NOISE | A custom noise chain. |