Video Text
Burn-in titles with glow, without leaving ComfyUI
- images
- IMAGE
So you've generated a clip and you want a title burned onto it - like a caption or a lower-third - and you do not want to open a video editor to get there. That's Video Text. It draws text onto every frame in your batch with all the finish options (glow, outline, chromatic aberration) baked in, so the whole clip comes out with your text already on it. One node between your decoder and your Video Combine, and your export has titles.
There are subtler ways to add text - compositing a text-rendered image on top with a mask, which is what a lot of people end up doing with ImageMagick-style workarounds - but this is the direct route, and it's part of the DJZ-Nodes suite.
How it works
It's PIL under the hood: ImageDraw draws the text onto a transparent layer, which gets composited over each frame. The interesting part is the effect pipeline around that text:
- Glow is built by drawing the text repeatedly at small offsets, with alpha falling off by distance from the glyph - a real blur-free glow that stays cheap on CPU.
- Chromatic aberration draws the red channel offset one way and the blue the other, which is how you get that 90s-VHS RGB fringe around the letters.
- Outline is a stroke drawn behind the fill, so the text stays readable over busy footage.
The node accepts a batch of images and returns the same number of frames with text composited, so batch sizes pass through untouched.
The inputs that matter
text- the string to render. Multi-line text with\nworks.position- nine-way placement (top-left through bottom-right), plusx_offset/y_offset(each ±1000) for fine-tuning, andpadding(0–500) so text isn't glued to the edge.font_size(8–256) andtext_color(hex like#00FF00). Thefontdropdown only has "default" - a packaged font, so no font file hunting, but also no custom typefaces unless you edit the pack.glow_radius(0–20) andglow_intensity(0–1) - for the neon/retro look.glow_radiusof 0 kills the glow entirely.outline_width(0–10) andoutline_color- readability insurance over bright footage.chromatic_aberration(0–10) - the RGB fringe. At 0 it's clean; at higher values, unmistakably analog.line_spacingandletter_spacingfor tuning typography,text_alignment(left/center/right) for multi-line blocks.
Installing it
It's inside DJZ-Nodes, so the pack-level install applies:
cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt
Restart ComfyUI, or use ComfyUI Manager and search "DJZ-Nodes". The pack ships a TTF directory with fonts, which is where the "default" comes from.
Troubleshooting
- Text too small / huge.
font_sizeis in pixels relative to your frame, so a 32px title on a 1080p frame is small, and on a 512px frame it's enormous. Set it relative to your resolution. - Text unreadable. That's what
outline_widthandoutline_color(default black) are for. A 2–3px dark outline fixes most busy-background cases. - Glow looks blocky. The glow is drawn, not blurred, so at high
glow_radiusyou can see the offset steps. Back the radius off and lean on intensity instead. - The chromatic fringe shows on everything, not just text. It's applied around the glyphs, so if you're seeing fringe elsewhere in the frame, you've probably got
chromatic_aberrationway too high - drop it below 4.
Honest verdict: it's a workhorse. No AI, no cleverness, just "put text on the video, make it look intentional." If you're adding a lot of titles, the V2 variant adds rotation and vertical text; otherwise this one gets the job done with the least fiddling.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| text | STRING | VIDEO TEXT | — |
| font | COMBO | 1 options: default | |
| position | COMBO | bottom-center | 9 options: top-left, top-center, top-right, center-left, center, center-right, +3 |
| x_offset | INT | 0-1000–1000 | — |
| y_offset | INT | 0-1000–1000 | — |
| padding | INT | 200–500 | — |
| font_size | INT | 328–256 | — |
| line_spacing | INT | 0-20–100 | — |
| letter_spacing | INT | 0-10–50 | — |
| text_color | STRING | #00FF00 | — |
| glow_radius | INT | 30–20 | — |
| glow_intensity | FLOAT | 0.50–1 | — |
| outline_width | INT | 00–10 | — |
| outline_color | STRING | #000000 | — |
| chromatic_aberration | INT | 20–10 | — |
| text_alignment | COMBO | center | 3 options: left, center, right |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |