Nodes/ComfyUI-Easy-Media/Recognize Subtitle
ComfyUI Node

Recognize Subtitle

Speech-to-text straight from ComfyUI, with timestamps and no cloud account

By yolain·Created 3 months ago·Updated about 17 hours ago· 158
Recognize Subtitle
  • audio
  • video
  • SUBTITLE_TEXT
model_typewhisper-large-v3
output_formatsrt
max_sentence_length20
unload_modeltrue

If you're making talking-head, dub, or interview-style videos in ComfyUI, at some point you need the words out of the audio - with timestamps, so you can burn them as subtitles. Recognize Subtitle is the pack's local, offline answer: drop in an AUDIO or VIDEO, pick a model, and get normalized SRT text out. No API key, no cloud dependency, just a model file sitting on your disk.

How it works

The node serializes your audio (or extracts the audio track from a video) and runs a real ASR model over it. Two models are on offer via the model_type dropdown, and they're different enough that the choice matters:

  • whisper-large-v3 (default) - OpenAI's Whisper Large V3, loaded from the whisper_large_v3_fp16.safetensors audio encoder in models/audio_encoders/. Solid, familiar, and the safest default.
  • qwen3-asr - Qwen's ASR model (released January 2026, ~52 languages) plus its separate forced aligner. The aligner is what buys you tighter word-level timing. Both live under models/Qwen3-ASR/.

Either way the recognized segments get run through a smart sentence splitter capped by max_sentence_length (default 20 characters per subtitle entry), so you get readable captions instead of a wall of words. output_format gives you standard srt or a timestamp format with one (start, end) text entry per line.

The inputs: audio takes priority when both are connected; otherwise video gets its audio extracted. And unload_model (default on) moves the ASR model back to CPU and clears accelerator caches when done - leave it on unless you're running many clips back to back and want to skip the reload.

The single output, SUBTITLE_TEXT, feeds straight into subtitle burning (MultiTrack Add Subtitle To Video, or the pack's easy addSubtitleToVideo) or just sits in a text node for review.

Installing it properly

The pack itself is trivial:

cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Media.git

restart ComfyUI (or ComfyUI Manager → "Easy-Media"). But the models are the actual install, and they're big:

  • Whisper Large V3 → models/audio_encoders/whisper_large_v3_fp16.safetensors
  • Qwen3-ASR 1.7B + Qwen3-ForcedAligner 0.6B → models/Qwen3-ASR/

Some of these can be pulled through the pack's built-in Easy-Media model download interface in the UI, which is the convenient path. Python side needs openai-whisper for Whisper, or qwen-asr + torchaudio for Qwen. FFmpeg on your system, as always with this pack.

Where people get burned

The number one failure is forgetting the model file - the node raises a clean "model not installed" error, so the fix is just to download it. Number two: running the wrong ASR backend for the job. Whisper's timestamps are good enough for casual subs; if you need tight word alignment (for synced captions or dubbing), that's the Qwen3-ASR + aligner path, and it's worth the extra GB. And a big one nobody warns about: with unload_model off, a 1.7B ASR model sits in VRAM and can OOM your next generation. Start with it enabled.

CategoryEasyUse/Media

Inputs (6)

NameTypeDefaultDescription
model_typeCOMBOwhisper-large-v3Choose the same ASR model used by multitrack subtitle recognition.
output_formatCOMBOsrtOutput standard SRT or one '(start, end) text' entry per line.
max_sentence_lengthINT201–500Maximum number of characters in each subtitle entry.
unload_modelBOOLEANtrueMove the ASR model to CPU and clear accelerator caches after recognition.
audiooptAUDIOOptional AUDIO input. Takes priority when both inputs are connected.
videooptVIDEOOptional VIDEO input. Its audio track is extracted when AUDIO is not connected.

Outputs (1)

NameTypeDescription
SUBTITLE_TEXTSTRING