ElevenLabs Pro - Speech to Text
Turn any AUDIO clip into text, speakers included
- audio
- text
- language_code
- words_json
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_speakersto your real count for cleaner separation; 0 means auto-detect, anddiarization_threshold(0.5 default) controls how strictly the model splits speakers. Higher = stricter separation, which over-splits noisy audio. - timestamps_granularity -
word(default),character, ornone. 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 sendsnonenow. - 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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| audio | AUDIO | — | |
| model | COMBO | scribe_v2 | 2 options: scribe_v2, scribe_v1 |
| language_codeopt | STRING | ISO language code (e.g. 'en', 'es'). Empty = auto-detect. | |
| tag_audio_eventsopt | BOOLEAN | false | Annotate sounds like (laughter), (music) in transcript. |
| diarizeopt | BOOLEAN | false | Identify and label different speakers. |
| num_speakersopt | INT | 00–32 | Expected number of speakers. 0 = auto-detect. |
| timestamps_granularityopt | COMBO | word | Timestamp granularity. 'none' returns no timing info (matches API spec). |
| seedopt | INT | 00–2147483647 | Seed for reproducibility. 0 = random. Determinism not guaranteed. |
| diarization_thresholdopt | FLOAT | 0.500–1 | Threshold for speaker diarization. Higher = stricter separation. |
| temperatureopt | FLOAT | 0.000–1 | Sampling temperature. 0 = deterministic. |
| keytermsopt | STRING | Comma-separated key terms to bias recognition toward. | |
| no_verbatimopt | BOOLEAN | false | Remove filler words and stutters (scribe_v2 only). |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| language_code | STRING | — |
| words_json | STRING | — |