Adaptive Sharpening | akatz-loops
Unsharp Mask, the Honest Way
- image
- IMAGE
Every image comes out of a sampler looking slightly soft - the model renders, the VAE decodes, and fine detail lands a little mushy. AdaptiveSharpening is the pack's answer: a plain, predictable unsharp mask that puts the crispness back without pretending to be AI. One image in, one image out, two knobs. That's the whole node.
And it's worth being blunt about the "adaptive" in the name: this is not adaptive edge-aware sharpening in the fancy anisotropic sense. It's a standard unsharp mask - blur a copy, subtract to isolate high-frequency detail, add that detail back scaled by intensity - applied to each image in the batch. "Sharpening is unsharp masking, and the name is literally the recipe," as the KB's post-processing doc puts it; the only adaptation here is that it processes your batch per-image. Which is fine, because unsharp masking is genuinely the right tool for this job, and the two knobs are the whole craft.
The two knobs that matter
- intensity (default
0.7, range 0–2) - how hard the detail gets added back. Below ~0.5 you'll barely notice it; above ~1.2 you start building halos on hard edges. 0.7 is a sane "crisp without crunchy" starting point. - radius (default
1.1, range 0.1–3) - the size of the blur that defines what counts as "detail." Small radius sharpens fine texture; large radius sharpens edges. The default 1.1 is good for a normal-resolution render; for upscaled images, nudge it up.
The one input that's not a knob is image, which accepts an IMAGE batch - the node loops the batch and returns every frame sharpened, so it slots anywhere a batch flows.
Where it fits
This is post-processing, the "what happens to pixels after the sampler" layer. If your output needs a touch of punch, sharpen here for free and in milliseconds - don't burn a diffusion pass (and its face-rewriting, its seed lottery) doing what a deterministic blur-and-difference does perfectly. If you're upscaling, note the standard advice: don't sharpen before a generative upscale (the model will amplify the halos), and be conservative after. Pair this node with ColorCorrectionAndSharpening if you also want the saturation pass in one stop, or use them standalone to tune each.
Install
Part of Akatz-Loop-Nodes (akatz-ai). Via ComfyUI Manager, search "Akatz-Loop-Nodes"; or:
cd ComfyUI/custom_nodes
git clone https://github.com/akatz-ai/Akatz-Loop-Nodes
Restart ComfyUI afterward. This node does need the pack's one real dependency, opencv-python (for the color/HLS work - sharpening itself is PIL), which Manager installs automatically. No model files, no downloads.
The failure mode to respect is haloing: cranking intensity to 2 on a high-contrast image gives you white fringes along edges, and no amount of "adaptive" anything rescues that. If you want detail back and smooth skin, unsharp is the wrong pass alone - that's what a bilateral/edge-preserving filter is for. But for the common "my render looks soft, make it look like a product shot" case, this node is the cleanest two-knob sharpen in the pack.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| intensity | FLOAT | 0.70–2 | — |
| radius | FLOAT | 1.10.1–3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |