Halation PRO
Film's legendary highlight bloom
- image
- IMAGE
Shoot Cinestill 800T at night and every neon sign gets this dreamy red halo around it - light that passes through the film's anti-halation layer, bounces off the backing, and exposes the emulsion twice. That's halation, and it's become the visual shorthand for "analog film at night." Halation PRO reproduces it in ComfyUI: it isolates the brightest highlights, blooms them outward, tints them (default heavily red), and screen-blends them back over the image. The result is that expensive, cinematic glow that no checkpoint generates on its own.
Halation is one of those film artifacts that prompt engineering can gesture at - "Cinestill 800T" is a reliable prompt anchor for night scenes, per the community's own photorealism playbook - but the physical glow, tied to the image's actual highlights, only really comes from a post-process node like this. It's the pack's showpiece for the neon-and-rain look.
How it works
The mechanism is a classic three-step highlight bloom:
- Extract the highlights. Everything above
thresholdis pulled out and renormalized to 0–1, so only the bright stuff participates. Below the threshold the image is untouched. - Bloom. The highlight mask is blurred with a Gaussian at
radius, spreading the light outward the way a halation layer would. - Tint and screen-blend. The bloom is multiplied by
strengthand per-channel tint weights (red_tint,green_tint,blue_tint), then composited with a Screen blend - which adds light, never darkens, and naturally keeps the halo from blowing out midtones.
The default tint weights (red 1.0, green 0.2, blue 0.1) are the classic red-dominant halation of halide emulsions; set them equal for a neutral glow instead.
The inputs that matter
image- the IMAGE to bloom.threshold(default 0.8, 0–1) - how bright a pixel must be to start blooming. Lower = more of the image glows.strength(default 0.2, 0–1) - how much halo mixes in. The default is deliberately subtle.radius(default 20, 1–100) - how far the glow spreads. This is the knob that takes you from "subtle sheen" (small radius) to "dreamy neon glow" (large).red_tint/green_tint/blue_tint(each 0–2) - the halo color. Defaults are film-correct red-heavy.
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 - it's numpy highlight math plus an OpenCV Gaussian blur.
Where people get tripped up
Halation is the node people most often overshoot. Crank strength to 0.8 and radius to 60 and you've got an instagram blur disaster, not film - the whole magic is restraint, keeping the glow confined to actual speculars. Start at the defaults, raise radius first, then nudge strength in 0.05 steps. The threshold also matters more than people think: at the 0.8 default, only street lights, neon, and catchlights in eyes participate, which is exactly the film look. Drop it toward 0.5 and skin starts to glow, which can read as plastic rather than cinematic. Best stacking partner is Veiling Glare PRO - halation for the bright red glow, veiling glare for the overall haze - followed by FPE Kodak 2383 PRO if you want the whole frame to feel like it was printed.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| threshold | FLOAT | 0.800–1 | — |
| strength | FLOAT | 0.200–1 | — |
| radius | INT | 201–100 | — |
| red_tint | FLOAT | 1.000–2 | — |
| green_tint | FLOAT | 0.200–2 | — |
| blue_tint | FLOAT | 0.100–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |