ComfyUI Node

OCSNoise PerlinAdvanced

The same Perlin idea, with 40 knobs on it

By blepping·Created 2 years ago·Updated 2 months ago· 30
OCSNoise PerlinAdvanced
  • ocs_noise_opt
  • OCS_NOISE
factor1.000
rescale0.000
depth16
detail_level0.00
octaves2
persistence1.0
lacunarity_height2
lacunarity_width2
lacunarity_depth2
res_height1
res_width1
res_depth1
break_pattern1.00
initial_depth0
wrap_depth0
max_depth-1
tileable_heightfalse
tileable_widthfalse
tileable_depthfalse
blendlerp
pattern_break_blendlerp
depth_over_channelsfalse
pad_height0
pad_width0
pad_depth0
initial_amplitude1.00
initial_frequency_height1.00
initial_frequency_width1.00
initial_frequency_depth1.00
normalize
devicedefault

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_pattern at 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_channels is 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.
  • normalize and device - 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.

CategoryOveryComplicatedSampling/noise

Inputs (32)

NameTypeDefaultDescription
factorFLOAT1.000-100–100Scaling factor for the generated noise of this type.
rescaleFLOAT0.0000–100When 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.
depthINT16When non-zero, 3D perlin noise will be generated.
detail_levelFLOAT0.00-10000–10000Controls the detail level of the noise when break_pattern is non-zero. No effect when using 100% raw Perlin noise.
octavesINT2Generally controls the detail level of the noise. Each octave involves generating a layer of noise so there is a performance cost to increasing octaves.
persistenceSTRING1.0Controls 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_heightSTRING2Lacunarity 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_widthSTRING2Lacunarity 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_depthSTRING2Lacunarity 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_heightSTRING1Number of periods of noise to generate along an axis. Comma-separated list, multiple items will apply to octaves in sequence.
res_widthSTRING1Number of periods of noise to generate along an axis. Comma-separated list, multiple items will apply to octaves in sequence.
res_depthSTRING1Number 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_patternFLOAT1.00-10000–10000Applies 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_depthINT0First zero-based depth index the noise generator will return. Only has an effect when depth is non-zero.
wrap_depthINT0If 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_depthINT-1Basically 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_heightBOOLEANfalseMakes the specified dimension tileable.
tileable_widthBOOLEANfalseMakes the specified dimension tileable.
tileable_depthBOOLEANfalseMakes the specified dimension tileable. Only has an effect when depth is non-zero.
blendCOMBOlerpBlending 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_blendCOMBOlerpBlending function used to blend pattern broken noise with raw noise.
depth_over_channelsBOOLEANfalseWhen 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_heightINT0Pads the specified dimension by the size. Equal padding will be added on both sides and cropped out after generation.
pad_widthINT0Pads the specified dimension by the size. Equal padding will be added on both sides and cropped out after generation.
pad_depthINT0Pads 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_amplitudeFLOAT1.00-10000–10000Controls the amplitude for the first octave.
initial_frequency_heightFLOAT1.00-10000–10000Controls the frequency for the first octave for the this axis.
initial_frequency_widthFLOAT1.00-10000–10000Controls the frequency for the first octave for the this axis.
initial_frequency_depthFLOAT1.00-10000–10000Controls the frequency for the first octave for the this axis.
normalizeCOMBOControls whether the output noise is normalized after generation.
deviceCOMBOdefaultControls 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_optoptOCS_NOISE,SONAR_CUSTOM_NOISEOptional input for more custom noise items. The following input types are supported: OCS_NOISE, SONAR_CUSTOM_NOISE

Outputs (1)

NameTypeDescription
OCS_NOISEOCS_NOISEA custom noise chain.