Nodes/ComfyUI_WhisperSRT/🗣️Whisper Audio to Text+SRT
ComfyUI Node

🗣️Whisper Audio to Text+SRT

Subtitles straight out of your ComfyUI graph, no API key in sight

By bikiam·Created about a year ago·Updated about a year ago· 2
🗣️Whisper Audio to Text+SRT
  • audio
  • transcribed_text
  • srt_text
model

You just rendered a video where a character talks, and now you want subtitles on it. That's the exact moment this node earns its place: feed it any AUDIO that exists in your graph and it hands you back both the plain transcript and a ready-to-use .srt file's contents. No API key, no cloud account, nothing leaves your machine. The name is a little optimistic - this is the only node in the pack, and it's a one-shot transcribe, not a full captioning suite - but for "turn my video's audio into captions," it does exactly the job.

This is the pack people point to when someone on r/comfyui asks for a "simple subtitle workflow." It's a utility node in the same spirit as the image-processor packs in the ecosystem: it generates nothing on its own, it just saves you from transcribing by hand or stepping out of ComfyUI entirely.

How it works

Under the hood it's just OpenAI's whisper wrapped in a ComfyUI node. The audio object you feed in gets written to a temp .wav file in ComfyUI's temp directory, whisper.load_model() loads the model you picked, and the transcription runs with word-level timestamps so the SRT segments line up properly. It formats those segments into standard SRT blocks (1\n00:00:00,000 --> 00:00:02,000\n...), deletes the temp file, and returns. Clean and disposable.

The catch everyone hits on the first run: whisper.load_model() downloads the model from OpenAI's servers into ~/.cache/whisper if it isn't there. Your first run will hang there for a bit - that's the download, not a frozen UI.

The inputs and outputs that matter

There are only two inputs, both required, and honestly that's a feature:

  • audio (AUDIO) - comes from any node that outputs AUDIO. In core ComfyUI that's Load Audio, but because it takes the object rather than a file path, you can also wire it after a TTS node or a video node that carries audio.
  • model - one of tiny, base, small, medium, large. base is the sane default (~140MB download, decent accuracy, fast). large gets you the best transcripts at ~3GB and noticeably slower runs. No language parameter and no custom model path, so Whisper auto-detects language and you're stuck with the five presets.

Outputs are two STRINGs: transcribed_text (the whole transcript as one block of plain text) and srt_text (the timestamped SRT content). Note what it doesn't do: it doesn't write the .srt file for you. Wire srt_text into whatever you use to save or display text, or just copy it out of the preview.

Installing it

ComfyUI Manager is the easy route - search "ComfyUI_WhisperSRT" and install. Or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/bikiam/ComfyUI_WhisperSRT

Then restart ComfyUI. The requirements.txt installs openai-whisper, and the node also imports torchaudio (ComfyUI ships it) and soundfile (which occasionally needs a manual pip install soundfile - there's even a comment in the source saying exactly that). The pack ships a downloadable example workflow in its README, which is nice since the README otherwise barely exists.

Where people get burned

  • Missing ffmpeg. openai-whisper shells out to ffmpeg to decode audio. If you get a cryptic error mentioning ffmpeg, install it and make sure it's on your PATH.
  • First-run download stall. As above, model files land in ~/.cache/whisper on first use. tiny/base download fast; large can feel like it crashed.
  • Slow on CPU. Whisper is real neural network work. large on a CPU-only box with a long clip is an exercise in patience; stick to tiny/base unless you have a GPU.
  • It's minimal on purpose. No language forcing, no word timestamps toggle, no speed/size settings. If you need that control or want faster-whisper's speed, that's a different pack.

For quick captions on a generated clip, this is the least-friction option inside the graph. Just feed it audio, grab srt_text, and mux it into your video - or keep it in the graph if you're doing TTS-plus-subtitles work.

CategoryWhisperSRT

Inputs (2)

NameTypeDefaultDescription
audioAUDIO
modelCOMBO5 options: base, tiny, small, medium, large

Outputs (2)

NameTypeDescription
transcribed_textSTRING
srt_textSTRING