Latent Gaussian Blur
The latent soft-focus filter that's gentle on your VRAM
- latent
- mask
- LATENT
Latent Gaussian Blur does exactly what it says: it blurs a latent with a Gaussian kernel, before the VAE ever decodes it. The appeal is that you get soft-focus, smoothing, or denoising effects for a fraction of the cost of blurring a full-resolution image - the latent is 8x smaller per side, so the work is tiny. It also keeps the effect in the model's native space, which plays nicer with img2img chains than decode → blur → reencode.
Where do you actually reach for it? Three spots. Softening a latent before it goes into a second sampling pass (a cheaper cousin of the "hires fix" smoothing). Creating a low-pass baseline that you subtract from the original to get a high-pass band - this node is literally the engine behind the pack's LatentFrequencySplit. And rounding off harsh latent structure when you're experimenting with channel ops and want to calm things down.
How it works
It applies torchvision's Gaussian blur to the latent's samples. sigma is the standard deviation of the kernel - the single dial that matters. 0 is a no-op (the node short-circuits and passes the latent through untouched); 1.0 is a mild softening; 5+ is a smudge. The kernel size is derived from sigma automatically.
The second control, blur_mode, picks between two behaviors:
- Spatial Only (default) - blurs across the image's height/width. Channels stay independent.
- Spatial and Channel - also blurs across the channel dimension, mixing neighboring channels together. That's a much more aggressive "average the features" operation, and it's the one to use when you want channels to bleed into each other rather than just soften spatially.
The node handles both 4D latents (B, C, H, W) and 5D video latents (B, C, T, H, W) - the 5D case is reshaped internally, blurred, and restored, so it works on video workflows without drama. The optional mask limits the blur to masked areas, resized to latent resolution. Output is a single LATENT that keeps the rest of the latent dict intact, ready for a sampler or further ops.
Installing it
It's part of the Skoogeer-Noise pack - install the pack once and all its nodes come along. ComfyUI Manager: search "Skoogeer-Noise", install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/ttulttul/Skoogeer-Noise
# restart ComfyUI
Only standard dependencies (torch, numpy, einops, pyyaml) - no model downloads, nothing heavy.
Gotchas
- "It didn't change anything." Check
sigma. 0 is a deliberate no-op, and below ~0.5 the effect is nearly invisible on a latent. Crank to 2+ to confirm the node is alive. - Flux.2 latents are patchified (128-channel, 2x2). Blurring them directly smears across patch blocks, giving blocky artifacts. The pack README is explicit: wrap latent-space ops in
Unpatchify Flux.2 Latent→ do the blur →Patchify Flux.2 Latent. Spatial and Channelis a big hammer. It doesn't just soften the image; it mixes the feature basis. Expect much more dramatic changes than the same sigma in Spatial Only.- Blur is lossy in a good way. Because the latent is a compressed representation, blurring it removes high-frequency information that the decoder can't invent back - which is the point for denoising, and a trap if you wanted a "soft glow" you could dial back later. There's no un-blur.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| latent | LATENT | Latent tensor to blur. | |
| sigma | FLOAT | 1.00–10 | Standard deviation for the Gaussian kernel. |
| blur_mode | COMBO | Spatial Only | Choose whether to blur across spatial dimensions only or include channels. |
| maskopt | MASK | Optional mask (often image-sized) to limit the blur to masked areas. The mask is resized to latent resolution (bicubic when downscaling). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |