FasterWhisper Transcription
FasterWhisper Transcription in ComfyUI
- audio
- model
- transcriptions
This is the node you actually want from this pack. It takes an audio or video file, runs OpenAI's Whisper on it locally, and hands you back a list of segments with start times, end times, and text - the raw material for subtitles, transcripts, or a dubbing pipeline. And because it's built on faster-whisper (Systran's CTranslate2 reimplementation) rather than the original PyTorch Whisper, it runs several times faster than real time on a GPU and even tolerates CPU in a pinch. The same model weights, a much faster runtime, and no API key anywhere in sight.
You'll reach for it whenever a generated video needs to talk. You made a clip in Wan or LTX, you want an SRT to hardcode or upload, and manually timing captions is the worst part of the job. Or you're building the audio half of a pipeline - the KB's audio layer doc calls out that transcription is the step everyone bolts on when their silent clips need a voice. This is that step, and it slots into the graph cleanly: feed it a model from LoadFasterWhisperModel and a file path, wire the transcriptions into FasterWhisperToSubtitle, and you've got a subtitle file with zero typing.
How it works. The node is a thin wrapper around WhisperModel.transcribe(). Faster-whisper loads the CTranslate2-converted model, decodes your audio via PyAV (so you don't need a separate ffmpeg binary), and produces segments as a streaming generator. The node iterates that generator, pushes each segment's end time into a ComfyUI progress bar so you can watch it crawl, and packages everything as a TRANSCRIPTIONS object - a list of {start, end, text} dicts. That object is the thing you wire downstream.
The inputs that matter. There are a lot of knobs, and the honest truth is you'll touch about five:
audio(FILEPATH) andmodel(FASTERWHISPERMODEL) are required - the file to transcribe and the loaded model.languagedefaults to"auto", which the node rewrites toNoneso Whisper auto-detects. Type an ISO code likeenorkoif you want to force it (faster and more accurate when you know the language).task-transcribeortranslate. The latter transcribes and translates into English in one pass. Handy, but quality on the English side is Whisper's, so don't expect literary prose.word_timestamps- flip this on only if you need word-level timing for karaoke-style captions. It costs speed for little benefit on normal subtitles.vad_filterandhallucination_silence_threshold- this pair is your hallucination defense. Whisper famously invents text over silence and music. Enable the VAD filter (Silero voice-activity detection) and sethallucination_silence_thresholdto something like2.0to suppress nonsense on quiet stretches.initial_promptbiases vocabulary if the model keeps mangling a name or term.
Everything else - beam_size, temperature, the various thresholds - passes straight through to faster-whisper with sane defaults. Leave them alone until something misbehaves.
The one gotcha that will trip you: ComfyUI can't use None as a default value, so this author uses -999 and empty strings as "not set." Several fields (max_new_tokens, chunk_length, hallucination_silence_threshold, language_detection_threshold) ship at -999 meaning "disabled," not "minus 999 is a real setting." Don't clear them to zero expecting the same thing; zero is a real value to faster-whisper.
Output. One output, transcriptions (type TRANSCRIPTIONS). It wires straight into FasterWhisperToSubtitle.
Install. ComfyUI Manager (search "ComfyUI-faster-whisper") does it all, or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/jhj0517/ComfyUI-faster-whisper
cd ComfyUI-faster-whisper
pip install -r requirements.txt
Portable build: python_embeded\python.exe -m pip install -r ...\requirements.txt. Dependencies are light - just faster-whisper==1.0.3 and soundfile. Models auto-download to ComfyUI/models/faster-whisper on first run, so the first transcription needs a working network connection. The __init__.py also sets KMP_DUPLICATE_LIB_OK=True to defuse a known Intel OpenMP crash, so you don't have to.
Troubleshooting. Transcribing audio that switches languages mid-file is the weak spot - faster-whisper works, but quality drops sharply on mixed-language audio, and the community will tell you the same. Hallucinations on music or silence → enable vad_filter and a hallucination_silence_threshold. A file that refuses to transcribe → double-check the path in InputFilePath actually exists; the pack validates it and throws a "File not found" error rather than silently doing nothing.
Inputs (34)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | FILEPATH | — | |
| model | FASTERWHISPERMODEL | — | |
| languageopt | STRING | auto | — |
| taskopt | COMBO | 2 options: transcribe, translate | |
| beam_sizeopt | INT | 5 | — |
| log_prob_thresholdopt | FLOAT | -1.00 | — |
| no_speech_thresholdopt | FLOAT | 0.60 | — |
| best_ofopt | INT | 5 | — |
| patienceopt | FLOAT | 1.00 | — |
| temperatureopt | FLOAT | 0.00 | — |
| compression_ratio_thresholdopt | FLOAT | 2.40 | — |
| length_penaltyopt | FLOAT | 1.00 | — |
| repetition_penaltyopt | FLOAT | 1.00 | — |
| no_repeat_ngram_sizeopt | INT | 0 | — |
| prefixopt | STRING | — | |
| suppress_blankopt | BOOLEAN | true | — |
| suppress_tokensopt | STRING | [-1] | — |
| max_initial_timestampopt | FLOAT | 1.00 | — |
| word_timestampsopt | BOOLEAN | false | — |
| prepend_punctuationsopt | STRING | "'“¿([{- | — |
| append_punctuationsopt | STRING | "'.。,,!!??::”)]}、 | — |
| max_new_tokensopt | INT | -999 | — |
| chunk_lengthopt | INT | -999 | — |
| hallucination_silence_thresholdopt | FLOAT | -999.00 | — |
| hotwordsopt | STRING | — | |
| language_detection_thresholdopt | FLOAT | -999.00 | — |
| language_detection_segmentsopt | INT | 1 | — |
| prompt_reset_on_temperatureopt | FLOAT | 0.50 | — |
| condition_on_previous_textopt | BOOLEAN | true | — |
| initial_promptopt | STRING | — | |
| without_timestampsopt | BOOLEAN | false | — |
| vad_filteropt | BOOLEAN | false | — |
| vad_parametersopt | STRING | — | |
| clip_timestampsopt | STRING | 0 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| transcriptions | TRANSCRIPTIONS | — |