Nodes/ComfyUI-sonar/SonarChannelNoise
ComfyUI Node

SonarChannelNoise

Give every latent channel its own personality

By blepping·Created 3 years ago·Updated 8 days ago· 49
SonarChannelNoise
  • sonar_custom_noise
  • SONAR_CUSTOM_NOISE
factor1.000
insufficient_channels_modewrap
mix_count1
normalizedefault

A latent isn't one image - it's a stack of channels, and the model treats them as separate feature planes. SD 1.5 and SDXL latents have 4 channels; Flux and SD3 have 16. Almost every noise tool in the world generates the same noise for all of them. SonarChannelNoise is the exception: it lets you assign a different noise generator to each channel, so channel 0 might get brownian while channel 3 gets gaussian. Since each channel feeds a different part of what the model "sees," this is a surprisingly effective way to change a generation's character without touching the prompt.

The catch is in the node's wiring, and it trips everyone the first time. The sonar_custom_noise input is treated as a list, not a single item, and the list is built by chaining noise nodes through the usual optional inputs - with the item furthest from this node counting as channel 0. So the visual chain order is backwards from what intuition suggests: the noise node nearest to SonarChannelNoise maps to the last channel, the one furthest away maps to channel 0. Take a breath, read the tooltip, wire it once, and it'll click.

The other inputs:

  • insufficient_channels_mode - what happens when you connect fewer noise items than the latent has channels. wrap (default) cycles back to the first item, repeat uses the last item for everything after, and zero fills remaining channels with zeros (the tooltip says generally not recommended - a zero channel means the model gets nothing on that plane).
  • mix_count - how many of the connected items get selected each time noise is generated. At 1 (default) each channel is deterministic from its assigned item; higher values pick a subset per call, which adds variation.
  • normalize and factor - the standard strength controls.

Output is SONAR_CUSTOM_NOISE, consumed wherever custom noise is accepted. Install is the pack's usual one-liner, no model files:

cd ComfyUI/custom_nodes
git clone https://github.com/blepping/ComfyUI-sonar

Where this shines and where it bites: the power is that you can give each channel its own texture; the frustration is that you can't see the channels, so tuning is empirical - change one item, rerun, compare. Start with 4-channel SDXL, two noise types, wrap mode, and see whether a specific channel assignment does something you like before adding complexity. And because channel assignments interact with the sampler, this is definitely a node for ancestral/SDE samplers or the sonar momentum ones - converging samplers won't inject the per-channel noise at all. It's fiddly, it's invisible-to-the-eye work, and for that subset of generations it's the only node in the pack that does what it does.

Categoryadvanced/noise

Inputs (5)

NameTypeDefaultDescription
factorFLOAT1.000-10000–10000Scaling factor for the generated noise of this type.
sonar_custom_noiseSONAR_CUSTOM_NOISE,OCS_NOISECustom noise input for noise items corresponding to each channel. SD1/2x and SDXL use 4 channels, Flux and SD3 use 16. Note: Unlike most other custom noise nodes, this is treated like a list where the noise item furthest from the node corresponds to channel 0. The following input types are supported: SONAR_CUSTOM_NOISE, OCS_NOISE
insufficient_channels_modeCOMBOwrapControls behavior for when there are less noise items connected than channels in the latent. wrap - wraps back to the first noise item, repeat - repeats the last item, zero - fills the channel with zeros (generally not recommended).
mix_countINT11–100Number of items to select each time noise is generated.
normalizeCOMBOdefaultControls whether the generated noise is normalized to 1.0 strength.

Outputs (1)

NameTypeDescription
SONAR_CUSTOM_NOISESONAR_CUSTOM_NOISEA custom noise chain.