KoO Frequency Noise Mixer
Sculpt the Noise Before the Sampler Ever Sees It
- latent
- noise
- low_band_preview
- mid_band_preview
- high_band_preview
- combined_preview
- report
Every txt2img run starts from noise, and almost nobody thinks about that noise. It's Gaussian, it's seeded, it's uniform across the frequency spectrum, and it's treated as a fixed act of god. The KoO Frequency Noise Mixer is one of the few nodes that treats it as a material instead - generate it, split it into bands, and dial how much of each you want before the sampler does anything.
Is this a big lever? No. It's a small one, and it's more interesting than it is transformative. But if you've ever wondered why two seeds at the same prompt and settings give one flat image and one grainy one, you're looking at the answer: the low-frequency content of the starting noise shapes composition, and the high-frequency content shapes texture.
The mechanism
It generates a Gaussian base noise tensor at your latent's exact shape, then produces bands by differencing blurs:
- low = heavy Gaussian blur of the base
- mid = light blur minus the heavy blur
- high = base minus the light blur
- very high = base minus a tiny blur
The blur radii scale with frequency_balance (default 1.0), so raising it widens every band's reach - the report prints the actual sigmas (large=8.0, small=2.0, tiny=0.75 at balance 1.0) which is the only way to know what you actually asked for.
Then it sums the four bands weighted by low_frequency, mid_frequency, high_frequency and very_high_frequency, and optionally re-standardizes to unit mean/std. Defaults are 0.05 / 0.3 / 0.6 / 0.0 - i.e. mostly high-frequency, a little mid, almost no low-frequency structure. That default is a meaningful opinion: it gives you a noisy starting point with minimal large-scale bias.
Inputs and outputs
Required: latent (used only for shape and device - the node does not touch its contents), seed, the four band weights, frequency_balance, normalize_output, and batch_seed_mode (fixed / increment / random, which controls whether every image in a batch shares a seed or gets its own).
Outputs: noise is the thing you wire into a sampler's noise input, and that's the whole practical use. Then four diagnostic IMAGE outputs - low_band_preview, mid_band_preview, high_band_preview, combined_preview - plus a report string.
The previews are worth a minute of your time on first use. They're not VAE decodes, they're direct visualizations of the band tensors, and seeing the low band as a soft blobby field next to the high band as fine static makes the whole idea click instantly. Wire one to Preview Image, run once, then delete the preview nodes.
Threading the needle: low_frequency at 0.05 with mid_frequency 0.3 is a fairly neutral starting point. Push low up toward 0.5 and you bias the composition - worth trying if you want seeds to cluster around a similar layout rather than being wildly different. Push very_high_frequency above zero and expect a grainier render at the same step count, which can look like detail and can equally look like noise depending on how much CFG you're running.
Where it fits
This is a Noise Lab node, and the Lab is a set that only makes sense together: the mixer makes noise, the injector perturbs a latent mid-graph, the preview shows you what you got, and the statistics node measures the effect. Using the mixer alone against a KSampler's noise input is fine, but the first thing you'll want is the preview, because otherwise you're tuning four numbers blind.
One caveat grounded in the source: the tensors it builds are 4D [B, C, H, W]. Feed it a 5D still latent from a Krea-style video-shaped pipeline and the blur/reshape paths will complain. Convert with the pack's 4D adapter first if that's your stack.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/kevintronchin-blip/koo-nodes-pack
Restart ComfyUI. No pip install beyond ComfyUI's own torch/numpy/Pillow/aiohttp, no model files - this node is pure tensor math. It lives under KoO/Noise Lab.
Registry and Manager availability at v1.0.3 depend on moderation approval, so if Manager search comes up empty, install from source: extract the ZIP to ComfyUI/custom_nodes/koo-nodes-pack and check __init__.py sits directly inside that folder rather than one level down.
Troubleshooting
Nothing visibly changes. With normalize_output on and the default weights, the result is a legitimate noise tensor close in character to ordinary Gaussian noise. The effect shows up across a batch and at scale, not in a single A/B with one seed. Change the seed, keep everything else identical, and compare ten images rather than two.
Everyone in the batch gets the same noise. batch_seed_mode is fixed. That's the default and it's correct for reproducibility; switch to increment if you want per-image variation.
Previews look like soup. They will. You're looking at raw latent-band values, not an image. The report's tensor stats line is the more precise tool.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| low_frequency | FLOAT | 0.050–2 | — |
| mid_frequency | FLOAT | 0.300–2 | — |
| high_frequency | FLOAT | 0.600–2 | — |
| very_high_frequency | FLOAT | 0.000–2 | — |
| frequency_balance | FLOAT | 1.000.1–4 | — |
| normalize_output | BOOLEAN | true | — |
| batch_seed_mode | COMBO | fixed | 3 options: fixed, increment, random |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| noise | NOISE | — |
| low_band_preview | IMAGE | — |
| mid_band_preview | IMAGE | — |
| high_band_preview | IMAGE | — |
| combined_preview | IMAGE | — |
| report | STRING | — |