Nodes/ComfyUI/HeyGen Text to Speech
ComfyUI Node Runs on cloud

HeyGen Text to Speech

A narrator's worth of voices without leaving ComfyUI

By Comfy-Org·Created 4 years ago·Updated about 5 hours ago· 128,055
HeyGen Text to Speech
    • AUDIO
    text
    voice
    custom_voice_id
    speed1.00
    ssmlfalse
    seed42

    A narrator's worth of voices, one node

    HeyGen Text to Speech is the plainest node in ComfyUI's partner/audio family: type text, pick a voice, get speech back. What makes it worth a look is where the voices come from. HeyGen is the avatar-video company - the "AI presenter reads your script" service - and this node pulls from the same Starfish TTS engine that powers its talking-head products. The curated list is HeyGen's most popular Starfish-compatible voices across 17 languages, and the quality lands closer to "this could be a podcast ad" than "this is clearly a robot."

    How it works

    Thin client again. The node posts your text and voice ID to HeyGen's /v3/voices/speech endpoint through ComfyUI's partner-node proxy, downloads the returned audio URL, and decodes it into a normal AUDIO tensor for the rest of your graph. No local TTS model, no VRAM, no weights to fetch. It's one of five HeyGen nodes that shipped together in ComfyUI core in July 2026; the rest of the family (Talking Photo, Avatar Video) handles the video side, and this node is the audio half of the same workflow.

    The inputs that matter

    • text - what to synthesize, up to 5000 characters. One real constraint: the generated speech must be at least 1 second long, so a single short word can error out.
    • voice - the curated dropdown of Starfish voices, annotated with language and gender ("Chill Brian", "Aria", "Narrator Mateo", that sort of thing).
    • custom_voice_id - paste any HeyGen voice ID from their wider library (2000+ voices) and it overrides the dropdown. Only works if that voice supports the Starfish engine.

    Then three smaller ones: speed (0.5–2.0 multiplier), ssml (a boolean that switches the parser from plain text to SSML markup - your hook for pauses, emphasis, and pronunciation control), and seed. That last one deserves a warning: it's not sent to HeyGen. The tooltip says so in so many words - the seed exists purely so that changing it forces a re-run. There is no determinism knob on this node at all.

    Output is a single AUDIO that plugs straight into core SaveAudio, SaveAudioMP3, or PreviewAudio, or into AudioConcat if you're building a longer narration from pieces.

    Getting it

    Ships with ComfyUI core - no install, no model files. It's an API node, so each run is billed to your Comfy account credits, priced per second of audio (the node shows an approximate per-second badge). A long script is a lot of seconds, and the bill scales with what you actually generate.

    Where people get burned

    • The 1-second floor. Tiny inputs fail; give it a real sentence.
    • SSML is opt-in. Leave the toggle off and your <break time="500ms"/> tags get read aloud literally. Flip it on only when your text actually is SSML.
    • Voice/engine mismatch. A custom_voice_id that isn't Starfish-compatible fails; stick to the dropdown unless you know the ID.
    • Cost creep. Per-second billing plus retakes means a voiced five-minute video with ten iterations is a pile of paid audio. Nail the script first, then generate.

    If you just need a decent AI voice right now and don't want to train or babysit a local model, this is the one to reach for - especially since it shares its voice family with HeyGen's avatar nodes, so the voice you pick here is the one your presenter will use upstairs.

    Categorypartner/audio/HeyGen

    Inputs (6)

    NameTypeDefaultDescription
    textSTRINGText to synthesize (up to 5000 characters). The generated speech must be at least 1 second long.
    voiceCOMBOVoice to use (curated from HeyGen's most popular Starfish-compatible voices).
    custom_voice_idoptSTRINGOptional HeyGen voice ID. When set, overrides the voice selected above. The voice must support the Starfish engine.
    speedoptFLOAT1.000.5–2Speech speed multiplier.
    ssmloptBOOLEANfalseTreat the text as SSML markup (for pauses, emphasis, and pronunciation control).
    seedoptINT420–2147483647Not sent to HeyGen; change it to force a re-run.

    Outputs (1)

    NameTypeDescription
    AUDIOAUDIO