BYOKey ElevenLabs TTS
ElevenLabs TTS in ComfyUI — the voice bar, without leaving the graph
- audio
The KB's audio essay says it plainly: for best-in-class multilingual TTS, ElevenLabs is still the reliability bar, and the open tools - great as Chatterbox and Kokoro are - are the alternatives when you want local and private. If you want ElevenLabs specifically, and you want it inside a ComfyUI workflow, BYOKey_ElevenLabs_TTS is how: it calls api.elevenlabs.io/v1 with your own key (the xi-api-key header) and returns a real ComfyUI AUDIO output. No Comfy proxy, no credits.
Where this lands in a pipeline: you've got a video (or a talking head, or a storyboard) that needs a voice, and you want the generation and the voice in the same graph - text in one node, voice out the other, synced downstream. ElevenLabs is the "when a mispronunciation is expensive" choice, which is the production use case the KB says still routes to the API.
How it works
It POSTs to ElevenLabs' /text-to-speech/{voice_id} endpoint with your text and voice settings, gets back audio bytes in your chosen format, and decodes them into ComfyUI's AUDIO output (a waveform + sample-rate dict). The output is a normal audio tensor you can save or feed into audio/video combination nodes.
The inputs that matter
voice- the ElevenLabs voice ID, defaulting to21m00Tcm4TlvDq8ikWAM(the well-known default voice "Rachel"). Swap in any voice ID from your ElevenLabs account, or one you've cloned.model-eleven_multilingual_v2(default) oreleven_v3. The version matters because it changes which settings are honored: the source comment notes eleven_v3 only supports speed and similarity_boost - so if you've setstability,style, oruse_speaker_boostand they seem to be doing nothing, check which model you're on.stability(default 0.5) - lower values give broader emotional range, higher values are more consistent but more monotonous. The voice-consistency vs. expressiveness trade.similarity_boost(default 0.75) - how closely the output matches the reference voice. Too high and you can get artifacts on longer text.speed- 0.7 to 1.3, 1.0 normal.style(0–0.2, multilingual_v2 only) - style exaggeration. The tooltip warns higher values can reduce stability.language_code- ISO-639 code likeen,es,fra; leave empty for auto-detection. Worth setting if you're not getting the language detection you expect.output_format-mp3_44100_192oropus_48000_192.
Output is audio (AUDIO) - wire it into a Save Audio node or whatever consumes AUDIO in your setup.
Installing it
It's one of 37 nodes in the comfyui-byokey pack, no extra dependencies beyond ComfyUI's bundled torch/aiohttp/PIL/numpy/av. Install via ComfyUI Manager (search "byokey") or:
cd ComfyUI/custom_nodes
git clone https://github.com/MeteorAndy/comfyui-byokey.git
Restart, and it's under api/byokey/audio.
Gotchas
The biggest trap is the model-vs-settings mismatch above - multilingual_v2 and v3 accept different setting sets, and the node won't complain, it'll just silently ignore what the model doesn't support. If your voice sounds different than configured, that's the first thing to check. Second: seed exists for reproducibility, but determinism isn't guaranteed (the tooltip says so), so don't build a pipeline that depends on identical audio across runs. Third, the usual pack hygiene: your key lives in the widget and gets saved into workflow JSON - scrub it before sharing workflows. And worth remembering: ElevenLabs is the paid reliability bar, which is exactly why you're here - but for private, local, clone-your-own-voice work, the KB notes the open models are genuinely close now. If your pipeline needs ElevenLabs quality, this is the clean way to get it in-graph.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | Your ElevenLabs API key (xi-api-key). | |
| base_url | STRING | https://api.elevenlabs.io/v1 | ElevenLabs API base URL. Change only for relays/proxies. |
| voice | STRING | 21m00Tcm4TlvDq8ikWAM | ElevenLabs voice ID to use for speech synthesis. |
| text | STRING | The text to convert to speech. | |
| modelopt | COMBO | eleven_multilingual_v2 | Model to use for text-to-speech. |
| stabilityopt | FLOAT | 0.500–1 | Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech. |
| similarity_boostopt | FLOAT | 0.750–1 | Similarity boost. Higher values make the voice more similar to the original. |
| speedopt | FLOAT | 1.000.7–1.3 | Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster. |
| styleopt | FLOAT | 0.000–0.2 | Style exaggeration (eleven_multilingual_v2 only). Higher values increase stylistic expression but may reduce stability. |
| use_speaker_boostopt | BOOLEAN | false | Boost similarity to the original speaker voice (eleven_multilingual_v2 only). |
| apply_text_normalizationopt | COMBO | auto | Text normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it. |
| language_codeopt | STRING | ISO-639-1 or ISO-639-3 language code (e.g. 'en', 'es', 'fra'). Leave empty for automatic detection. | |
| seedopt | INT | 10–2147483647 | Seed for reproducibility (determinism not guaranteed). |
| output_formatopt | COMBO | mp3_44100_192 | Audio output format. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |