Nodes/ComfyUI-faster-whisper/FasterWhisper Transcription
ComfyUI Node

FasterWhisper Transcription

FasterWhisper Transcription in ComfyUI

By jhj0517·Created 2 years ago·Updated about a year ago· 23
FasterWhisper Transcription
  • audio
  • model
  • transcriptions
languageauto
task
beam_size5
log_prob_threshold-1.00
no_speech_threshold0.60
best_of5
patience1.00
temperature0.00
compression_ratio_threshold2.40
length_penalty1.00
repetition_penalty1.00
no_repeat_ngram_size0
prefix
suppress_blanktrue
suppress_tokens[-1]
max_initial_timestamp1.00
word_timestampsfalse
prepend_punctuations"'“¿([{-
append_punctuations"'.。,,!!??::”)]}、
max_new_tokens-999
chunk_length-999
hallucination_silence_threshold-999.00
hotwords
language_detection_threshold-999.00
language_detection_segments1
prompt_reset_on_temperature0.50
condition_on_previous_texttrue
initial_prompt
without_timestampsfalse
vad_filterfalse
vad_parameters
clip_timestamps0

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) and model (FASTERWHISPERMODEL) are required - the file to transcribe and the loaded model.
  • language defaults to "auto", which the node rewrites to None so Whisper auto-detects. Type an ISO code like en or ko if you want to force it (faster and more accurate when you know the language).
  • task - transcribe or translate. 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_filter and hallucination_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 set hallucination_silence_threshold to something like 2.0 to suppress nonsense on quiet stretches. initial_prompt biases 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.

CategoryFASTERWHISPER

Inputs (34)

NameTypeDefaultDescription
audioFILEPATH
modelFASTERWHISPERMODEL
languageoptSTRINGauto
taskoptCOMBO2 options: transcribe, translate
beam_sizeoptINT5
log_prob_thresholdoptFLOAT-1.00
no_speech_thresholdoptFLOAT0.60
best_ofoptINT5
patienceoptFLOAT1.00
temperatureoptFLOAT0.00
compression_ratio_thresholdoptFLOAT2.40
length_penaltyoptFLOAT1.00
repetition_penaltyoptFLOAT1.00
no_repeat_ngram_sizeoptINT0
prefixoptSTRING
suppress_blankoptBOOLEANtrue
suppress_tokensoptSTRING[-1]
max_initial_timestampoptFLOAT1.00
word_timestampsoptBOOLEANfalse
prepend_punctuationsoptSTRING"'“¿([{-
append_punctuationsoptSTRING"'.。,,!!??::”)]}、
max_new_tokensoptINT-999
chunk_lengthoptINT-999
hallucination_silence_thresholdoptFLOAT-999.00
hotwordsoptSTRING
language_detection_thresholdoptFLOAT-999.00
language_detection_segmentsoptINT1
prompt_reset_on_temperatureoptFLOAT0.50
condition_on_previous_textoptBOOLEANtrue
initial_promptoptSTRING
without_timestampsoptBOOLEANfalse
vad_filteroptBOOLEANfalse
vad_parametersoptSTRING
clip_timestampsoptSTRING0

Outputs (1)

NameTypeDescription
transcriptionsTRANSCRIPTIONS