AfterDark Film Halation & Bloom
That red glow around neon at night, without shooting on CineStill
- image
- image
Know the look: a neon sign at night, and around every bright source there's a soft red-orange halo bleeding into the dark. That's halation - light reflecting off the film's pressure plate back into the emulsion layers - and it's the signature of CineStill 800T, the stock that launched a thousand "night city" prompts. AfterDark Film Halation & Bloom fakes that halo in post, which beats hoping the sampler gives it to you: the physics is one thing, the look is a specular-highlight pass and a blur.
It's in the HackAfterDark category with the rest of the AfterDark Film pack. If your night shots read as "clean CGI" instead of "shot on film," this is usually the missing layer - the same gap that makes people leave ComfyUI for After Effects when they want a photoreal finish.
How it works
The mechanism is compact and entirely tensor math. It computes a highlight map from the max RGB channel blended 75/25 with luminance - the clever bit, because it means a saturated red neon triggers halation even when it isn't the brightest thing in the frame. Values above your threshold get a soft knee (a 0.12-wide ramp, not a hard cut) and a 1.5-power falloff so the glow is organic rather than a contact-sheet dot.
Then the bloom: the specular mask is downsampled to two pyramid scales (half your bloom_radius and full bloom_radius), upsampled back to full res and blended 65/35. That dual-radius blur is what makes it look like light diffusing through emulsion instead of a gaussian blob. The tint is multiplied in additively and the whole thing clamps to 0–1, so it only brightens - it never eats your blacks.
Inputs that matter
- threshold (0.30–0.99, default 0.7) - how bright a pixel must be to count as a specular highlight. This is the knob you'll actually tune.
- halation_intensity (0–1, default 0.35) - how much glow.
- bloom_radius (1–40, default 12) - how far the halo spreads.
- halation_tint -
Red / Orange (CineStill 800T)is the default and the reason to install this;Golden Amber,Warm Yellow, andSoft Whitecover daylight and bloom-only uses.
Output is a single image (IMAGE). Wire it after VAE decode, before save.
Installing it
Same pack, same one-time setup:
cd ComfyUI/custom_nodes
git clone https://github.com/hackafterdark/ComfyUI-HackAfterDark-Nodes
Restart ComfyUI. You can also install via ComfyUI Manager by searching "HackAfterDark" (pack title: AfterDark Film AR Selector). No model downloads, no API keys - this node is pure torch, no extra dependencies beyond what ComfyUI ships.
Where people get tripped up
If nothing glows, your threshold is too high - drop it to 0.5–0.6 for neon or street lamps. If everything glows, you went too far the other way; the 0.7 default is a sane middle. bloom_radius at the default 12 gives a rich atmospheric halo; pushing toward 30+ turns your image into a dream sequence, which is a mood but probably not the one you wanted. And remember it's additive-only, so if a shot looks flat after grading, halation is the wrong tool - that's what the pack's Color Split & Clarity node is for.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| halation_intensity | FLOAT | 0.350–1 | — |
| threshold | FLOAT | 0.700.3–0.99 | — |
| bloom_radius | FLOAT | 12.01–40 | — |
| halation_tint | COMBO | Red / Orange (CineStill 800T) | 4 options: Red / Orange (CineStill 800T), Golden Amber, Warm Yellow, Soft White |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |