Image Blur
A Gaussian with a decimal radius and an honest off switch
- image
- image
What it is
A whole-image Gaussian blur. Two inputs, one output, no surprises. The pack's author built it to match LayerStyle's LayerFilter: Gaussian Blur V2 behaviour, which is the useful signal here: this is the fiddly-radius blur people go looking for after they find that the stock blur node's integer radius can't do "just a touch softer".
You'd reach for it for the boring, correct reasons the KB's post-processing doc lists: softening before a downscale, building a bloom pass (blur a bright copy, screen it back), producing the reference copy for an unsharp mask, or knocking the digital edge off an over-sharp model output. A Gaussian blurs everything, edges included - if you actually wanted to smooth skin while keeping boundaries, you want a bilateral or guided filter instead, and this isn't one.
How it works
Under the hood it's PIL's ImageFilter.GaussianBlur, applied per channel. That has three consequences worth knowing.
The radius is a float with a 0.01 step, so blur: 1.5 is a real, meaningful value - no round-off to integer pixels. The radius is PIL's Gaussian radius, effectively sigma for our purposes.
It processes frame by frame, channel by channel, converting each channel to 8-bit, blurring, and converting back to float. Channel count is preserved, so it works fine on RGBA. The 8-bit round trip means a single blur is quantized like a PNG - practically invisible at one pass, but if you're stacking five blurs, do one bigger blur instead of five small ones.
And blur: 0 passes the image straight through untouched. That's the polite version of an off switch: the node costs nothing and changes nothing, so you can leave it parked in a chain while you iterate on everything else.
Inputs and outputs
image in, blur set (default 20, range 0–1000, step 0.01), image out. That's the whole node.
Default 20 is a heavy blur - most people start at 1–4 for softening and go up from there. Somewhere past 100 you're not blurring an image any more, you're making a gradient, which is occasionally exactly what you want as a mask-friendly background.
The single output is an IMAGE, so it slots in anywhere: before a Save, before an Image Blend, before a color-match pass that would otherwise fight with the noise, or feeding a mask chain if you're using a blurred luminance as a matte.
Install
ComfyUI Manager → search 1hewNodes (pack title ComfyUI 1hewNodes), or:
cd ComfyUI/custom_nodes
git clone https://github.com/1hew/ComfyUI-1hewNodes
Restart. Heads up: that repository's requirements.txt pulls in ultralytics, rembg, onnxruntime, av, transparent-background and friends, which belong to its detection and video nodes. This particular node needs nothing but Pillow and numpy, so if you're cloning the pack just for image utilities, you can skip the heavy half. The pack is written against the current comfy_api.latest schema - update ComfyUI if the pack refuses to load.
Common issues
It feels slow on big batches. It's a CPU loop; a 40-frame 4K batch is 40 × channels PIL blurs. Blur after the batch gets downsampled, not before, when you can.
The output looks washed rather than blurred. That's a Gaussian at high radius on a high-contrast image - the blur is doing its job and the result is low contrast because you smeared the highlights into the shadows. Either lower the radius or blur a copy and blend it back at partial opacity.
You wanted mask-aware feathering. Different tool. This node has no mask input; mask feathering lives in the mask and matte nodes of the same pack (Mask Stroke, Image BW Matte) and in blending nodes like Image Mask Blend.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| blur | FLOAT | 20.000–1000 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |