Nodes/ComfyTV/Subtitles
ComfyUI Node

Subtitles

Burn real SRT or WebVTT subtitles onto a clip

By jtydhr88·Created 3 months ago·Updated about 15 hours ago· 725
Subtitles
  • video
  • subs_text
  • video
force_run_token0
project_id
parent_output_id0
subs
fontInter-Regular
size36
color#FFFFFF
stroke2
anchorbottom

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) or top. 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 size only 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.

CategoryComfyTV/Video

Inputs (11)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
subsSTRINGSRT or WebVTT cue text
fontCOMBOInter-Regular2 options: Inter-Regular, NotoSansSC-Regular
sizeINT368–200
colorSTRING#FFFFFF
strokeINT20–20
anchorCOMBObottom2 options: bottom, top
videooptCOMFYTV_VIDEO
subs_textoptCOMFYTV_TEXT

Outputs (1)

NameTypeDescription
videoCOMFYTV_VIDEO