- image
- mask
- image
- mask
A blur node is a blur node, right? Not quite. ImageOps Blur bundles four blur types behind one clean interface and - the part that makes it worth a look - a "surface" mode that softens noise while leaving edges alone. That's the one you'll keep coming back to. It comes from the ComfyUI-Majoor-ImageOps pack, and like everything there it processes batches of frames natively and shows a live preview right on the node, no queueing required.
The four blur types
gaussian- the classic.radiussets the blur extent,sigmathe spread. Leave sigma at 0 and it's derived automatically (radius / 3), which is almost always what you want.box- a flat box blur. Fast, cheap, a bit crunchy. Good for big soft feathered regions where you don't need gaussian quality.defocus- modeled on lens defocus rather than a plain kernel. Reach for it when you want that background-blur/out-of-focus feel on a depth pass instead of a generic smudge.surface- the interesting one. It blurs based on colour similarity: pixels within a similar colour range get smoothed, hard edges don't. Think of it as the practical cousin of a bilateral filter. Setsigmato the similarity threshold (0–1; 0 = auto, roughly 0.15) and you can clean up a noisy flat area - grain, compression, banding - without melting the linework. This is the mode I'd point a beginner at first for "make it less crunchy without losing the edges."
A couple of semantics to get straight: radius is in pixels (0–128) and sigma in pixels for gaussian (0–64). And radius of 0 means no blur at all - it disables every type, so a 0 radius is your "off" switch, not a "tiny blur" switch.
Masking
Like most nodes in this pack, it takes an optional mask and an invert_mask toggle, and it returns a mask output as well as the blurred image. So you can blur a specific region - say, a face, a license plate, or a background - and the same node hands you the matte it used, ready to feed into a merge. That's the workflow-friendly detail: the mask comes out aligned with the image, no guesswork about coordinates.
Install
ComfyUI Manager (search "ComfyUI-Majoor-ImageOps"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/MajoorWaldi/ComfyUI-Majoor-ImageOps
Restart, then hard-refresh the browser (Ctrl+F5 / Cmd+Shift+R) - the live preview is frontend JS and a stale cache is the #1 reason the panel doesn't show. No model downloads, no extra pip packages; it's plain torch on top of ComfyUI's own install.
Where it gets fiddly
The defocus and surface modes are the ones people under-use, but their parameters behave differently from gaussian - sigma means something else in each. If you throw the same sigma value across all four modes you'll get confused fast; read the tooltip per mode. For video, remember this pack is batch-first, so a blurred clip just works frame-by-frame - but a heavy radius across a long batch will slow the graph, so keep the radius honest and only blur the frames that need it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| bypass | BOOLEAN | false | — |
| blur_type | COMBO | gaussian | 4 options: gaussian, box, defocus, surface |
| radius | INT | 30–128 | Blur extent in pixels. 0 = no blur (disables all types). |
| sigma | FLOAT | 0.000–64 | gaussian: Gaussian std-dev in pixels (0 = auto, radius/3). surface: colour-similarity threshold 0–1 (0 = auto ≈0.15). box / defocus: unused. |
| invert_mask | BOOLEAN | false | — |
| imageopt | IMAGE,VIDEO | Images/Video input. | |
| maskopt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |