Nodes/ComfyUI-ElevenLabs-Pro/ElevenLabs Pro - Speech to Text
ComfyUI Node

ElevenLabs Pro - Speech to Text

Turn any AUDIO clip into text, speakers included

By IxMxAMAR·Created 5 months ago·Updated about a month ago· 1
ElevenLabs Pro - Speech to Text
  • audio
  • text
  • language_code
  • words_json
api_key
modelscribe_v2
language_code
tag_audio_eventsfalse
diarizefalse
num_speakers0
timestamps_granularityword
seed0
diarization_threshold0.50
temperature0.00
keyterms
no_verbatimfalse

Sometimes you need the words back out of the audio. ElevenLabsPro_STT is the pack's Speech-to-Text node: feed it any AUDIO dict, get a transcript plus word-level timing. It's the node that turns a finished voiceover into captions, or an interview recording into a searchable script, and it does it with ElevenLabs' scribe models instead of a local transcription stack.

The mechanism is a multipart upload to /v1/speech-to-text - your audio goes up as a WAV with a set of transcription parameters, and a JSON response comes back with text, language_code, and the word/character-level words array. The model dropdown offers scribe_v2 (default) and scribe_v1. Because it's an InputCacheMixin node, identical input audio is cached by shape/sample-rate fingerprint and a re-queue won't re-bill you - but change the clip and you transcribe it again at full cost.

The inputs that actually matter:

  • language_code - ISO code like "en" or "es"; empty means auto-detect.
  • diarize + num_speakers - label who said what. Turn on diarization and set num_speakers to your real count for cleaner separation; 0 means auto-detect, and diarization_threshold (0.5 default) controls how strictly the model splits speakers. Higher = stricter separation, which over-splits noisy audio.
  • timestamps_granularity - word (default), character, or none. This one has a fun bug-history: v2.0 silently omitted the field when you picked "none," so the API cheerfully returned word timestamps anyway. v2.1 actually sends none now.
  • tag_audio_events - annotate sounds like (laughter) and (music) in the transcript. Great for turning a podcast into readable prose.
  • no_verbatim - strip fillers and stutters, scribe_v2 only. This is the "make it read clean" button.
  • keyterms - comma-separated terms to bias recognition toward (product names, jargon, proper nouns).

Outputs are text (the transcript), language_code, and words_json - and that words_json is the bridge to the pack's Subtitle Export node, which converts it straight into SRT or VTT captions. Text-to-speech gives you audio with timing; this node gives you timing with text, and the two meet in the subtitle tool.

Install is the pack standard:

cd ComfyUI/custom_nodes
git clone https://github.com/IxMxAMAR/ComfyUI-ElevenLabs-Pro.git
pip install -r ComfyUI-ElevenLabs-Pro/requirements.txt

Restart ComfyUI, or install "ComfyUI-ElevenLabs-Pro" via ComfyUI Manager. Requirements are just requests and soundfile; transcription runs in the cloud.

The practical tips that save people money and sanity: transcribe a clean signal - run Audio Isolation first on noisy recordings, because the scribe models transcribe what they hear and garbage in shows up as garbage words. Trim long files to what you actually need; billing scales with audio length. And if your transcript comes back with the wrong proper nouns, that's exactly what keyterms is for - one pass to teach it your vocabulary beats a dozen manual corrections.

CategoryElevenLabs Pro/Audio

Inputs (13)

NameTypeDefaultDescription
api_keySTRING
audioAUDIO
modelCOMBOscribe_v22 options: scribe_v2, scribe_v1
language_codeoptSTRINGISO language code (e.g. 'en', 'es'). Empty = auto-detect.
tag_audio_eventsoptBOOLEANfalseAnnotate sounds like (laughter), (music) in transcript.
diarizeoptBOOLEANfalseIdentify and label different speakers.
num_speakersoptINT00–32Expected number of speakers. 0 = auto-detect.
timestamps_granularityoptCOMBOwordTimestamp granularity. 'none' returns no timing info (matches API spec).
seedoptINT00–2147483647Seed for reproducibility. 0 = random. Determinism not guaranteed.
diarization_thresholdoptFLOAT0.500–1Threshold for speaker diarization. Higher = stricter separation.
temperatureoptFLOAT0.000–1Sampling temperature. 0 = deterministic.
keytermsoptSTRINGComma-separated key terms to bias recognition toward.
no_verbatimoptBOOLEANfalseRemove filler words and stutters (scribe_v2 only).

Outputs (3)

NameTypeDescription
textSTRING
language_codeSTRING
words_jsonSTRING