SonarChannelNoise
Give every latent channel its own personality
- sonar_custom_noise
- SONAR_CUSTOM_NOISE
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,repeatuses the last item for everything after, andzerofills 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.normalizeandfactor- 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| factor | FLOAT | 1.000-10000–10000 | Scaling factor for the generated noise of this type. |
| sonar_custom_noise | SONAR_CUSTOM_NOISE,OCS_NOISE | Custom 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_mode | COMBO | wrap | Controls 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_count | INT | 11–100 | Number of items to select each time noise is generated. |
| normalize | COMBO | default | Controls whether the generated noise is normalized to 1.0 strength. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SONAR_CUSTOM_NOISE | SONAR_CUSTOM_NOISE | A custom noise chain. |