Nodes/ComfyUI/ElevenLabs Speech to Text
ComfyUI Node Runs on cloud

ElevenLabs Speech to Text

Transcribe audio, speakers and sound effects included

By Comfy-Org·Created 4 years ago·Updated about 14 hours ago· 130,663
ElevenLabs Speech to Text
  • audio
  • text
  • language_code
  • words_json
model
language_code
num_speakers0
seed1

ElevenLabsSpeechToText is the transcription node in the ElevenLabs audio family, and it's more than a transcript. It'll detect the language, figure out how many people are talking and which one is which, and even annotate non-speech sounds like (laughter) or (music) in the text. That makes it the backbone of a real subtitle pipeline - and of a sneaky-good loop where you transcribe audio, then feed the text back through ElevenLabsTextToSpeech to re-voice it.

Partner-node architecture as usual: your audio goes up to ElevenLabs' hosted scribe_v2 model through Comfy's API proxy, billed per minute of audio from your Comfy account credits (Settings → Credits). No ElevenLabs key, ships with core, nothing to install.

The inputs that matter

  • audio - the clip to transcribe.
  • model - scribe_v2, which reveals its own sub-settings: tag_audio_events (annotate sounds in the transcript), diarize (mark who's speaking), diarization_threshold (speaker-change sensitivity, default 0.22), temperature, and timestamps_granularity (word, character, or none).
  • num_speakers - maximum speakers to predict, 0 to 32. 0 means auto-detect, which is the right call most of the time.
  • language_code - ISO-639-1/639-3, or empty for auto-detection.
  • seed - best-effort reproducibility; don't expect identical output.

The three outputs

  • text - the transcript as a string.
  • language_code - what it detected, so downstream nodes can react to it.
  • words_json - the detailed payload: word-level timestamps, speaker labels, and audio-event annotations, as a JSON string. This is what a subtitle renderer or a splitter would consume.

Wire text into any string input - a text node, an LLM node, or back into TTS. This is the only node in the ElevenLabs group whose interesting output is a string, not AUDIO.

The trap that'll get you

You can't set num_speakers and enable diarize at the same time. The node raises a clear error if you try: "Number of speakers cannot be specified when diarization is enabled." Diarization figures out the speaker count itself. If you know the count, turn diarize off and set it; if you don't, leave it at 0 and let diarize run. Doing both is how people burn a billed call on an immediate error.

Honest notes

  • Per-minute billing again - long files cost; split them first if you're iterating.
  • Diarization is good, not perfect: same-y voices can get merged, and the threshold slider is the tuning knob when it merges too eagerly (lower = more sensitive to changes).
  • For clean short clips it's overkill, but for a noisy podcast or a two-person interview it earns its credits.

Ships with ComfyUI core. Transcribe, diarize, re-voice, repeat - it closes the audio loop inside one graph.

Categorypartner/audio/ElevenLabs

Inputs (5)

NameTypeDefaultDescription
audioAUDIOAudio to transcribe.
modelCOMBOModel to use for transcription.
language_codeSTRINGISO-639-1 or ISO-639-3 language code (e.g., 'en', 'es', 'fra'). Leave empty for automatic detection.
num_speakersINT00–32Maximum number of speakers to predict. Set to 0 for automatic detection.
seedINT10–2147483647Seed for reproducibility (determinism not guaranteed).

Outputs (3)

NameTypeDescription
textSTRING
language_codeSTRING
words_jsonSTRING