Nodes/DJZ-Nodes/Video Text
ComfyUI Node

Video Text

Burn-in titles with glow, without leaving ComfyUI

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 80
Video Text
  • images
  • IMAGE
textVIDEO TEXT
font
positionbottom-center
x_offset0
y_offset0
padding20
font_size32
line_spacing0
letter_spacing0
text_color#00FF00
glow_radius3
glow_intensity0.5
outline_width0
outline_color#000000
chromatic_aberration2
text_alignmentcenter

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 \n works.
  • position - nine-way placement (top-left through bottom-right), plus x_offset/y_offset (each ±1000) for fine-tuning, and padding (0–500) so text isn't glued to the edge.
  • font_size (8–256) and text_color (hex like #00FF00). The font dropdown 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) and glow_intensity (0–1) - for the neon/retro look. glow_radius of 0 kills the glow entirely.
  • outline_width (0–10) and outline_color - readability insurance over bright footage.
  • chromatic_aberration (0–10) - the RGB fringe. At 0 it's clean; at higher values, unmistakably analog.
  • line_spacing and letter_spacing for 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_size is 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_width and outline_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_radius you 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_aberration way 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.

Categoryimage/text

Inputs (17)

NameTypeDefaultDescription
imagesIMAGE
textSTRINGVIDEO TEXT
fontCOMBO1 options: default
positionCOMBObottom-center9 options: top-left, top-center, top-right, center-left, center, center-right, +3
x_offsetINT0-1000–1000
y_offsetINT0-1000–1000
paddingINT200–500
font_sizeINT328–256
line_spacingINT0-20–100
letter_spacingINT0-10–50
text_colorSTRING#00FF00
glow_radiusINT30–20
glow_intensityFLOAT0.50–1
outline_widthINT00–10
outline_colorSTRING#000000
chromatic_aberrationINT20–10
text_alignmentCOMBOcenter3 options: left, center, right

Outputs (1)

NameTypeDescription
IMAGEIMAGE