KoO Noise Preview
Finally, Something That Shows You What the Noise Actually Looks Like
- noise
- latent
- mask
- image
- report
There's a specific frustration in tuning anything noise-related: the sampler eats the noise, and you never see it. You adjust a strength, a band weight, a mask, and the only feedback is a finished image that changed in some vague way. KoO Noise Preview is the diagnostic node that ends that. Give it a NOISE object and it hands you an IMAGE of it.
It's a debug instrument, not a picture maker. The node's own report says so: "Preview is a diagnostic visualization of latent/noise tensors, not a VAE decode." Once you internalize that, the output makes sense - you're looking at a signed tensor rendered as a luminance map, not at the pixels the model will eventually produce.
The mechanism
It takes a NOISE input, extracts the underlying tensor, and renders it according to the mode you picked:
noise_only- the noise itself. The default and the one you'll use most.masked_noise- noise multiplied by the mask, so you can see exactly what region your mask lets through.latent_before- requires the optionallatentinput; renders the latent's own tensor.latent_after_estimate- also needslatent; renderslatent + noise·mask, i.e. a prediction of the perturbed latent before you commit to sampling it.difference_heatmap- the noise (masked if you supplied a mask) as a colour heatmap rather than grayscale.
Two rendering knobs do the heavy lifting. channel_mode decides how multi-channel latents collapse into one image: first channel, average (default), maximum (catches outliers the average hides), or rgb_projection (three channels mapped to red/green/blue). And signed_visualization - on by default - maps negative values and positive values to different ends of a ramp rather than clamping them away, which is the difference between seeing structure in the noise and seeing a flat grey field. contrast multiplies the result, and normalize min-max stretches it per batch.
Outputs are image (IMAGE, straight to Preview Image) and report (STRING) with the mode, all settings, and tensor statistics for the previewed source.
Why masked_noise is the killer mode
Here's where it stops being a toy. You're building a texture pass, you've made a frequency mask, you've dialled in a noise injection - and the result is subtly wrong. Is the mask wrong, or the noise? masked_noise tells you in one run: the noise appears exactly where the mask is 1 and vanishes where it's 0, at the same resolution, so any surprise is a mask problem, not a blending problem.
Same story for latent_after_estimate. Before you queue a full sampling run, you can look at what the latent will look like after the injector. If it's already a wash of structure, you know 0.08 was too much without spending the render time.
Reading the output without panicking
Two things look alarming and aren't. First, the image is noisy - obviously, it's noise. Second, it will look nothing like your eventual generation, because you're seeing latent-space values at 1/8 the pixel resolution. What you're judging is distribution: is there structure at the scales I wanted, does the mask respect its boundaries, is one band completely winning.
One caveat from the source: the node needs a NOISE input that actually carries tensor data. Some noise objects are procedural handles rather than materialized tensors; if extract_noise_tensor comes up empty you'll get an explicit Noise Preview requires a NOISE input containing tensor data rather than a mysterious blank image. Chain it after something that materializes noise - the Frequency Noise Mixer, the Latent Noise Injector's injected_noise output, or a core noise node - and it behaves.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/kevintronchin-blip/koo-nodes-pack
Restart ComfyUI. No models, no extra pip packages (the pack's declared deps are torch, numpy, Pillow, aiohttp and all come with ComfyUI), no frontend component - it works under either renderer. Category is KoO/Noise Lab.
Manager and Registry availability at v1.0.3 depend on moderation approval, so if Manager search returns nothing, install from source: extract to ComfyUI/custom_nodes/koo-nodes-pack, __init__.py directly inside that folder.
Practical placement
Put it immediately after the node whose output you're suspicious of, wire one output to Preview Image, and delete it once you're done. It costs one extra run and gives you something no sampler will ever show you - and if you're doing anything with the Noise Lab's other three nodes, it's not optional. Tuning four band weights or a blend mode without seeing the tensor is guessing with extra steps.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| noise | NOISE | — | |
| preview_mode | COMBO | noise_only | 5 options: noise_only, masked_noise, latent_before, latent_after_estimate, difference_heatmap |
| channel_mode | COMBO | average | 4 options: first, average, maximum, rgb_projection |
| contrast | FLOAT | 1.00.1–10 | — |
| normalize | BOOLEAN | true | — |
| signed_visualization | BOOLEAN | true | — |
| latentopt | LATENT | — | |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| report | STRING | — |