Nodes/ComfyUI API Toolkit/ElevenLabs - Speech to Text
ComfyUI Node

ElevenLabs - Speech to Text

Speech to Text with diarization, so your transcript knows who said what

By IxMxAMAR·Created 5 months ago·Updated 2 months ago· 1
ElevenLabs - 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

ElevenLabs isn't just a voice company - its Scribe model transcribes too, and this node wraps it. Feed it an AUDIO input and it returns the text, the detected language, and per-word timing. If you're building a pipeline that turns a recorded voice track into captions, a script for re-voicing, or a searchable transcript, this is the node that closes the loop inside ComfyUI.

You give it three required inputs: api_key, audio (any AUDIO from another node - a loaded file, a TTS result, a voice clone sample), and model (currently just scribe_v2). Then the controls that matter:

  • diarize - label who's speaking. Turn it on and the transcript splits into speakers, which is the difference between "a wall of text" and "a usable podcast script."
  • num_speakers - tell it how many voices to expect (0 = auto-detect). Setting this helps when diarization keeps merging two people.
  • diarization_threshold - higher is stricter about separating speakers. If the diarizer is fragmenting one person into many, raise it.
  • timestamps_granularity - word, character, or none. Choose word when you're going to rebuild captions from the timing.
  • keyterms - comma-separated terms to bias recognition toward. The fix for Scribe consistently mangling your product name or a character's name.
  • tag_audio_events - annotate sounds like (laughter) and (music) in the transcript. Nice for video editing notes.
  • no_verbatim - strip filler words and stutters ("um", "uh") for a cleaner read.

Outputs: text (the transcript), language_code (e.g. en; empty input means auto-detect), and words_json (per-word timing and confidence, when you asked for it).

How to run it

Any node that produces AUDIO feeds it - a TTS node for round-tripping a script you want to verify, an audio loader for real recordings. For a voice-clone workflow, running STT on your reference samples is a good sanity check that the audio is clean enough to clone from. For captions, take words_json and the audio and drive a subtitle renderer with real timing instead of guessing.

Installing it

Part of the ComfyUI API Toolkit pack. Manager: search "API Toolkit". Manual:

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

Restart. Requires requests and soundfile - soundfile is what converts the AUDIO input to WAV for upload, so don't skip it.

Gotchas

  • The pack re-executes API nodes every queue (IS_CHANGED), so each run is a fresh transcription - good for correctness, easy to forget when batching.
  • Diarization isn't magic. Busy or overlapping speech still confuses it; setting num_speakers and tuning diarization_threshold is the actual fix, not re-running.
  • For unlimited local transcription, whisper-based nodes are the free alternative; this one wins on the built-in diarization and event tagging being one node away.
CategoryAPI Toolkit/ElevenLabs/Audio

Inputs (13)

NameTypeDefaultDescription
api_keySTRING
audioAUDIO
modelCOMBOscribe_v21 options: scribe_v2
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_granularityoptCOMBOword3 options: word, character, none
seedoptINT00–2147483647Seed for reproducibility. 0 = random. Determinism not guaranteed.
diarization_thresholdoptFLOAT0.500–1Threshold for speaker diarization. Higher = stricter speaker separation.
temperatureoptFLOAT0.000–1Sampling temperature. 0 = deterministic.
keytermsoptSTRINGComma-separated key terms to bias recognition toward.
no_verbatimoptBOOLEANfalseWhen True, removes filler words and stutters from transcript.

Outputs (3)

NameTypeDescription
textSTRING
language_codeSTRING
words_jsonSTRING