SAX Finisher
Color, sharpen, bloom, vignette — the last node before you save
- pipe
- reference_image
- PIPE
- IMAGE
You've sampled, upscaled, detailed - and the image still isn't quite there. It's slightly oversharp, the colors are a hair off from the reference you had in mind, the edges could use a vignette. In stock ComfyUI that's four or five different post-processing packs and a tangle of wires. SAX Finisher bundles the whole finishing pass into one node: color correction, smoothing, sharpening, bloom, vignette, color temperature, and grayscale, all applied in a defined order to the pipe's image, all disabled by default. It's the "place between Detailer and Output" node, and its entire ethos is that every knob defaults to off - you opt into exactly the look you want.
Nothing here runs a model. Per the KB's post-processing doc, these are deterministic pixel operations - gamma curves and blur passes, the kind of thing you should never waste a diffusion pass on. That's the whole point of the node: instant, predictable, repeatable finishing.
The inputs, in application order
The effects run in a fixed pipeline: color_correction → smooth → sharpen → bloom → vignette → color_temp → grayscale.
color_correction(0–1, needsreference_image) - mean/std color matching to a reference image. Connect a reference, set 0.7–1.0, and the output's color distribution moves toward it. This is the KB's "color match" primitive, and it's the honest fix for "the colors are off" - deterministic and instant, versus re-rolling a generation. No reference connected = this step is skipped.smooth(0–1) - high-frequency suppression; kills jaggies and oversharp edges. 0.1–0.3 is the recommended band.sharpen_strength(0–2) +sharpen_sigma- unsharp masking. This is the KB's blur-and-difference recipe: sigma picks what counts as "detail," strength adds it back. Cranking strength produces halos; keep it gentle.bloom(0–1) +bloom_threshold+bloom_radius- bright-area glow. Threshold controls what counts as bright (lower = more glow), radius is the gaussian spread. 0.1–0.3 subtle, 0.5+ dreamy.vignette(0–1) - edge darkening, 0.2–0.4 subtle.color_temp(−1 to +1) - warm positive, cool negative.grayscale(bool) - BT.709 monochrome, deliberately applied last so it overrides all the color work.
The one you'll actually use
For most people it's color_correction. Outpainted regions, upscaled tiles, composited subjects - anything that doesn't match its surroundings gets fixed here in milliseconds, which is exactly the job the KB's post-processing doc says people keep doing by hand. After that, smooth + light sharpen is the standard de-crunch combo for AI output that oversharpened somewhere upstream. Bloom and vignette are taste; grayscale is a scene toggle you'd wire to a Toggle Manager rather than live with as a permanent setting.
Outputs and wiring
It takes a PIPE and returns PIPE (with the adjusted image written back into pipe.images, so downstream nodes see the finished version) and IMAGE for the output node. If everything's off and no reference is connected, the pipe passes through unchanged - so it's safe to leave permanently in the chain. Install with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/so16tm/SAX_Bridge
SAX/Bridge/Enhance → SAX Finisher, between Detailer and Output. The node's design is honest about its limits too: it's a colorist, not a compositor. For true scene-linear VFX work you'd want the OCIO pipeline the KB describes - but for finishing a single image, this is a complete toolkit.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | PIPE_LINE | — | |
| color_correction | FLOAT | 0.000–1 | Matches color distribution to reference image. 0=off, 0.7-1.0=recommended. |
| smooth | FLOAT | 0.000–1 | High-frequency smoothing. Reduces jaggies and harsh edges. 0=off, 0.1-0.3=recommended. |
| sharpen_strength | FLOAT | 0.000–2 | Unsharp Mask sharpening strength. 0=off. |
| sharpen_sigma | FLOAT | 1.00.1–5 | Sharpening kernel width. Smaller values affect finer edges and details. |
| bloom | FLOAT | 0.000–1 | Soft glow from bright areas. 0=off, 0.1-0.3=subtle, 0.5+=dreamy. |
| bloom_threshold | FLOAT | 0.700–1 | Brightness threshold for bloom extraction. Lower=more glow. |
| bloom_radius | FLOAT | 81–32 | Bloom spread radius (gaussian sigma). |
| vignette | FLOAT | 0.000–1 | Edge darkening to draw focus to center. 0=off, 0.2-0.4=subtle. |
| color_temp | FLOAT | 0.00-1–1 | Color temperature shift. Positive=warm, negative=cool. 0=neutral. |
| grayscale | BOOLEAN | false | Convert to grayscale (ITU-R BT.709). Applied last so it overrides color adjustments. |
| reference_imageopt | IMAGE | Reference image for color correction. If not connected, color correction is skipped. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| PIPE | PIPE_LINE | — |
| IMAGE | IMAGE | — |