Nodes/EcoHash/EcoHash TTS
ComfyUI Node

EcoHash TTS

Give your silent renders a voice — hosted TTS with zero dependency pain

By ecohash-ai·Created about a month ago·Updated about a month ago· 0
EcoHash TTS
    • AUDIO
    model
    text
    voiceaf_bella
    speed1.00

    Your video render is done and it's silent, which in 2026 feels unfinished. EcoHash TTS is the fastest on-ramp from text to a AUDIO tensor in ComfyUI: type the line, get a spoken AUDIO clip back, wire it into PreviewAudio, a save node, or an avatar pipeline. It's one of six nodes in the ComfyUI-EcoHash pack, and like the others it runs on EcoHash's servers - no model download, no VRAM, and crucially, no dependency hell.

    Why hosted TTS actually wins here

    Here's the take: audio is the one ComfyUI corner where the hosted path genuinely beats local, not just on convenience but on sanity. Local TTS in ComfyUI means node packs fighting transformers/torch/tokenizer conflicts - the maintainers of the big TTS suites say it themselves: "add one new model and break 3 old ones." This node's entire dependency is requests. No 500 MB of Kokoro weights to source, no ONNX runtime version roulette. If all you need is a plausible voice for narration or a line of dialogue, this is the frictionless path - you pay per call instead of per installation headache.

    How it works

    The node POSTs your text to /audio/speech asking for WAV bytes back, then decodes them into ComfyUI's AUDIO format (a waveform tensor plus sample rate), so it drops into any node that accepts AUDIO. The model dropdown has two hosted options: kokoro-82m - hexgrad's tiny 82M TTS, the community's "best voice per unit of compute," fast and clean - is the sensible default, with qwen3-tts as the richer alternative.

    The inputs that matter

    • model - kokoro-82m (default pick) or qwen3-tts.
    • text - the line to speak. Multiline.
    • voice - default af_bella, and the tooltip says it plainly: "Voice ID supported by the selected model." Voice IDs are model-specific - af_bella is one of Kokoro's American female voices (its naming scheme is af_* for American female, am_* for American male, and so on), and qwen3-tts has its own list. Check the EcoHash docs for the current roster, because guessing a voice ID just errors.
    • speed - 0.5–2.0, default 1.0.

    Output is AUDIO. The pack's tts_voiceover.json example chains it straight into PreviewAudio.

    Where people get burned

    • It's preset voices only. This is hosted TTS, not voice cloning - don't come here to clone a voice. The KB's take on cloning is that local tools (Chatterbox, Kokoro + KokoClone) are where that's solved and private; this node is for a good generic voice, fast.
    • The cache. Re-queue an unchanged graph and you get the cached clip, no new call - and no way to hear the "new" take. Bump any input to regenerate.
    • 401 / 402 - invalid key or out of credit, same for every node in this pack.
    • Voice IDs don't transfer between models. af_bella means nothing to qwen3-tts. If you switch models, switch the voice too.

    Install

    ComfyUI Manager: search EcoHash, install "ComfyUI-EcoHash", restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ecohash-ai/ComfyUI-EcoHash.git
    cd ComfyUI-EcoHash
    pip install -r requirements.txt   # just `requests`
    

    Get a key at ecohash.com (there's a free starter credit) and set it via the ECOHASH_API_KEY env var or a config.ini copied from config.ini.example - no key widget on any node, so your key never ends up in a shared workflow JSON. Queue, and your render gets its voice. It's a very new pack with no community track record, so the fresh-node caution applies: it's MIT-licensed and the code is thin enough to skim, and you should before pointing a real key at it.

    CategoryEcoHash

    Inputs (4)

    NameTypeDefaultDescription
    modelCOMBO2 options: kokoro-82m, qwen3-tts
    textSTRING
    voiceSTRINGaf_bellaVoice ID supported by the selected model
    speedFLOAT1.000.5–2

    Outputs (1)

    NameTypeDescription
    AUDIOAUDIO