Cinematic Adaptive Sharpening PRO
Sharpening that doesn't destroy the smooth parts
- image
- IMAGE
The problem with every basic sharpen filter is that it's greedy: it amplifies edges AND noise, and it loves to draw ugly white halos (ringing) around every high-contrast boundary. On an AI image that's already prone to over-sharpening and smooth, waxy skin, an unsharp mask can wreck the whole render. Cinematic Adaptive Sharpening PRO is the pack's answer - it sharpens the fine details and local contrast, but measures local contrast first and backs off wherever it's already high, so edges don't ring and smooth areas don't pick up noise. It's named for AMD's CAS (Contrast Adaptive Sharpening) and it's playing the same game: sharpen only where the image can absorb it.
In a post-processing stack this is the detail-recovery node - the one you run after denoising, or before upscaling, to get back the texture that soft passes took away.
How it works
The pipeline is a luminance-isolated, contrast-adaptive unsharp mask:
- Isolate luminance. It converts to a perceptual grayscale (Rec. 601 weights) so sharpening happens on brightness only - which avoids the chroma fringing and color shifts that sharpen-on-RGB causes.
- High-pass. It blurs the luminance and subtracts it, leaving only the high-frequency detail.
- Measure local contrast. It dilates and erodes the luminance (3×3) and takes the difference - a per-pixel measure of how contrasty the neighborhood already is.
- Protect. A protection mask is built as
1 − local_contrast × edge_protection, clipped to 0–1. High-contrast edges get their sharpening scaled toward zero; smooth areas keep nearly full sharpening because there's no contrast to ring. - Add back. The adaptive detail is added uniformly to all three channels, preserving color purity.
The inputs that matter
image- the IMAGE to sharpen.sharpen_strength(default 0.5, 0–2) - the master amount. 0.5 is moderate; 1+ is punchy.edge_protection(default 1.0, 0–3) - how aggressively to suppress sharpening near strong edges. Higher = cleaner edges but less pop; 0 = plain unsharp mask behavior with ringing.
Output: a single IMAGE of the same size.
Installing it
One of 14 nodes in the Post Processing PRO pack. ComfyUI Manager → search "Post Processing PRO", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Guillaume-127/ConfyUI_Post_Processing_PRO
Restart. No requirements file, no model downloads - a few OpenCV operations, fast on CPU.
Where people get tripped up
The main mistake is maxing sharpen_strength and wondering why the image looks crunchy. Adaptive sharpening's whole reason to exist is that you can push it further than a plain sharpen without the usual penalties - but "further" still has a limit, and above ~1.2 the smooth areas start to pick up noise even with the protection mask. Raise edge_protection instead of the strength when edges look haloed. Also: it sharpens the existing detail, it doesn't invent any - if you want more actual texture, that's an upscale step, not this node. In a film-style stack it belongs late, after Film Grain PRO (grain first, then a light sharpen so the grain itself reads crisp), and before final export.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| sharpen_strength | FLOAT | 0.500–2 | — |
| edge_protection | FLOAT | 1.00–3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |