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 6 months ago·Updated 9 days ago· 1
ElevenLabs Pro - Speech to Text
  • audio
  • text
  • language_code
  • words_json
  • edited_text
◄api_key►
◄modelscribe_v2►
◄language_code►
◄tag_audio_eventsfalse►
◄diarizefalse►
◄num_speakers0►
◄timestamps_granularityword►
◄seed0►
◄diarization_threshold0.50►
◄temperature0.00►
◄keyterms►
◄no_verbatimfalse►
◄transcript_edit►
◄use_multi_channelfalse►
◄detect_speaker_rolesfalse►

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 (16)

NameTypeDefaultDescription
api_keySTRING—
audioAUDIO—
modelCOMBOscribe_v22 options: scribe_v2, scribe_v2_medical
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–1Speaker diarization threshold. Higher = fewer speakers predicted. 0.5 = not sent (model default, usually 0.22). The API accepts 0.1-0.4 and only with diarize on and num_speakers 0.
temperatureoptFLOAT0.000–1Sampling temperature. 0 = deterministic.
keytermsoptSTRINGComma-separated key terms to bias recognition toward.
no_verbatimoptBOOLEANfalseRemove filler words and stutters (scribe_v2 only).
transcript_editoptSTRINGNatural-language instruction applied to the final transcript (max 2000 characters), e.g. 'fix punctuation'. Result is on the edited_text output. Cannot be combined with use_multi_channel. Billed extra.
use_multi_channeloptBOOLEANfalseTreat each channel of the audio as one speaker and transcribe channels independently. Words carry a channel_index.
detect_speaker_rolesoptBOOLEANfalseLabel speakers as 'agent' / 'customer'. Requires diarize; cannot be combined with use_multi_channel. Billed extra.

Outputs (4)

NameTypeDescription
textSTRING—
language_codeSTRING—
words_jsonSTRING—
edited_textSTRING—