Enhance Detail
Sharpening without the halo, because it isn't unsharp mask
- images
- IMAGE
Most sharpening filters - including the classic unsharp mask most tools use - work by blurring an image with a gaussian and subtracting that blur from the original to isolate "detail," then adding it back boosted. That's simple and it's also why aggressive sharpening gives you visible halos around edges: gaussian blur doesn't know where the edges are, so it blurs right across them. Enhance Detail uses a guided filter instead - an edge-aware smoothing operator that respects boundaries in the image while separating it into a smooth base and a detail layer - so you can push the detail boost harder before it starts looking artificial.
The author's own framing says it plainly: it increases or decreases detail, "as opposed to the typical gaussian blur used by most sharpening filters." Same base idea as unsharp mask - split, boost, recombine - with a smarter split.
The four knobs
images(IMAGE) - required.filter_radius(default 2, 1–64) - the guided filter's neighborhood size. Bigger radius pulls in broader-scale contrast as "base," which shifts what counts as "detail" toward finer structure; smaller radius keeps more mid-scale contrast in the base layer.sigma(default 0.1, 0.01–100) - the guided filter's edge sensitivity / regularization. Lower values make the filter more aggressively edge-preserving (sharper distinction between "smooth region" and "edge"); higher values behave more like a plain blur.denoise(default 0.1, 0–10) - smooths the extracted detail layer itself before it gets boosted, so you're not amplifying sensor/generation noise right alongside real detail.detail_mult(default 2) - the actual sharpening amount.1is a no-op (pass-through), above 1 boosts detail, below 1 softens it. This is the one you'll actually touch most often.
One output: IMAGE.
Where to use it
A post-upscale sharpening pass is the obvious one - upscalers often leave images a touch soft, and this recovers crispness without the ringing you'd get from a cheaper sharpen. It's also a reasonable "make it pop" step on generated output generally, and because detail_mult can go below 1, you can use the same node to soften detail (a gentler, edge-aware alternative to a straight blur) when you want to knock down noise without losing structure.
How to install it
ComfyUI Manager: search "ComfyUI-Image-Filters", install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/spacepxl/ComfyUI-Image-Filters
restart ComfyUI. The pack needs opencv-contrib-python; a cv2 import error at startup is almost always a version conflict with another node pack's opencv install, not this pack being broken - the author's install.bat/import_error_install.bat fix that on Windows, and the manual equivalent (uninstall stray opencv variants, install opencv-contrib-python alone) works anywhere else. No models, no meaningful VRAM cost.
Common issues & troubleshooting
Pushing detail_mult past 3-4 makes skin/texture look crunchy or noisy. You're amplifying whatever's in the detail layer, noise included. Raise denoise to compensate before you back off detail_mult - that's the knob specifically meant to keep noise out of what gets boosted.
Nothing visibly changes. detail_mult defaults to 2 which should be visible, so if there's no effect check that filter_radius isn't so large relative to your image that the "detail" layer is nearly empty, or that you haven't accidentally left detail_mult near 1.
Result looks like broad contrast boosted, not fine detail sharpened. That's filter_radius too large - it's pulling coarse, large-scale variation into the "detail" layer instead of fine texture. Bring it down toward the default or lower.
Halos still showing up at high settings. The guided filter reduces halo risk versus a naive unsharp mask, it doesn't eliminate it at extreme settings - if you're pushing detail_mult hard, dial sigma down first to tighten the edge-preservation before backing off the multiplier.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filter_radius | INT | 21–64 | — |
| sigma | FLOAT | 0.100.01–100 | — |
| denoise | FLOAT | 0.100–10 | — |
| detail_mult | FLOAT | 2.00 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |