๐โ๐ STT - Speech to Text
Transcribe audio in ComfyUI with faster-whisper
- AUDIO
- transcript
- detected_language
- language_name
This node turns audio into text right inside ComfyUI. Feed it a clip - an AUDIO connection, an audio file path, or even a video path - and it hands back the transcript plus the language it detected. Under the hood it's Whisper, specifically the faster-whisper runtime, so the quality is the real OpenAI Whisper you already trust, just packaged as a node.
Why you'd want it in a graph
On its own, transcription is useful - pull subtitles out of a clip, turn a voice memo into a prompt. But the real payoff is chaining. People wire STT into lip-sync and talking-head pipelines (MuseTalk and friends), where you need the spoken text to drive something else. You can also close the loop with the pack's TTS nodes: generate speech, transcribe it back, check it came out right. And because it autodetects language and reports it, you can branch a workflow on what was actually said. It's one of the pack's genuinely powerful nodes - the community reception around Bjornulf's audio and loop tooling has been warm precisely because this kind of automation was a pain to rig up before.
How it works
Whisper runs locally. You pick a model_size and it loads that Whisper model, decodes your audio, and returns text. Bigger model, better accuracy, more VRAM and time - the usual trade.
The inputs:
- model_size -
tiny,base(the default),small,medium, orlarge-v2.baseis a fine starting point for clear English; step up tosmallormediumif the audio's noisy or multilingual;large-v2is the accuracy ceiling and the slowest. - AUDIO - an audio connection from elsewhere in the graph (optional).
- audio_path - a path to an audio file on disk (optional).
- video_path - a path to a video file; it'll pull the audio track out (optional).
You supply one of those three sources. Outputs are transcript (the text), detected_language (a short code like en), and language_name (the readable name). Wire transcript into a Show node to eyeball it, into a prompt, or into whatever consumes the words next.
Installing the pack - and the dependency that trips people
The pack itself is the usual one-liner. ComfyUI Manager โ Install Custom Nodes โ search Bjornulf_custom_nodes โ install โ restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/justUmen/Bjornulf_custom_nodes
But this node has two catches the author calls out explicitly, and they're the reason most "STT node does nothing" reports exist:
faster-whisperis not installed automatically. It was deliberately pulled out ofrequirements.txtbecause it broke installs on newer Python. If you want this node, install it yourself:pip install faster-whisper(against your ComfyUI Python - on Windows portable, the embeddedpython.exe).- It needs Python 3.12, not 3.13.
faster-whisperisn't compatible with 3.13, and the wider ComfyUI ecosystem still recommends 3.12 anyway. If you're on 3.13, this node won't run no matter what you install.
The first time you actually run it, Whisper also downloads the model weights for the size you chose, so expect a one-off wait and a working internet connection on that run.
Common issues
If the node errors on load or import, it's almost always the two points above - wrong Python version, or faster-whisper never installed. Check your interpreter first.
If it runs but the transcript is garbage, bump the model_size; tiny/base struggle with accents, background noise, and non-English audio. If it produces nothing, confirm your source actually has an audio track - a silent video, or a video_path with no audio stream, gives Whisper nothing to work with. And mind VRAM: large-v2 alongside a diffusion model loaded in the same graph can tip you over, so transcribe in a separate pass if you're tight.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_size | COMBO | base | 5 options: tiny, base, small, medium, large-v2 |
| AUDIOopt | AUDIO | โ | |
| audio_pathopt | STRING | โ | |
| video_pathopt | STRING | โ |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| transcript | STRING | โ |
| detected_language | STRING | โ |
| language_name | STRING | โ |