Transcribe by faster-whisper
Fast, accurate speech-to-text inside a ComfyUI graph
- model
- audio
- segments
If you want a transcript out of an audio clip inside a ComfyUI graph, this is the node that actually does the transcribing - the loader next to it just gets a model into memory. It wraps faster-whisper, SYSTRAN's CTranslate2 reimplementation of OpenAI's Whisper. Same weights, same accuracy, but re-engineered for speed: CTranslate2 quantizes and optimizes the transformer so you get several times the throughput of the reference openai-whisper package on the same hardware, and it'll run comfortably on CPU at int8 if you don't have a GPU free. That's why it's the transcription engine this pack builds around rather than stock Whisper.
How it works
You feed it a loaded FASTER_WHISPER model (from SDT_FasterWhisperLoader) and an AUDIO clip, and it runs Whisper's beam-search decoding over the whole thing. What comes back isn't a plain string - it's a FASTER_WHISPER_SEGMENTS bundle, Whisper's native output of timestamped chunks rather than one flat transcript. That's deliberate for a dataset-building toolkit: you almost always want the timing, not just the words, so you can pair each sentence with the exact slice of audio it came from.
The inputs and outputs that matter
modelandaudio- the two required wires, nothing to configure here beyond having something for them.beam_sizeandbest_of(both default 5) - standard Whisper beam-search knobs. Higher beam size explores more candidate transcriptions before picking one, which can nudge accuracy up on tricky audio at the cost of speed. The defaults are the well-worn Whisper defaults; most people never touch them.language(optional, blank by default) - leave it empty and Whisper auto-detects the spoken language from the first chunk. Set it explicitly (e.g.en,ja) if you know it in advance - it's faster (skips detection) and more reliable on short or ambiguous clips where auto-detect can guess wrong.initial_prompt(optional, blank by default) - Whisper's context-priming trick. Whatever text you put here biases the model's vocabulary and formatting toward it, which is the standard way to get proper nouns, acronyms, or a particular punctuation style right without fine-tuning anything.
The output, segments, doesn't do anything on its own - wire it into SDT_FasterWhisperListSegments to explode it into individual segments, or straight into SDT_FasterWhisperTextFromSegments if you just want the flattened transcript text.
How to install it
Search ComfyUI-speech-dataset-toolkit in ComfyUI Manager and install, or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/kale4eat/ComfyUI-speech-dataset-toolkit
cd ComfyUI-speech-dataset-toolkit
pip install torchaudio --index-url https://download.pytorch.org/whl/cu121 # match your CUDA version
pip install -r requirements.txt
Restart ComfyUI after. This node itself doesn't add anything beyond what the pack already needs - the real dependency weight is in the loader, which pulls the actual model weights.
Common issues & troubleshooting
First run is slow, then it isn't. SDT_FasterWhisperLoader downloads the CTranslate2-converted model from Hugging Face on first use - that's a multi-gigabyte fetch for the larger checkpoints, and it's a one-time cost cached to disk, not something this node itself does.
Wrong language, garbled output. If you leave language blank and feed it a clip with background music, multiple speakers switching languages, or just a few seconds of audio, auto-detect can lock onto the wrong language for the whole run. Set language explicitly when you know it.
It doesn't handle code-switching. This is a known Whisper family limitation, not a bug in this node: a clip that mixes two languages mid-sentence will get forced into whichever single language wins detection. If that's your actual use case, this node - and vanilla Whisper generally - isn't built for it.
You got segments, not text, and now you're stuck. That's expected - segments is structured, timestamped data by design. Chain SDT_FasterWhisperListSegments → SDT_FasterWhisperSegmentProperty for per-line timing and text, or SDT_FasterWhisperTextFromSegments if you just want one string.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | FASTER_WHISPER | — | |
| audio | AUDIO | — | |
| beam_size | INT | 50–1024 | — |
| best_of | INT | 50–1024 | — |
| languageopt | STRING | — | |
| initial_promptopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| segments | FASTER_WHISPER_SEGMENTS | — |