Subtitles
Burn real SRT or WebVTT subtitles onto a clip
- video
- subs_text
- video
Subtitles have their own timing language - start time, end time, cue text - and that's exactly what SRT and WebVTT files speak. Subtitle is the ComfyTV stage that takes that format and burns it onto your video: paste an SRT or WebVTT document in, and the stage renders every cue at the right moment with your font and styling. No separate ffmpeg incantation required.
It's a ComfyTV Video stage - wire a video in, paste your subtitles, hit Run, get a captioned clip downstream.
The inputs
- subs (multiline) - the subtitle text. The tooltip is unambiguous: "SRT or WebVTT cue text." Paste the whole document; the timings are parsed from it.
- font (default
Inter-Regular), size (8–200, default 36), color (#FFFFFF), stroke (0–20, default 2) - the caption look. The default white-with-stroke is the standard broadcast-style subtitle, and for good reason: it stays readable over almost anything. - anchor -
bottom(default) ortop. Subtitles conventionally live at the bottom. - subs_text (optional, COMFYTV_TEXT) - an alternative way in: wire a text output from another stage instead of typing. This is the socket that makes the pack's speech-to-text flow work end to end: transcribe a clip, get COMFYTV_TEXT out, wire it straight into
subs_text.
The project_id / parent_output_id / force_run_token inputs are internal frontend plumbing - ignore them.
How it works
The stage feeds your SRT/VTT document to the pack's subtitle-burning runner, which parses the cues and renders each one over the video at its timestamp, styled per your settings. It accepts either hand-pasted cue text in subs or a wired text payload in subs_text - subs_text wins if both are present, so the automated pipeline takes priority over whatever's typed.
Install
ComfyTV ships ~190 stages in one pack; this node comes with it.
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI fully and look under ComfyTV → Video. ComfyUI Manager finds it by searching "ComfyTV". No model downloads, no extra Python deps. Fonts come from the pack's resource library. On ComfyUI Desktop or macOS, clone into the running instance's absolute path from the startup log rather than trusting the relative cd.
Troubleshooting
- "paste SRT/VTT text or wire a text input." - one of the two inputs has to be filled; the stage won't guess.
- Subtitles don't line up with speech. That's a source-timing problem - fix the timestamps in the SRT, or use the speech-to-text stage to generate fresh cues that match the audio.
- Captions get cut off at the frame edge. Increase
sizeonly if you're on a big canvas; more likely your text is long for the frame - split the cue in the SRT.
The natural partner here is SubtitleGen: it produces the text, this burns it. Together they turn any video with dialogue into a captioned one without you typing a single timestamp.
Inputs (11)
| 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. |
| subs | STRING | SRT or WebVTT cue text | |
| font | COMBO | Inter-Regular | 2 options: Inter-Regular, NotoSansSC-Regular |
| size | INT | 368–200 | — |
| color | STRING | #FFFFFF | — |
| stroke | INT | 20–20 | — |
| anchor | COMBO | bottom | 2 options: bottom, top |
| videoopt | COMFYTV_VIDEO | — | |
| subs_textopt | COMFYTV_TEXT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |