Image Sharpen KJ
Four real sharpening methods on the GPU, pick the right one
- image
- output
Most sharpen nodes give you one algorithm and a strength slider, and if that algorithm produces crunchy halos on your image, tough. ImageSharpenKJ gives you four genuinely different sharpening methods, all running on the GPU, so you can match the tool to the problem instead of fighting one bad default. If you do any upscaling or post-processing, this is a nice one to have in the toolbox.
The four methods aren't just relabeled versions of the same thing - they work on different principles and fail in different ways. Knowing which is which is the whole game.
The four methods, and when each wins
- RCAS - AMD's Robust Contrast-Adaptive Sharpening, lifted from FSR. A single 5-tap filter that adapts to local contrast. It's the "just sharpen it a bit and don't make a mess" option: minimal artifacts, almost no tuning. When you're not sure what you want, start here.
- Adaptive USM - an unsharp mask that modulates by local variance, so it sharpens detail-rich areas harder and leaves flat or noisy regions alone. More controllable than RCAS, and the right pick when a plain unsharp mask is amplifying noise in your skies and skin.
- High-Pass - pulls the high-frequency detail out and blends it back in, the classic "clarity" look photographers reach for. Good for a punchy, textured feel; controls the detail scale by radius.
- Deconvolution - Richardson-Lucy iterative deconvolution. This is the interesting one: instead of just enhancing edges, it tries to recover detail that blur actually destroyed, treating the radius as the blur kernel and iterating toward a sharper estimate. Slower, but it can rescue a genuinely soft source in a way the others can't fake.
That last one is the reason to have this node at all. Most "sharpeners" only enhance edges that are already there; deconvolution attempts real recovery.
The inputs and outputs that matter
The node's static surface is small:
image- the image (or batch) to sharpen.method- a dynamic dropdown; pick one of the four above.
The method widget is a dynamic combo, which is the clever bit: choosing a method surfaces that method's own controls rather than dumping every possible parameter on you at once. The node's docs describe the knobs each method uses - a radius that sets the detail/blur scale for High-Pass and Deconvolution, a threshold for the adaptive unsharp mask, and an iteration count that controls how far Deconvolution converges. So the panel changes depending on what you select, and you only see the sliders that actually apply.
The output is output - the sharpened image, wired into your save, preview, or the next stage of an upscale chain.
How to install it
ComfyUI Manager: search KJNodes for ComfyUI, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-KJNodes
pip install -r ComfyUI-KJNodes/requirements.txt
Restart and it lands under KJNodes/image. No model files needed; the pack keeps its dependencies light.
Common issues & troubleshooting
Halos and crunch. That's over-sharpening, usually from High-Pass or a strong unsharp mask. Ease the radius/strength down, or switch to RCAS, which is built specifically to avoid halos.
Noise got worse. Plain sharpening amplifies noise. Adaptive USM is the method that deliberately backs off in flat/noisy regions - use it instead of High-Pass on noisy sources, and consider a denoise pass before sharpening rather than after.
Deconvolution is slow or looks weird. It's iterative, so it costs more than the others, and if the radius doesn't match the actual blur in the image, more iterations just sharpen toward the wrong answer. Estimate the real blur, set radius to roughly that, and keep iterations modest - pile on too many and it starts ringing.
Best spot in the pipeline. Sharpen last, after upscaling and denoising, at your final resolution. Sharpen early and every later step re-processes your amplified edges into a mess.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| image | COMFY_MATCHTYPE_V3 | — | |
| method | COMBO | 4 options: [object Object], [object Object], [object Object], [object Object] |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| output | COMFY_MATCHTYPE_V3 | — |