Nodes/CRT-Nodes/Post-Process Suite (CRT)
ComfyUI Node

Post-Process Suite (CRT)

One node that can color-grade, sharpen, glow, grain, and vignette

By PGCRT·Created 2 years ago·Updated 26 days ago· 148
Post-Process Suite (CRT)
  • image
  • IMAGE
◄enable_upscalefalse►
◄upscale_model_pathNone►
◄downscale_by0.50►
◄rescale_methodbicubic►
◄precisionauto►
◄batch_size1►
◄enable_levelsfalse►
◄exposure0.00►
◄gamma1.00►
◄brightness0.00►
◄contrast1.00►
◄saturation1.00►
◄vibrance0.00►
◄enable_color_wheelsfalse►
◄lift_r0.00►
◄lift_g0.00►
◄lift_b0.00►
◄gamma_r1.00►
◄gamma_g1.00►
◄gamma_b1.00►
◄gain_r1.00►
◄gain_g1.00►
◄gain_b1.00►
◄enable_temp_tintfalse►
◄temperature0►
◄tint0►
◄enable_sharpenfalse►
◄sharpen_strength2.50►
◄sharpen_radius1.9►
◄sharpen_threshold0.01►
◄enable_small_glowfalse►
◄small_glow_intensity0.01►
◄small_glow_radius0.1►
◄small_glow_threshold0.25►
◄enable_large_glowfalse►
◄large_glow_intensity0.25►
◄large_glow_radius50.0►
◄large_glow_threshold0.30►
◄enable_glarefalse►
◄glare_typestar_4►
◄glare_intensity0.65►
◄glare_length1.50►
◄glare_angle0►
◄glare_threshold0.95►
◄glare_quality16►
◄glare_ray_width1.0►
◄enable_chromatic_aberrationfalse►
◄ca_strength0.005►
◄ca_edge_fallof2.00►
◄enable_ca_hue_shiftfalse►
◄ca_hue_shift_degrees0►
◄enable_vignettefalse►
◄vignette_strength0.50►
◄vignette_radius0.70►
◄vignette_softness2.00►
◄enable_radial_blurfalse►
◄radial_blur_typespin►
◄radial_blur_strength0.020►
◄radial_blur_center_x0.50►
◄radial_blur_center_y0.25►
◄radial_blur_falloff0.25►
◄radial_blur_samples16►
◄enable_film_grainfalse►
◄grain_intensity0.02►
◄grain_size1.00►
◄grain_color_amount0.00►
◄enable_lens_distortionfalse►
◄barrel_distortion0.000►

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_path picks from your upscale_models folder), with downscale_by, rescale_method, and precision (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_strength and 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, and color_amount for that analog finish.
  • Lens distortion - barrel_distortion for 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_path defaults to None; until you point it at a real model in models/upscale_models/, the enable switch does nothing but confuse.
  • batch_size caps 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.

CategoryCRT/FX

Inputs (69)

NameTypeDefaultDescription
imageIMAGE—
enable_upscaleoptBOOLEANfalse—
upscale_model_pathoptCOMBONone0 options:
downscale_byoptFLOAT0.500.25–1—
rescale_methodoptCOMBObicubic5 options: nearest-exact, bilinear, area, bicubic, lanczos
precisionoptCOMBOauto4 options: auto, 32, 16, bfloat16
batch_sizeoptINT11–100—
enable_levelsoptBOOLEANfalse—
exposureoptFLOAT0.00-3–3—
gammaoptFLOAT1.000.1–3—
brightnessoptFLOAT0.00-1–1—
contrastoptFLOAT1.000–3—
saturationoptFLOAT1.000–3—
vibranceoptFLOAT0.00-1–1—
enable_color_wheelsoptBOOLEANfalse—
lift_roptFLOAT0.00-1–1—
lift_goptFLOAT0.00-1–1—
lift_boptFLOAT0.00-1–1—
gamma_roptFLOAT1.000.1–3—
gamma_goptFLOAT1.000.1–3—
gamma_boptFLOAT1.000.1–3—
gain_roptFLOAT1.000–3—
gain_goptFLOAT1.000–3—
gain_boptFLOAT1.000–3—
enable_temp_tintoptBOOLEANfalse—
temperatureoptFLOAT0-100–100—
tintoptFLOAT0-100–100—
enable_sharpenoptBOOLEANfalse—
sharpen_strengthoptFLOAT2.500–3—
sharpen_radiusoptFLOAT1.90.1–5—
sharpen_thresholdoptFLOAT0.010–1—
enable_small_glowoptBOOLEANfalse—
small_glow_intensityoptFLOAT0.010–2—
small_glow_radiusoptFLOAT0.10–10—
small_glow_thresholdoptFLOAT0.250–1—
enable_large_glowoptBOOLEANfalse—
large_glow_intensityoptFLOAT0.250–2—
large_glow_radiusoptFLOAT50.030–100—
large_glow_thresholdoptFLOAT0.300–1—
enable_glareoptBOOLEANfalse—
glare_typeoptCOMBOstar_44 options: star_4, star_6, star_8, anamorphic_h
glare_intensityoptFLOAT0.650–100—
glare_lengthoptFLOAT1.500.1–100—
glare_angleoptFLOAT0-180–180—
glare_thresholdoptFLOAT0.950–1—
glare_qualityoptINT164–32—
glare_ray_widthoptFLOAT1.00.1–5—
enable_chromatic_aberrationoptBOOLEANfalse—
ca_strengthoptFLOAT0.0050–0.1—
ca_edge_fallofoptFLOAT2.000–2—
enable_ca_hue_shiftoptBOOLEANfalse—
ca_hue_shift_degreesoptFLOAT0-180–180—
enable_vignetteoptBOOLEANfalse—
vignette_strengthoptFLOAT0.500–2—
vignette_radiusoptFLOAT0.700.1–3—
vignette_softnessoptFLOAT2.000–4—
enable_radial_bluroptBOOLEANfalse—
radial_blur_typeoptCOMBOspin2 options: spin, zoom
radial_blur_strengthoptFLOAT0.0200–0.5—
radial_blur_center_xoptFLOAT0.500–1—
radial_blur_center_yoptFLOAT0.250–1—
radial_blur_falloffoptFLOAT0.250.001–1—
radial_blur_samplesoptINT168–64—
enable_film_grainoptBOOLEANfalse—
grain_intensityoptFLOAT0.020–0.15—
grain_sizeoptFLOAT1.000.25–4—
grain_color_amountoptFLOAT0.000–1—
enable_lens_distortionoptBOOLEANfalse—
barrel_distortionoptFLOAT0.000-0.5–0.5—

Outputs (1)

NameTypeDescription
IMAGEIMAGE—