ComfyUI Node

TTS WebUI Chatterbox

The ElevenLabs-level clone, dials included

By rsxdalv·Created 12 months ago·Updated 12 months ago· 5
TTS WebUI Chatterbox
    • audio
    • wav_path
    • metadata_json
    ◄textHello►
    ◄api_basehttp://127.0.0.1:7778►
    ◄api_key►
    ◄exaggeration0.50►
    ◄cfg_weight0.50►
    ◄temperature0.80►
    ◄audio_prompt_path►
    ◄model_namejust_a_placeholder►
    ◄language_iden►
    ◄devicecuda►
    ◄dtypefloat32►
    ◄cpu_offloadfalse►
    ◄chunkedfalse►
    ◄cache_voicefalse►
    ◄desired_length200►
    ◄max_length300►
    ◄halve_first_chunkfalse►
    ◄seed-1►
    ◄streamingfalse►
    ◄max_new_tokens1000►
    ◄max_cache_len1500►
    ◄initial_forward_pass_backendeager►
    ◄generate_token_backendcudagraphs-manual►
    ◄timeout_sec120►
    ◄channels_firsttrue►
    ◄also_save_wavfalse►
    ◄save_prefixtts►
    ◄return_metadatatrue►

    Resemble AI's Chatterbox 0.5B is the model that ended Kokoro's reign as the community's open-source TTS darling. The early verdict was genuinely giddy: "genuinely on ElevenLabs level if not better," great voice cloning, and the main complaint was that it's slower than F5-TTS - around 4–7 seconds per generation on a 4090 versus F5's sub-2. If you want the best-sounding open weights TTS you can run, this is the node you want, and it's also the one with the most knobs in the whole pack.

    How it works

    Like every node here, it's a thin client: it POSTs an OpenAI-style body to your TTS WebUI server at http://127.0.0.1:7778/v1/audio/speech with model: "chatterbox", and the server does the actual generation. Chatterbox is a decoder-based model, so there are real token-generation settings hiding in here - most of them are server-side, and you can ignore them until you need them.

    The inputs that matter

    • audio_prompt_path - the reference audio for voice cloning. This is where Chatterbox earns its reputation; give it a short clip of a voice and it'll match it well.
    • exaggeration (0–2, default 0.5) and cfg_weight (0–2, default 0.5) - the two dials that control how emotive and how "prompt-locked" the output is. Crank exaggeration for drama, drop it for flat narration.
    • temperature (default 0.8) - the usual randomness knob.
    • language_id (default en) - the language Chatterbox generates in.
    • seed - default -1 for random, or set it for reproducible takes.

    The rest - chunked, desired_length/max_length, halve_first_chunk, streaming, max_new_tokens, max_cache_len, cache_voice, device, dtype, cpu_offload, and the two *_backend fields - are advanced generation settings that map onto Chatterbox's own inference knobs. You will almost certainly not touch most of them. chunked is the one worth knowing: it splits long text into chunks, which is what you want for longform narration so the model doesn't run out of context.

    Outputs

    audio (AUDIO) for a preview/save node, wav_path (STRING) when also_save_wav is on, metadata_json (STRING) with request details and WAV stats.

    Installing it

    ComfyUI Manager → search "TTS WebUI API nodes for ComfyUI", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/rsxdalv/ComfyUI-TTS-Webui
    

    then restart. The pack only needs requests, numpy, torch - nothing to pip install, nothing to download here. Chatterbox's weights download into the TTS WebUI server on first load.

    When it breaks

    • Connection refused: the server isn't running on 127.0.0.1:7778, or it's on another machine and api_base doesn't point at it.
    • First call blows past the timeout: Chatterbox 0.5B is a real model - first load can take a while. Raise timeout_sec (max 600).
    • Cloned voice sounds off: Chatterbox wants clean reference audio; a noisy or multi-speaker clip will clone badly regardless of settings.
    • Long text gets cut or degrades: turn on chunked and check max_length.

    Worth repeating: this node is the reason to run this pack at all for quality-first work. The trade-off is speed and VRAM - if you need quick iteration, Kokoro is the lighter option.

    CategoryAudio/TTS

    Inputs (28)

    NameTypeDefaultDescription
    textSTRINGHello—
    api_baseSTRINGhttp://127.0.0.1:7778—
    api_keyoptSTRING—
    exaggerationoptFLOAT0.500–2—
    cfg_weightoptFLOAT0.500–2—
    temperatureoptFLOAT0.800–2—
    audio_prompt_pathoptSTRING—
    model_nameoptSTRINGjust_a_placeholder—
    language_idoptSTRINGen—
    deviceoptSTRINGcuda—
    dtypeoptSTRINGfloat32—
    cpu_offloadoptBOOLEANfalse—
    chunkedoptBOOLEANfalse—
    cache_voiceoptBOOLEANfalse—
    desired_lengthoptINT2001–4000—
    max_lengthoptINT3001–4000—
    halve_first_chunkoptBOOLEANfalse—
    seedoptINT-1-1–2147483647—
    streamingoptBOOLEANfalse—
    max_new_tokensoptINT10001–4096—
    max_cache_lenoptINT15001–8192—
    initial_forward_pass_backendoptSTRINGeager—
    generate_token_backendoptSTRINGcudagraphs-manual—
    timeout_secoptINT1201–600—
    channels_firstoptBOOLEANtrue—
    also_save_wavoptBOOLEANfalse—
    save_prefixoptSTRINGtts—
    return_metadataoptBOOLEANtrue—

    Outputs (3)

    NameTypeDescription
    audioAUDIO—
    wav_pathSTRING—
    metadata_jsonSTRING—