Nodes/comfyui-byokey/BYOKey ElevenLabs TTS
ComfyUI Node

BYOKey ElevenLabs TTS

ElevenLabs TTS in ComfyUI — the voice bar, without leaving the graph

By MeteorAndy·Created 4 months ago·Updated 3 months ago· 0
BYOKey ElevenLabs TTS
    • audio
    api_key
    base_urlhttps://api.elevenlabs.io/v1
    voice21m00Tcm4TlvDq8ikWAM
    text
    modeleleven_multilingual_v2
    stability0.50
    similarity_boost0.75
    speed1.00
    style0.00
    use_speaker_boostfalse
    apply_text_normalizationauto
    language_code
    seed1
    output_formatmp3_44100_192

    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 to 21m00Tcm4TlvDq8ikWAM (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) or eleven_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 set stability, style, or use_speaker_boost and 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 like en, es, fra; leave empty for auto-detection. Worth setting if you're not getting the language detection you expect.
    • output_format - mp3_44100_192 or opus_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.

    Categoryapi/byokey/audio

    Inputs (14)

    NameTypeDefaultDescription
    api_keySTRINGYour ElevenLabs API key (xi-api-key).
    base_urlSTRINGhttps://api.elevenlabs.io/v1ElevenLabs API base URL. Change only for relays/proxies.
    voiceSTRING21m00Tcm4TlvDq8ikWAMElevenLabs voice ID to use for speech synthesis.
    textSTRINGThe text to convert to speech.
    modeloptCOMBOeleven_multilingual_v2Model to use for text-to-speech.
    stabilityoptFLOAT0.500–1Voice stability. Lower values give broader emotional range, higher values produce more consistent but potentially monotonous speech.
    similarity_boostoptFLOAT0.750–1Similarity boost. Higher values make the voice more similar to the original.
    speedoptFLOAT1.000.7–1.3Speech speed. 1.0 is normal, <1.0 slower, >1.0 faster.
    styleoptFLOAT0.000–0.2Style exaggeration (eleven_multilingual_v2 only). Higher values increase stylistic expression but may reduce stability.
    use_speaker_boostoptBOOLEANfalseBoost similarity to the original speaker voice (eleven_multilingual_v2 only).
    apply_text_normalizationoptCOMBOautoText normalization mode. 'auto' lets the system decide, 'on' always applies normalization, 'off' skips it.
    language_codeoptSTRINGISO-639-1 or ISO-639-3 language code (e.g. 'en', 'es', 'fra'). Leave empty for automatic detection.
    seedoptINT10–2147483647Seed for reproducibility (determinism not guaranteed).
    output_formatoptCOMBOmp3_44100_192Audio output format.

    Outputs (1)

    NameTypeDescription
    audioAUDIO