Nodes/SpicyAPI/MiniMax Speech 2.8 HD · Text to Speech
ComfyUI Node

MiniMax Speech 2.8 HD · Text to Speech

472 Voices, an Emotion Dial, and (sighs) Actually Performed

By spicyapi-ai·Created 21 days ago·Updated 2 days ago· 2
MiniMax Speech 2.8 HD · Text to Speech
    • audio
    • task id
    ◄text►
    ◄voice_idCalm_Woman►
    ◄emotionneutral►
    ◄speed1.00►
    ◄pitch0►
    ◄volume1.0►
    ◄languageauto►
    ◄output_formatmp3►
    ◄sample_ratemodel default►
    ◄bitratemodel default►
    ◄audio_channelsmodel default►
    ◄english_normalizationfalse►
    ◄pronunciation_dict►
    ◄seed0►

    If you want a voiceover and you don't want to clone anything, this is the no-fuss lane. Paste a script, pick one of 472 system voices, choose an emotion, and get a 32 kHz mono MP3 back at $0.12 per 1,000 characters. No reference audio, no speaker encoder, no 20-minute local install.

    Where this sits

    The KB's audio survey splits speech work into three jobs and notes that the API still wins the one where reliability matters most: best-in-class multi-language TTS. The local options are genuinely good now - Chatterbox made open TTS competitive, Kokoro is the lightweight pick - but each has a setup story, and Chatterbox's own pack maintainers describe the dependency churn as a standing tax. MiniMax's voice line has been benchmarked against ElevenLabs by MiniMax itself since 2025, and this HD model is the higher-fidelity variant of the pair. So: reach for this when the words matter more than the plumbing, and reach for a local model when you're generating thousands of lines a day and the per-character bill starts to look like rent.

    The inputs worth understanding

    • text (required) - read exactly as written, billed per 1,000 characters. Sound tags like (sighs) or (laughs) are performed rather than spoken, which is a cheap way to make a read sound human.
    • voice_id - default Calm_Woman. The label shows the voice name plus the language it was built for where known. Browse before you commit; the wrong voice is the most common reason a take feels off.
    • emotion - default neutral. This is the dial that actually changes a performance, more than speed or pitch will.
    • speed (0.5–2, default 1), pitch (−12 to +12 semitones, default 0), volume (0.1–10, default 1).
    • language - auto by default, which detects from the text. Setting it explicitly is a pronunciation hint, useful for short lines that don't give the detector much to work with.
    • output_format - mp3 by default; pcm is headerless 16-bit little-endian samples, which you probably don't want unless you're feeding a pipeline.
    • sample_rate, bitrate, audio_channels - all model default. The model uses 32000, 128000 and mono respectively when you leave them alone.
    • english_normalization - off by default. Turn it on and numbers, dates and abbreviations get read the way a person would say them, which matters the moment your script contains "$4.99" or "Dr.".
    • pronunciation_dict - a JSON field for words the model gets wrong. Each entry is an object with "alias" and "pronunciation", and every occurrence of the alias in your text is read as the pronunciation. This is the fix for names.

    Outputs are audio and task id. Wire audio into Save Audio; if several clips come back they're batched and Save Audio writes one file each.

    Installing it

    ComfyUI Manager → search SpicyAPI → install → restart. Otherwise:

    cd ComfyUI/custom_nodes
    git clone https://github.com/spicyapi-ai/comfyui-spicyapi
    

    Restart ComfyUI, then Settings > SpicyAPI → paste a key from spicyapi.ai/console/keys, then restart once more so the node list is built from your account. Server install? Use SPICY_API_KEY. The pack installs nothing - no dependencies, no model downloads, no TTS engine to break your transformers version.

    Cost and gotchas

    Billing is per 1,000 characters, so a long script is the only real expense; rewriting a paragraph to test an emotion costs a fraction of a cent. If you're iterating on a long read, set Max cost per run in Settings > SpicyAPI anyway - the node checks the quote against it and stops before anything is charged.

    Two failures are worth recognising by code. 40310 means your SpicyAPI account hasn't verified its email yet - click the link from sign-up, that's all. And 40004 means the model has no deployment for the exact parameter combination you asked for; the message names the offending option, so change that rather than re-queueing. There's no seed here: every run is a fresh performance, and every run is billed.

    CategorySpicyAPI/Audio/MiniMax

    Inputs (14)

    NameTypeDefaultDescription
    textSTRINGThe words to be spoken, exactly as written. Sound tags such as (sighs) or (laughs) are performed. Billed per 1,000 characters.
    voice_idCOMBOCalm_WomanSystem voice. The label shows the voice name and, where known, the language it is built for.
    emotionCOMBOneutralEmotion of the reading.
    speedFLOAT1.000.5–2Speaking rate; 1 is the voice's normal pace.
    pitchINT0-12–12Pitch shift in semitones; 0 keeps the voice's own pitch.
    volumeFLOAT1.00.1–10Loudness multiplier; 1 is the normal level.
    languageCOMBOautoLanguage hint that improves pronunciation; auto detects it from the text.
    output_formatCOMBOmp3File format of the result; pcm is headerless 16-bit little-endian samples.
    sample_rateCOMBOmodel defaultSample rate in Hz. The model uses 32000 when omitted.
    bitrateCOMBOmodel defaultMP3 bitrate in bits per second; ignored for other formats. The model uses 128000 when omitted.
    audio_channelsCOMBOmodel defaultMono or stereo output. Mono when omitted.
    english_normalizationBOOLEANfalseRead numbers, dates and abbreviations in English text the way a person would say them.
    pronunciation_dictSTRINGCustom pronunciations: each alias in the text is read as its pronunciation. JSON. A list of objects with "alias", "pronunciation".
    seedINT00–2147483647This model takes no seed, so the number is never sent. Changing it makes ComfyUI run the node again: set 'control after generate' to randomize for a new result on every run; every run is billed.

    Outputs (2)

    NameTypeDescription
    audioAUDIOSeveral results come back as a batch; Save Audio writes one file each.
    task idSTRINGThe SpicyAPI task id, for the console logs or support.