Post-Process Suite (CRT)
One node that can color-grade, sharpen, glow, grain, and vignette
- image
- IMAGE
Every finished image needs some final pass - a touch of contrast, a sharpen, a vignette, a bit of grain to kill the plastic look - and doing that in ComfyUI usually means chaining four or five single-purpose FX nodes. Post-Process Suite (CRT) is the all-in-one alternative: one node with an enormous optional panel of effects, each gated behind its own enable switch, so you get the whole color-grading workbench without a wall of nodes. It's the CRT pack's flagship FX node for a reason.
How it's structured
The only required input is image. Everything else is optional and disabled by default - which is the design that makes a 60-field node usable. You flip on the sections you want and tune those; the off sections cost nothing. The sections:
- Upscale - an optional spandrel-based model upscale (
upscale_model_pathpicks from yourupscale_modelsfolder), withdownscale_by,rescale_method, andprecision(auto/32/16/bfloat16) to keep it sane. - Levels -
exposure,gamma,brightness,contrast,saturation,vibrance. The classic global color/tonal trio. - Color wheels - per-channel
lift/gamma/gain(nine floats, the RGB shadow/mid/highlight split). - Temp & tint - white-balance adjustment, −100 to 100.
- Sharpen -
sharpen_strength,radius,threshold. The threshold is the important one: it keeps the sharpen off flat areas so you don't amplify noise. - Small glow / Large glow - the modern "bloom but soft" look; small glow is fine halation, large glow is the cinematic haze.
- Glare - anamorphic-style lens flares (
star_4,star_6,star_8,anamorphic_h) with angle, length, and quality controls. - Chromatic aberration - edge color fringing with
ca_strengthand falloff, plus an optional hue-shift mode. - Vignette -
strength,radius,softness. - Radial blur - spin or zoom blur around a center point.
- Film grain -
intensity,size, andcolor_amountfor that analog finish. - Lens distortion -
barrel_distortionfor warping.
Output is the graded IMAGE.
The honest take
The killer combination for photorealism is Levels (or the wheels) + Sharpen + Grain: contrast, a thresholded sharpen, and grain to hide the digital smoothness - that's most of the way to a filmic look in one node. The glares and aberration are fun and very much optional. Where people get burned is turning on everything and getting a fried image; the enable switches are there so you don't.
Gotchas
- The upscale section needs a model.
upscale_model_pathdefaults toNone; until you point it at a real model inmodels/upscale_models/, the enable switch does nothing but confuse. batch_sizecaps memory for the upscale path - leave it low unless you have headroom.- It's order-fixed. Effects run in the suite's internal order; you can't reorder sections. For a custom order, use the individual CRT FX nodes instead.
Install CRT-Nodes via ComfyUI Manager (CRT-Nodes) or git clone https://github.com/plugcrypt/CRT-Nodes.git into custom_nodes, install requirements.txt, restart. The spandrel and opencv-contrib-python deps in that file are what power the upscale and FX paths.
Inputs (69)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| enable_upscaleopt | BOOLEAN | false | — |
| upscale_model_pathopt | COMBO | None | 0 options: |
| downscale_byopt | FLOAT | 0.500.25–1 | — |
| rescale_methodopt | COMBO | bicubic | 5 options: nearest-exact, bilinear, area, bicubic, lanczos |
| precisionopt | COMBO | auto | 4 options: auto, 32, 16, bfloat16 |
| batch_sizeopt | INT | 11–100 | — |
| enable_levelsopt | BOOLEAN | false | — |
| exposureopt | FLOAT | 0.00-3–3 | — |
| gammaopt | FLOAT | 1.000.1–3 | — |
| brightnessopt | FLOAT | 0.00-1–1 | — |
| contrastopt | FLOAT | 1.000–3 | — |
| saturationopt | FLOAT | 1.000–3 | — |
| vibranceopt | FLOAT | 0.00-1–1 | — |
| enable_color_wheelsopt | BOOLEAN | false | — |
| lift_ropt | FLOAT | 0.00-1–1 | — |
| lift_gopt | FLOAT | 0.00-1–1 | — |
| lift_bopt | FLOAT | 0.00-1–1 | — |
| gamma_ropt | FLOAT | 1.000.1–3 | — |
| gamma_gopt | FLOAT | 1.000.1–3 | — |
| gamma_bopt | FLOAT | 1.000.1–3 | — |
| gain_ropt | FLOAT | 1.000–3 | — |
| gain_gopt | FLOAT | 1.000–3 | — |
| gain_bopt | FLOAT | 1.000–3 | — |
| enable_temp_tintopt | BOOLEAN | false | — |
| temperatureopt | FLOAT | 0-100–100 | — |
| tintopt | FLOAT | 0-100–100 | — |
| enable_sharpenopt | BOOLEAN | false | — |
| sharpen_strengthopt | FLOAT | 2.500–3 | — |
| sharpen_radiusopt | FLOAT | 1.90.1–5 | — |
| sharpen_thresholdopt | FLOAT | 0.010–1 | — |
| enable_small_glowopt | BOOLEAN | false | — |
| small_glow_intensityopt | FLOAT | 0.010–2 | — |
| small_glow_radiusopt | FLOAT | 0.10–10 | — |
| small_glow_thresholdopt | FLOAT | 0.250–1 | — |
| enable_large_glowopt | BOOLEAN | false | — |
| large_glow_intensityopt | FLOAT | 0.250–2 | — |
| large_glow_radiusopt | FLOAT | 50.030–100 | — |
| large_glow_thresholdopt | FLOAT | 0.300–1 | — |
| enable_glareopt | BOOLEAN | false | — |
| glare_typeopt | COMBO | star_4 | 4 options: star_4, star_6, star_8, anamorphic_h |
| glare_intensityopt | FLOAT | 0.650–100 | — |
| glare_lengthopt | FLOAT | 1.500.1–100 | — |
| glare_angleopt | FLOAT | 0-180–180 | — |
| glare_thresholdopt | FLOAT | 0.950–1 | — |
| glare_qualityopt | INT | 164–32 | — |
| glare_ray_widthopt | FLOAT | 1.00.1–5 | — |
| enable_chromatic_aberrationopt | BOOLEAN | false | — |
| ca_strengthopt | FLOAT | 0.0050–0.1 | — |
| ca_edge_fallofopt | FLOAT | 2.000–2 | — |
| enable_ca_hue_shiftopt | BOOLEAN | false | — |
| ca_hue_shift_degreesopt | FLOAT | 0-180–180 | — |
| enable_vignetteopt | BOOLEAN | false | — |
| vignette_strengthopt | FLOAT | 0.500–2 | — |
| vignette_radiusopt | FLOAT | 0.700.1–3 | — |
| vignette_softnessopt | FLOAT | 2.000–4 | — |
| enable_radial_bluropt | BOOLEAN | false | — |
| radial_blur_typeopt | COMBO | spin | 2 options: spin, zoom |
| radial_blur_strengthopt | FLOAT | 0.0200–0.5 | — |
| radial_blur_center_xopt | FLOAT | 0.500–1 | — |
| radial_blur_center_yopt | FLOAT | 0.250–1 | — |
| radial_blur_falloffopt | FLOAT | 0.250.001–1 | — |
| radial_blur_samplesopt | INT | 168–64 | — |
| enable_film_grainopt | BOOLEAN | false | — |
| grain_intensityopt | FLOAT | 0.020–0.15 | — |
| grain_sizeopt | FLOAT | 1.000.25–4 | — |
| grain_color_amountopt | FLOAT | 0.000–1 | — |
| enable_lens_distortionopt | BOOLEAN | false | — |
| barrel_distortionopt | FLOAT | 0.000-0.5–0.5 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |