SonarScatternetFilteredNoise
Squeeze the low frequencies out of your noise
- sonar_custom_noise_opt
- custom_noise
- SONAR_CUSTOM_NOISE
A scatternet is basically a stack of wavelets - it decomposes your noise into frequency bands, from coarse low-frequency blobs up to fine high-frequency texture. SonarScatternetFilteredNoise lets you reach into that decomposition, grab a specific frequency range, and rebuild noise from just that slice. The author's own example is the killer use case: "take the higher frequency components of a very low-frequency noise type such as Pyramid." Pyramid noise is gorgeous but mushy; scatternet filtering lets you keep only its high-frequency energy and get the interesting structure without the overwhelming low end.
This is the most experimental node in the pack - the changelog literally says "Very experimental, way not work properly" (typo included) when it shipped. It also has hard requirements, so check those before you build a workflow on it.
Requirements first
It needs the pytorch_wavelets package installed in the same Python environment ComfyUI runs in, and it currently only works with 4D latents - images, not video (5D). If you run ComfyUI from a venv or portable build, install into that environment:
/path/to/your/python -m pip install pytorch_wavelets
Without it, the node errors out the moment it tries to filter.
The inputs that matter
custom_noise(optional) - the source noise. Unconnected defaults to Gaussian.output_offset- the band selector. "The beginning is the low frequency bands, the end is high frequencies." A value below 1 (positive or negative) is treated as a percentage into the dimension; negative values count from the end. This is the input you'll actually tune to pick what frequency slice survives.output_mode(defaultchannels_adjusted) - how the scatternet's reduced output gets restored to full size. The normal scatternet shrinks spatial dimensions 2x per order (4x for second order); the_adjustedmodes generate larger noise to compensate, which is slower but gives you room to work. The author recommendschannels_adjustedand admits the offset math may be wrong for the other modes.scatternet_order(default 1) - number of scatternet layers. Each order multiplies the channel count exponentially; above 3 you're "very likely to die of old age or run out of VRAM or both."0disables filtering quickly.-2uses two stacked normal scatternets instead of the specialized second-order one.per_channel_scatternet- runs the scatternet per channel separately. Can be very slow - SDXL has 4 latent channels, Flux has 16.use_symmetric_filter- slower but possibly higher quality.magbias- the author's own tooltip says "changing it doesn't seem to affect anything, but you can try," which is the most honest thing you'll read all week.factor,normalize_noise,normalize- the standard strength/rebalance controls.
Output is a SONAR_CUSTOM_NOISE feeding a Sonar sampler, SamplerConfigOverride, or NoisyLatentLike.
The realistic take
This node sits at the deep end of the noise toybox. The frequency-band slicing is genuinely powerful - it's the same wavelet thinking that powers RES4LYF's noise approaches and the pack's own SonarWaveletFilteredNoise - but it's slow, fiddly, and 4D-only. If you just want to strip low frequencies from a noise source, try SonarWaveletFilteredNoise first (simpler, same family). Come back to the scatternet when you need fine-grained band selection and have the patience to tune output_offset per source.
Installing
It ships with ComfyUI-sonar. ComfyUI Manager → search "ComfyUI-sonar" → install, or git clone https://github.com/blepping/ComfyUI-sonar into custom_nodes/, restart. Then add pytorch_wavelets as above. No model files.
Inputs (13)
| 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. |
| padding_mode | STRING | symmetric | This is just passed to the pytorch_wavelets scatternet constructor. Valid padding modes that I know of (second order only supports symmetric and zero): symmetric, reflect, zero, periodization, constant, replicate, periodic |
| use_symmetric_filter | BOOLEAN | false | Slower, but possibly higher quality. |
| magbias | FLOAT | 0.010-1000–1000 | Magnitude bias. Changing it doesn't seem to affect anything, but you can try. |
| output_offset | FLOAT | 0.000-100000–100000 | Controls where the output starts. The beginning is the low frequency bands, the end is high frequencies. If less than 1 (positive or negative) it will be treated as a percentage into the dimension. Negative values count from the end. |
| output_mode | COMBO | channels_adjusted | The normal scatternet reduces the spatial dimensions 2x, the second order one 4x. The adjusted modes will generate larger noise (in the spatial dimensions) to compensate, this is slower but gives you a lot more room to work with. The scaled modes will just scale the noise to compensate (likely doesn't work well). Modes that start with channels will index along the channel dimension, otherwise the indexing will be flat (after the batch dimension). Note: I recommend channels_adjusted mode, it's very possible the offset indexing math is wrong for other modes. |
| scatternet_order | INT | 1-3–3 | Each order increases the number of channels exponentially. You can use a primitive node to bypass the limit of 3 here if you're a crazy person, the code will handle any value but you're very likely to die of old age or run out of VRAM or both if you go above 3 (and even that is stretching it). You can set this to 0 to disable scatternet filtering quickly. Negative values are the same as positive ones here with one exception: there's a specialized 2nd order scatternet which will be used by default for order 2, however it may not support the normal parameters (like padding modes). Use -2 here if you just want to stack two normal scatternet layers instead. |
| per_channel_scatternet | BOOLEAN | false | Runs the scatternet on each channel separately. May be very slow. Models like SDXL use 4 channels, models like Flux have 16. Enabling this may help with non-adjusted output modes. |
| normalize_noise | BOOLEAN | false | Controls whether the noise source is normalized before scatternet filtering occurs. |
| normalize | COMBO | default | Controls whether the generated 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: Custom noise input. If unconnected will default to Gaussian noise. 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. |