Add Subtitles To Background
Kinetic-typography subtitles, wordcloud style
- images
- alignment
- IMAGE
This is the odd one out in the pack, and it's labeled experimental for a reason. Where Add Subtitles To Frames gives you the classic caption look - steady text sitting in one spot, synced to speech - this node gives you a moving wordcloud: words appear and drift with randomized size and position, timed to when they're spoken. Think kinetic-typography captions you'd see in a fast-cut social edit, not a subtitle track.
What it's actually doing
The pack author's own description is "place subtitles on blank frames in wordcloud style," and the parameter set backs that up. Rather than drawing text in one fixed spot like Add Subtitles To Frames, this node scatters and resizes words as they appear - text_displacement jitters position, font_size_displacement jitters size, and min_font_size/max_font_size bound how big or small any given word can render. num_words caps how many words are visible on screen at once, so you get a rolling cluster of recent speech rather than the entire transcript piling up. It's a genuinely different aesthetic from a normal caption, and it's the kind of thing that works great for a specific stylistic choice and looks wrong the moment you actually want legible, steady subtitles - for that, use Add Subtitles To Frames instead.
Given it's flagged experimental in the README, treat it as a creative tool to try and iterate on rather than something you drop into a production pipeline expecting rock-solid, predictable output every run.
The inputs and outputs that matter
imagesandalignmentwork the same as the other subtitle nodes - frames in, andwords_alignmentfrom Apply Whisper (word-level timing is what drives the scatter effect, same as Add Subtitles To Frames).font_family- same four bundled fonts as the rest of the pack (two Roboto weights, plus YRDZST Semibold for CJK and Chanakya Regular for Devanagari).num_words(default 25) - how many words are alive on screen simultaneously.text_displacement(default 10) andfont_size_displacement(default 3) - how much each word's position and size wobble from a baseline, which is where the "wordcloud" feel comes from.min_font_size(15) /max_font_size(75) - the range that displacement is allowed to push a word's size into.video_fps- same role as elsewhere: converts word timestamps into frame indices, so it needs to match your actual footage's frame rate.
One output: a composited IMAGE batch with the wordcloud effect rendered onto your frames.
How to install it
It ships with the rest of ComfyUI-Whisper - there's no separate install for this one node. ComfyUI Manager: search ComfyUI Whisper, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yuvraj108c/ComfyUI-Whisper
then restart ComfyUI.
Common issues & troubleshooting
Output looks chaotic or unreadable. That's largely the point of the style, but if it's too chaotic, pull text_displacement and font_size_displacement down first - those two are what's driving the randomness, and lower values give you a tamer, more controlled scatter without abandoning the effect entirely.
Text is too small to read, or absurdly large. Tighten the gap between min_font_size and max_font_size rather than fighting the displacement values - the size range is a hard bound the effect operates inside.
Timing feels off from the audio. Same root cause as the other frame-drawing nodes in this pack: check video_fps against your actual video's frame rate first. It's the most common reason word timing and video playback disagree.
This isn't what you actually wanted. If you came here expecting normal, steady captions, you want Add Subtitles To Frames - this node is specifically for the scattered wordcloud look, not a configuration option toward a standard caption.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| alignment | whisper_alignment | — | |
| font_family | COMBO | 4 options: YRDZST Semibold.ttf, Roboto-Regular.ttf, Chanakya Regular.ttf, Roboto-Bold.ttf | |
| num_words | INT | 25 | — |
| text_displacement | INT | 10 | — |
| font_size_displacement | INT | 3 | — |
| min_font_size | INT | 15 | — |
| max_font_size | INT | 75 | — |
| video_fps | FLOAT | 24 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |