πΎ Blur Pro
Five blurs in one node, and it knows when to cheat for speed
- image
- mask
- image
- mask
Most ComfyUI blur setups are a pile of single-purpose nodes: one for gaussian, one for box, one weird one for median. Blur Pro folds the five blur types you actually use into a single node, switches its UI to show only the controls each mode needs, and - the part that actually matters - applies the blur through an optional mask with a strength blend. If you've ever had to chain a blur behind a mask composite just to blur one region of a face, this collapses that whole detour.
The five modes
- Gaussian - the workhorse. Smooths everything, radius only. Use it to soften skin, prep for frequency separation, or make a background melt away.
- Surface - a bilateral, edge-preserving blur. Smooths flat areas (skin, walls, sky) while keeping edges sharp, via a
thresholdthat says "how different is too different." This is the retouching one, and it's why Blur Pro is a genuinely pro node rather than a gaussian wrapper. - Box - uniform, fast. Great for fast, slightly crunchy softness.
- Median - the noise killer. Excels at salt-and-pepper artifacts and speckle.
- Motion - directional blur driven by
angle(0β360). For speed lines and movement effects.
Switch blur_type and the node exposes only the relevant sliders - pick surface and you get radius + threshold; pick motion and you get radius + angle. No dead controls cluttering the graph.
The inputs that actually matter
- radius (default 5) - the big one. Anything above ~30 triggers a built-in optimization: the image is downscaled, blurred with a proportionally smaller kernel, and upscaled back. Massive speedup on bilateral/median at high radii. Don't be scared of radius 80+.
- mask - blur only where the mask is white;
invert_maskflips that. blur_mask (default off) also blurs the mask itself with the same mode, which gives you a soft feathered falloff instead of a hard mask edge. - strength (default 1.0) - blends the blurred result back with the original, so you can feather a heavy blur down to a whisper without extra nodes.
It returns two outputs: the blurred image, and the processed mask you can reuse downstream. There's also an in-node preview, which is nicer than it sounds when you're dialing in a surface-blur radius on skin.
Where it shines
The killer combo is Blur Pro feeding Frequency Separate in the same pack: gaussian for standard frequency separation, surface blur for edge-aware retouching where you don't want the smooth layer to bleed across features. Both nodes were designed to work together, and the README is explicit that you can use any blur upstream.
Install
Same pack, same routine:
cd ComfyUI/custom_nodes
git clone https://github.com/machinepainting/ComfyUI-MachinePaintingNodes.git
pip install -r requirements.txt
or ComfyUI Manager β search "MachinePaintingNodes" β install β restart. The requirements pull in opencv-python-headless and numpy<3, which is what does the heavy lifting here; rembg is also listed but is only used by the pack's background-removal node.
Gotchas
Mask sizing is handled for you - mismatched mask dimensions get resized to match the image. If your blur "isn't doing anything," check strength first (at 0 you get the original back verbatim) and then confirm the mask isn't inverted. And remember median and surface are iterative-feeling filters: a large radius on them is where the downscale optimization kicks in, so don't judge performance from a single 0.5-radius test run.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| blur_type | COMBO | gaussian | 5 options: gaussian, surface, box, median, motion |
| strengthopt | FLOAT | 1.000β1 | β |
| radiusopt | FLOAT | 5.00.5β100 | β |
| thresholdopt | FLOAT | 301β255 | β |
| angleopt | FLOAT | 00β360 | β |
| maskopt | MASK | β | |
| invert_maskopt | BOOLEAN | false | β |
| blur_maskopt | BOOLEAN | false | β |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | β |
| mask | MASK | β |