Image Soften
Take the over-crisp edge off a render without wrecking the detail
- image
- image
Iterative generation leaves artifacts - and one of the most common is over-sharpening. Flux render→refine chains, in particular, produce that crunchy, "AI-edges" look where every highlight is a hard line. Image Soften is the node that takes the edge off, and it's smarter about it than a plain blur: it has six methods, from uniform smoothing to edge-targeted softening, plus a negative-strength mode that sharpens with an unsharp mask.
The pitch is in the source: "reduce over-sharpening and harsh detail from iterative generation." If your refined image looks like it was run through a sharpen filter twice, this is the millisecond, deterministic fix from the KB's post-processing doc - no diffusion re-pass, no seed lottery.
The methods, decoded
- wavelet (default) - Haar-wavelet detail attenuation. Reduces high-frequency detail while preserving color and structure. The all-rounder: it softens the noise without melting the image.
- gaussian - uniform blur. Simple, but it blurs everything including edges.
- bilateral - edge-preserving: smooths flat areas, keeps edges. The "de-noise a face but don't smear the eyes" option.
- median - removes speckle/noise, preserves edges. For the salt-and-pepper junk that some generations emit.
- anisotropic - Perona-Malik diffusion: iterative edge-preserving smoothing driven by
iterations(default 8). The slow-cooked option - more iterations, smoother. - edge_blur - Sobel-detects hard edges and blurs only those. This is the one for "crispy" edges specifically:
radiushere acts as the edge-detection threshold (lower = more edges detected), and flat areas stay untouched.
strength runs −1 to 1: positive softens, negative sharpens (unsharp mask), 0 is no change. The surprise people love: one node for both softening and mild sharpening.
The settings
- method - the six above; wavelet is the safe default.
- strength - 0.5 default; negative for sharpening.
- radius - sigma/spatial radius for gaussian/bilateral/median, edge sensitivity for anisotropic, edge threshold for edge_blur. Ignored by wavelet.
- iterations - anisotropic only (1–50).
Where it fits
Straight after a refine/upscale pass, before save - "the last look." Match it against the original with Image Comparer and you'll see what you traded. Start with wavelet at 0.5, and if the goal is just "edges less crunchy," go straight to edge_blur.
Installing
ComfyUI_Eclipse, r-vage's pack. Manager → search ComfyUI_Eclipse, or:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse
Restart; under Eclipse → Image → FX & Color. Standard deps; the pack targets current ComfyUI (frontend 1.51.2+) and its v4.0 cleanup dropped legacy RvTools_v2 nodes (Migration Tool for old saves).
The trap: it passes through unchanged when bypassed (the tooltip says so), but it does not pass through on strength 0 for every method - check that wavelet's ignored-parameter behavior isn't doing more than you expect. And don't stack soften + sharpen; the whole point of the unsharp-mask mode is that you don't need a second node.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image to soften. Passes through on bypass. | |
| method | COMBO | wavelet | gaussian: uniform blur. bilateral: edge-preserving. wavelet: frequency-band attenuation. median: noise removal. anisotropic: Perona-Malik diffusion (smooths flat regions while preserving edges via gradient-based conductance). edge_blur: Sobel-detected hard edges only — smooths burned/crispy edges while leaving flat areas untouched. |
| strength | FLOAT | 0.50-1–1 | Positive = soften, negative = sharpen (unsharp mask). 0 = no change. |
| radius | FLOAT | 1.50.1–10 | Spatial radius/sigma (gaussian, bilateral, median), edge sensitivity (anisotropic), or edge detection threshold (edge_blur — lower = detects more edges). Higher = broader/softer blur. Lower = tighter/subtler effect. Ignored by wavelet method. |
| iterations | INT | 81–50 | Iterations for anisotropic diffusion. More = smoother. Ignored by other methods. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |