ComfyUI Node

ElevenlabsTextToSpeech

Give your ComfyUI video a real voice (you'll need an ElevenLabs key)

By sysL-padawan·Created about a year ago·Updated about a year ago· 3
ElevenlabsTextToSpeech
    • audio
    texttext to speech
    api_key
    voice_id
    model_ideleven_multilingual_v2
    seed
    apply_text_normalizationauto
    voice_settings_stability0.50
    voice_settings_use_speaker_boosttrue
    voice_settings_similarity_boost0.80
    voice_settings_style0.00
    voice_settings_speed1.00

    You've got the animated face, the looped motion, the perfectly framed shots - and the whole thing is silent. This node is the "make it talk" step: drop a line of text in, and it returns an audio tensor you can feed straight into a lipsync node or save alongside your video. No local TTS model, no download, no VRAM cost. It's a thin wrapper around the ElevenLabs text-to-speech API, which means the actual voice work happens in someone else's cloud and you pay for it in API credits.

    What it actually does

    Under the hood it's simple: it takes your text, voice, and voice-settings, calls ElevenLabs' text_to_speech.convert, streams the returned MP3 bytes into a temp file, decodes them with soundfile to float32, averages stereo down to mono, reshapes to a [1, 1, samples] tensor, and hands you the standard ComfyUI audio dict: {"waveform": tensor, "sample_rate": 44100}. Every execution is a fresh API call - there's no caching. Rerun the graph and you spend credits again. That's the one thing beginners consistently forget: this isn't a local generator, it's a billing meter with a nice UI.

    The inputs that matter

    The required set is small: text (multiline, what gets spoken), api_key (your ElevenLabs key), voice_id (the ID string from any voice in your ElevenLabs library - grab it from the voice's URL or your account), and model_id. The model dropdown is already populated: eleven_multilingual_v2 is the sensible default (good quality, ~29 languages), and eleven_turbo_v2_5 / eleven_flash_v2_5 exist if you care more about latency than polish. The eleven_*_sts_v2 entries are the style-transfer voices - worth ignoring until you know you need them.

    The voice settings are where the personality comes from, and they're all floats you can leave alone at first:

    • stability (0–1, default 0.5): emotional range and variation. Low = more energy and wobble, high = flat and steady.
    • similarity_boost (0–1, default 0.8): how closely the output matches the original voice. Crank it for cloned voices; back it off if it sounds uncanny.
    • style (default 0), speed (0.5–2, default 1), use_speaker_boost (default on): all self-explanatory.

    Two quiet traps. First, seed is a string input, not a number - and it's only sent to the API if it's non-empty, so leave it blank unless you're hunting reproducible takes. Second, the README lists an output_format input, but the shipped code hardcodes mp3_44100_128. Don't go hunting for that field in the node; you get 44.1 kHz mono, period. apply_text_normalization (auto/on/off) just controls whether the API expands things like "vs." and numbers before speaking.

    Where the output goes

    The single output is audio (type AUDIO). That dict format is what lipsync-style nodes expect - EchoMimic, Live Portrait lipsync and friends take it as the "talking audio" - and it also plugs straight into VHS (VideoHelperSuite) audio nodes if you want to save the video with the voice burned in. Typical flow: text → this node → lipsync node → video out, with the same audio going to a save node.

    Installing it

    ComfyUI Manager is the easy route: search "ElevenLabs" and install the pack. Or the manual way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/sysL-padawan/comfyui-elevenlabs-integration.git
    cd comfyui-elevenlabs-integration
    pip install -r requirements.txt
    

    Then restart ComfyUI. The dependencies are genuinely light - just elevenlabs and soundfile - and there are no model files to download anywhere. The heavy lifting all happens server-side.

    Issues and gotchas

    Because the pack is a thin API wrapper, almost nothing can go wrong locally. The failures you'll actually see are: an invalid or unfunded API key (ElevenLabs returns an auth error and the node fails), no network, or missing soundfile if you skipped the pip step. The silent killer is cost - if you leave this node in a graph you re-run a lot, each queue run is a fresh API charge. Tuck the API key in properly, don't leave it in a workflow you share (it's plaintext in the saved JSON), and you're fine. It's an obscure, zero-reputation pack that does one thing, but that one thing it does cleanly.

    CategoryElevenlabs API integration by 奥利奥

    Inputs (11)

    NameTypeDefaultDescription
    textSTRINGtext to speech
    api_keySTRING
    voice_idSTRING
    model_idCOMBOeleven_multilingual_v29 options: eleven_multilingual_v2, eleven_flash_v2_5, eleven_turbo_v2_5, eleven_turbo_v2, eleven_flash_v2, eleven_english_sts_v2, +3
    seedoptSTRING
    apply_text_normalizationoptCOMBOauto3 options: auto, on, off
    voice_settings_stabilityoptFLOAT0.500–1
    voice_settings_use_speaker_boostoptBOOLEANtrue
    voice_settings_similarity_boostoptFLOAT0.800–1
    voice_settings_styleoptFLOAT0.000–1
    voice_settings_speedoptFLOAT1.000.5–2

    Outputs (1)

    NameTypeDescription
    audioAUDIO