ComfyUI Node

Soprano TTS

The TTS node that narrates your renders before you finish blinking

By SanDiegoDude·Created 8 months ago·Updated 8 months ago· 5
Soprano TTS
    • audio
    textHello! I am Soprano, an ultra-lightweight text to speech model.
    temperature0.30
    top_p0.95
    repetition_penalty1.20
    seed-1
    keep_model_loadedfalse
    filename_prefixaudio/soprano_tts
    formatwav
    bitrate320k
    savetrue
    autoplaytrue

    ComfyUI is finally getting good at audio, and this is one of the friendliest on-ramps. Soprano TTS drops a real text-to-speech model into your graph - no API key, no cloud service, no second machine. You type a sentence, hit run, and a few hundred milliseconds later there's a waveform and a little audio player sitting right on the node. It's the rare custom node where the first run feels like it's showing off.

    Under the hood it's a wrapper around Soprano, an 80M-parameter model by Eugene Kwok that got a genuinely warm reception on r/StableDiffusion when it dropped. Soprano is a tiny language model that spits out audio tokens, plus a vocoder-based decoder (Vocos-inspired) that turns those tokens into 32kHz audio far faster than the diffusion-based decoders most TTS models use. It also generates sentence-by-sentence and stitches the results, which keeps long text fast. The base model hits up to 2000x real-time with its fancy lmdeploy backend; this node runs the transformers backend at a still-absurd ~100-200x real-time, and the README is refreshingly honest about that trade.

    The clever part is the install. Soprano officially wants PyTorch 2.8+, which would nuke your ComfyUI (2.5.1) the moment pip resolved dependencies - the classic custom-node dependency hell, except this pack shipped a way out. You install soprano-tts --no-deps so the problematic lmdeploy dependency never lands, and the included soprano_compat.py stubs out torch.compiler.disable so the model runs fine on older PyTorch. It's a small, thoughtful compatibility layer that more packs should copy.

    The inputs that actually matter

    The node has 11 inputs, but you'll touch about five. text is the star - a multiline box; 2-15 second sentences work best, and spell out numbers ("one plus one" instead of "1+1") because special characters confuse it. temperature (default 0.3, range 0-2) is your consistency dial: lower it toward 0.2 if output sounds mushy or weird. top_p (0.95) and repetition_penalty (1.2) are standard sampling knobs - leave them alone until something's wrong. seed is a lie in the best way: it's not used for generation at all, it just forces ComfyUI to re-run the node so you can regenerate. Change it to hear a new take.

    The rest are file plumbing. filename_prefix defaults to audio/soprano_tts under your output folder; format switches wav/mp3/flac/ogg; bitrate only applies to compressed formats. keep_model_loaded keeps the ~80M model warm in VRAM for fast repeat runs - off by default, and fine to leave off unless you're batching a lot of lines. save and autoplay do what they say.

    Output

    One output, audio, of type AUDIO - the standard ComfyUI {waveform, sample_rate} dict at 32kHz. Wire it into any audio node for saving, mixing, or muxing with a video you just rendered. That's the real killer use case: narrate an image-to-video result, or add a voiceover to an animated workflow, all locally.

    Install

    Via ComfyUI Manager, search "ComfyUI-Soprano-TTS" and install - or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/SanDiegoDude/ComfyUI-Soprano-TTS
    

    Then the manual step, which is the whole ballgame:

    pip install soprano-tts --no-deps
    pip install unidecode
    

    Don't skip the --no-deps. If you install soprano-tts normally, pip upgrades PyTorch and ComfyUI dies with ImportError: undefined symbol: ncclMemFree. First run downloads the ~500MB Soprano-80M model from HuggingFace. Want mp3/flac/ogg export? You need ffmpeg on the system and pip install pydub.

    Troubleshooting

    • "No module named 'soprano'" - you cloned the repo but never ran the pip steps. Run them.
    • ComfyUI won't start after installing - you got the full PyTorch upgrade. Uninstall lmdeploy torch triton and reinstall PyTorch 2.5.1 (the README has the exact commands).
    • Rough audio - drop temperature to 0.2, spell out numbers, keep sentences in range.
    • Node missing from the menu - restart ComfyUI fully; check the console for import errors.

    It's not a voice-cloning or multilingual tool - no streaming either, thanks to the transformers backend - but for fast, natural local narration, it's the one I'd reach for.

    Categoryaudio/generation

    Inputs (11)

    NameTypeDefaultDescription
    textSTRINGHello! I am Soprano, an ultra-lightweight text to speech model.
    temperatureFLOAT0.300–2
    top_pFLOAT0.950–1
    repetition_penaltyFLOAT1.201–2
    seedINT-1-1–2147483647
    keep_model_loadedBOOLEANfalse
    filename_prefixSTRINGaudio/soprano_tts
    formatCOMBOwav4 options: wav, mp3, flac, ogg
    bitrateCOMBO320k5 options: 128k, 192k, 256k, 320k, VBR
    saveBOOLEANtrue
    autoplayBOOLEANtrue

    Outputs (1)

    NameTypeDescription
    audioAUDIO