Nodes/ComfyUI-speech-dataset-toolkit/Transcribe by faster-whisper
ComfyUI Node

Transcribe by faster-whisper

Fast, accurate speech-to-text inside a ComfyUI graph

By kale4eat·Created 2 years ago·Updated about a year ago· 23
Transcribe by faster-whisper
  • model
  • audio
  • segments
beam_size5
best_of5
language
initial_prompt

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

  • model and audio - the two required wires, nothing to configure here beyond having something for them.
  • beam_size and best_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_FasterWhisperListSegmentsSDT_FasterWhisperSegmentProperty for per-line timing and text, or SDT_FasterWhisperTextFromSegments if you just want one string.

Categoryspeech-dataset-toolkit/ai/faster-whisper

Inputs (6)

NameTypeDefaultDescription
modelFASTER_WHISPER
audioAUDIO
beam_sizeINT50–1024
best_ofINT50–1024
languageoptSTRING
initial_promptoptSTRING

Outputs (1)

NameTypeDescription
segmentsFASTER_WHISPER_SEGMENTS