Nodes/Bjornulf_custom_nodes/๐Ÿ”Š TTS Configuration โš™
ComfyUI Node

๐Ÿ”Š TTS Configuration โš™

Set URL, language, and voice for Bjornulf XTTS

By justUmenยทCreated 2 years agoยทUpdated about a year agoยท 545
๐Ÿ”Š TTS Configuration โš™
    • TTS_URL
    • TTS_LANGUAGE
    • TTS_SPEAKER
    โ—„TTS_urlhttp://localhost:8020โ–บ
    โ—„languageEnglishโ–บ
    โ—„speaker_wavdefaultโ–บ

    This is the settings node for Bjornulf's XTTS text-to-speech setup. The main TTS node speaks text, but where it speaks to, in which language, and with which voice - that's what TTS Configuration overrides. You wire it into the TTS node only for the settings you want to change, and it can even ask the backend for the list of available voices in a given language.

    Where it fits

    Bjornulf's speech generation runs against a separate XTTS backend - a small server that does the actual voice synthesis, part of the author's "AI trio" alongside these nodes and his chat fork. The TTS node in ComfyUI talks to that server. TTS Configuration is the optional companion that hands the TTS node its connection and voice settings, so you're not re-entering them each time. If the defaults suit you, you don't need this node at all; it exists for when you want to point at a different server, switch languages, or select a specific speaker voice.

    Voice cloning is the payoff here. XTTS can speak in a voice sampled from a short reference clip, which is why the whole thing is worth the setup - you're not stuck with one robotic default, you can pick a language and a speaker and have your workflow narrate in it.

    How it works

    Three settings, three outputs, and the rule is: connect an output to the TTS node only for the setting you want to override. Leave the rest and the TTS node keeps its own values.

    • TTS_url - where the XTTS backend lives, default http://localhost:8020. Change it if your server runs on another host or port.
    • language - the speech language, from 17 options (English default, plus Spanish, French, German, Japanese, Korean, Arabic, and more). This also scopes which speaker voices the backend offers.
    • speaker_wav - the voice to use, default out of the box. This is the reference-voice selector; the node can request the backend's list of speakers for the chosen language so you pick from what's actually installed.

    The outputs are typed handles - TTS_URL, TTS_LANGUAGE, TTS_SPEAKER - that plug into the matching sockets on the TTS node. They're deliberately their own types so you connect them to the right inputs and nowhere else.

    Installing the pack - and the backend

    The nodes are one pack: ComfyUI Manager โ†’ Install Custom Nodes โ†’ search Bjornulf_custom_nodes โ†’ install โ†’ restart, or

    cd ComfyUI/custom_nodes
    git clone https://github.com/justUmen/Bjornulf_custom_nodes
    

    The thing that catches people: the XTTS node needs the XTTS server running separately. This config node defaults to http://localhost:8020, which is where that backend listens - but you have to install and start it yourself (see the Bjornulf_XTTS repo). No server, no speech, and no amount of fiddling with this node changes that. The pack's pydub dependency (in requirements.txt) handles the audio side; make sure it installed.

    If you'd rather avoid running a backend at all, note that the pack also ships a Kokoro TTS node that's fully self-contained (no external server) - different node, simpler setup, but no XTTS-style voice cloning.

    Common issues

    Ninety percent of "TTS does nothing" is the backend: the XTTS server isn't running, or it's on a different address than TTS_url points to. Confirm the server is up and the URL matches before touching anything else.

    The second thing is the connect-only-what-you-override rule. If you wire all three outputs in but only meant to change the language, you've also forced the URL and speaker - usually harmless, occasionally the reason your voice reverted unexpectedly. Connect just the setting you're changing. And if the speaker list comes back empty or wrong, it's language-scoped - pick the language first, and the backend serves the voices it actually has for it.

    CategoryBjornulf

    Inputs (3)

    NameTypeDefaultDescription
    TTS_urlSTRINGhttp://localhost:8020โ€”
    languageCOMBOEnglish17 options: Arabic, Czech, German, English, Spanish, French, +11
    speaker_wavSTRINGdefaultโ€”

    Outputs (3)

    NameTypeDescription
    TTS_URLTTS_URLโ€”
    TTS_LANGUAGETTS_LANGUAGEโ€”
    TTS_SPEAKERTTS_SPEAKERโ€”