Glow
The bloom you actually want, without burning a diffusion pass
- video
- video
Neon signs, streetlights at night, any shot where the bright parts should bleed into the dark parts - that's bloom, and it's one of those effects that instantly sells "cinematic." You could try to get it by prompting the generator, but then the generator is also re-deciding your whole frame and burning a full diffusion pass. Glow is the deterministic version: a milliseconds-fast, fully controllable bloom that only touches the bright pixels. It's the right tool, and it costs nothing.
ComfyTV is jtydhr88's canvas app (~190 stages, each its own node). Glow is one of its VideoFX staples and a perfect first thing to drop into an FX Chain, because it's cheap and it previews live.
How it works
This is classic bloom, done properly. The frame is split by a threshold into "bright enough to glow" and "not bright enough"; the bright part is blurred and scaled up in layers, then recombined. The knobs are the standard bloom stack:
- threshold (0–0.99, default 0.7) - what counts as bright. 0.7 means only the top of the range glows. Lower it and the whole image starts to haze.
- size (0.5–50, default 4) - how far the glow spreads. Small = a tight halation around highlights; large = dreamy fog.
- bloom_ratio (1.1–4) and bloom_count (1–8) - how aggressively and in how many layers the bloom builds up. More layers = smoother, rounder glow; higher ratio = more pronounced.
- gain (0–8) - brightness of the glow itself.
- mix (0–1, default 1) - the final wet/dry. Dial it down to blend the glow subtly under the original.
Optional video in, video out. No video in, nothing happens.
The hidden inputs, explained once
Every ComfyTV stage carries force_run_token, project_id, and parent_output_id - all marked "Internal" in the schema. The frontend's projectStore fills them so each node can Run on its own and downstream nodes consume a snapshot of the last output. You never set them by hand.
Installing it
Same pack, same steps:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
or ComfyUI Manager ("ComfyTV"), full backend restart, then ComfyTV → VideoFX. The one gotcha that bites people: on ComfyUI Desktop, macOS, or multiple installs, clone into the running instance by absolute path and confirm custom_nodes/ComfyTV/__init__.py exists (not nested), then fully restart. The pack declares no pip deps, but video stages lazily import PyAV - pip install av if a video node errors.
Common issues
- The whole image goes milky -
thresholdis too low orsizetoo high. Raise threshold toward 0.85. - Glow looks like a cheap copy-paste blur -
bloom_counttoo low. More layers with a modestbloom_ratiolooks far better than one big blur. - Highlights are blown out - back off
gain, thenbloom_ratio. The glow should sit on the highlights, not replace them. - It's doing nothing - check
mixisn't 0 and that you actually wired a video in.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| threshold | FLOAT | 0.700–0.99 | — |
| size | FLOAT | 4.00.5–50 | — |
| bloom_ratio | FLOAT | 2.001.1–4 | — |
| bloom_count | INT | 51–8 | — |
| gain | FLOAT | 1.000–8 | — |
| mix | FLOAT | 1.000–1 | — |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |