Whisper STT 👂
Transcribe audio to text inside ComfyUI
- audio
- STRING
This is the reverse of text-to-speech: you feed it audio, it hands back the words. Whisper STT runs OpenAI's Whisper model right inside your graph, so you can transcribe a voice clip, auto-caption a video, or pull a script out of an audio file without leaving ComfyUI. Whisper is the community default for this - as one r/comfyui thread put it plainly, "Whisper does a great job of captioning" - and this node is a clean way to bolt it into a workflow.
It ships in 1038lab's ComfyUI-EdgeTTS pack, the same bundle that gives you the Edge TTS voiceover node and Save Audio. Unlike Edge TTS (which is a free cloud call), Whisper actually runs locally: the model weights download to your machine on first use and inference happens on your own hardware.
How it works
You give it an AUDIO input and a model size, and it runs speech recognition and returns the transcript as a plain string. The first time you use a given model size, it downloads those weights - so the first run of, say, small will pause to fetch a few hundred MB before it does anything. After that it's cached.
Whisper is multilingual and can auto-detect the spoken language, or you can pin it. It transcribes in the language it hears; there's no separate translation step here.
The inputs and outputs that matter
audio(AUDIO) - the clip to transcribe. Comes from any node that emits ComfyUI audio.model_size-tiny,base,small,medium,large(defaultbase). This is the real quality/speed dial.tiny/baseare fast and fine for clear English;smallis the sweet spot for most people;medium/largeare noticeably more accurate on accents, noise and non-English audio but are slower and want a GPU and real VRAM. Start atbaseorsmalland only climb if the transcript is sloppy.language-auto(default) or one of ~57 specific language codes. Auto-detect is convenient but can guess wrong on short or noisy clips; if you already know the language, set it explicitly and you'll get better, faster results.
Output is a single STRING - the transcribed text. Wire it into anything that takes text: a caption/subtitle node, a text display, or a prompt input if you're doing something clever like speech-driven generation.
How to install it
Via ComfyUI Manager: search Comfyui-EdgeTTS, install, restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/1038lab/ComfyUI-EdgeTTS.git
./ComfyUI/python_embeded/python -m pip install -r requirements.txt
Then restart ComfyUI. Whisper is the reason this pack has real dependencies - read the next section before you assume it's broken.
Common issues
FFmpeg not found / it errors the moment it touches audio. Whisper needs FFmpeg on your system PATH - this is the number-one setup failure. Install FFmpeg, and on Windows make sure its bin folder is actually on PATH (the pack's README literally shows $env:Path += ";F:\FFmpeg\bin" then restart ComfyUI). Restarting ComfyUI after changing PATH matters - it inherits the environment at launch.
Audio load/save errors on recent PyTorch. If you're on torch/torchaudio 2.9 or newer, torchaudio now needs torchcodec to load and save audio. Match it to your torch build:
./ComfyUI/python_embeded/python -m pip install --no-cache-dir "torchcodec==0.9"
First run "hangs." It's not hung - it's downloading the model weights for that size. Bigger sizes take longer to fetch. Let it finish once and it's cached after.
Transcript is slow or the big model OOMs. medium/large want a CUDA GPU; on CPU they're painfully slow, and on a small card large can run you out of VRAM. Drop to small - for most audio it's within a hair of the big models at a fraction of the cost.
Wrong language in the output. Auto-detect misfired, usually on a short or noisy clip. Set language explicitly and re-run.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| model_size | COMBO | base | Whisper model size - larger = more accurate but slower |
| language | COMBO | auto | Select language or auto for automatic detection |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |