Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · MiniMax Speech 2.8 HD · $0.1/1k chars
ComfyUI Node

arkennemasis fal · MiniMax Speech 2.8 HD · $0.1/1k chars

Where It Starts Sighing and Laughing on Command

By Hishamahmer·Created 3 months ago·Updated 10 days ago· 11
arkennemasis fal · MiniMax Speech 2.8 HD · $0.1/1k chars
    • audio
    • audio_path
    • duration_ms
    • info
    ◄prompt►
    ◄voice_setting_speed1.00►
    ◄voice_setting_vol1.00►
    ◄voice_setting_english_normalizationfalse►
    ◄voice_setting_pitch0►
    ◄voice_setting_emotion(not set)►
    ◄voice_setting_voice_idWise_Woman►
    ◄audio_setting_formatmp3►
    ◄audio_setting_bitrate128000►
    ◄audio_setting_sample_rate32000►
    ◄audio_setting_channel1►
    ◄language_boost(not set)►
    ◄output_formathex►
    ◄pronunciation_dict►
    ◄normalization_setting_target_range8.00►
    ◄normalization_setting_target_loudness-18.00►
    ◄normalization_setting_enabledtrue►
    ◄normalization_setting_target_peak-0.50►
    ◄voice_modify_pitch0►
    ◄voice_modify_intensity0►
    ◄voice_modify_timbre0►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Newest of the MiniMax speech nodes in this pack, and the first one with a personality dial. Same $0.10 per 1,000 characters as the rest of the HD tier, and it keeps everything 2.6 added - pause markers, loudness normalization, a 10,000-character script budget - then adds non-verbal interjections and a three-axis voice tweaker on top.

    The two things that are new

    Interjections. You can type (laughs), (sighs), (coughs), (clears throat), (gasps), (sniffs), (groans) or (yawns) into the script and the model performs them. For a character voice in a short - the sort of thing where a dry read kills the joke - that's a genuinely useful tool, and it's the kind of control you'd otherwise be farming out to an audio editor and a library of stingers.

    voice_modify_pitch, voice_modify_intensity, voice_modify_timbre - three integers, each −100 to 100, defaulting to 0. These are not the same as voice_setting_pitch, which shifts the read by semitones; this trio re-timbres the voice itself: pitch character, energy, tonal quality. It's how you take one predefined voice and get three distinguishable speakers out of it.

    How it works

    The pack's usual fal plumbing: FAL_KEY read from the .env beside your launcher, input validation, a cost estimate from the character count checked against max_cost_usd, one billed submit, polling with a status label on the node, download into output/fal/fal-ai_minimax_speech-2.8-hd/. No uploads happen on a TTS run, so nothing before the submit can cost you anything. MiniMax's voice line is closed and hosted, benchmarked by the lab against ElevenLabs - the reason to pay for it rather than run Chatterbox locally is multilingual reliability, and that tradeoff hasn't changed.

    Inputs

    • prompt - script, 1 to 10,000 characters. Accepts <#x#> pauses (seconds, 0.01–99.99, between speakable segments, never consecutive) and the interjection tags above.
    • voice_setting_voice_id - free-text, default Wise_Woman, from MiniMax's predefined IDs. Empty leaves it to the model.
    • voice_setting_emotion - (not set), happy, sad, angry, fearful, disgusted, surprised, neutral.
    • language_boost - the explicit language picker including auto. Set it.
    • voice_setting_speed (0.5–2.0), voice_setting_pitch (−12 to 12 semitones - different dial from the voice_modify_* trio), voice_setting_vol (0.01–10), voice_setting_english_normalization (off by default).
    • voice_modify_pitch / voice_modify_intensity / voice_modify_timbre - each −100 to 100, default 0.
    • Loudness: normalization_setting_enabled (on by default), normalization_setting_target_loudness (−18 LUFS default), normalization_setting_target_range (8 LU), normalization_setting_target_peak (−0.5 dBTP).
    • Output: audio_setting_format (mp3, pcm, flac), audio_setting_bitrate, audio_setting_sample_rate, audio_setting_channel (1 mono, 2 stereo), pronunciation_dict (JSON replacements), output_format (url/hex; leave the default).

    Optional: max_cost_usd ($20 default, 0 = off; the node stops before sending anything if the estimate is above it), max_concurrent (default 1 - one paid fal call at a time across a run), reuse_identical_run (identical inputs return the file you already paid for, restart included), extra_json.

    Outputs: audio (waveform + sample rate, with a player on the node), audio_path, duration_ms (feed it to Narration Length or Word Timings to time shots and captions to the real read), info (request id, cost estimate, saved files, fal's answer).

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/Hishamahmer/comfyui-arkennemasis
    pip install httpx
    

    Or ComfyUI Manager → Install via Git URL. Then:

    FAL_KEY=your-key-from-fal.ai/dashboard/keys
    

    in the .env next to run_nvidia_gpu.bat. Restart; it's under arkennemasis/fal/Audio/MiniMax. There's also a Speech 2.8 Turbo sibling in the pack if you'd rather iterate at the Turbo rate.

    Using it without wasting takes

    Interjections are cheap fun and expensive habits - every one of them is another billed run while you fine-tune placement. Write them on the first pass, then re-render once, not seven times.

    Where the voice_modify_* dials earn their keep: intensity is the one I'd touch first. Nudging it positive makes a read sound like the speaker cares, and it's the least likely of the three to break the voice's identity. Leave timbre alone unless you're deliberately building a second character from the same predefined voice.

    And the standing pack behaviour: same text plus same settings returns your earlier file rather than billing again. If a re-render looks suspiciously identical, that's the node being honest, not lazy.

    Categoryarkennemasis/fal/Audio/MiniMax

    Inputs (25)

    NameTypeDefaultDescription
    promptSTRINGText to convert to speech. Use `<#x#>` for pauses (x = 0.01-99.99 seconds). Supports interjection tags: `(laughs)`, `(sighs)`, `(coughs)`, `(clears throat)`, `(gasps)`, `(sniffs)`, `(groans)`, `(yawns)`.
    voice_setting_speedFLOAT1.000.5–2Speech speed (0.5-2.0)
    voice_setting_volFLOAT1.000.01–10Volume (0-10)
    voice_setting_english_normalizationBOOLEANfalseEnables English text normalization to improve number reading performance, with a slight increase in latency
    voice_setting_pitchINT0-12–12Voice pitch (-12 to 12)
    voice_setting_emotionCOMBO(not set)Emotion of the generated speech '(not set)' leaves it to the model.
    voice_setting_voice_idSTRINGWise_WomanPredefined voice ID to use for synthesis Empty leaves it out.
    audio_setting_formatCOMBOmp3Audio format
    audio_setting_bitrateCOMBO128000Bitrate of generated audio
    audio_setting_sample_rateCOMBO32000Sample rate of generated audio
    audio_setting_channelCOMBO1Number of audio channels (1=mono, 2=stereo)
    language_boostCOMBO(not set)Enhance recognition of specified languages and dialects '(not set)' leaves it to the model.
    output_formatCOMBOhexFormat of the output content (non-streaming only)
    pronunciation_dictSTRINGCustom pronunciation dictionary for text replacement JSON. Empty leaves it out.
    normalization_setting_target_rangeFLOAT8.000–20Target loudness range in LU (default 8.0)
    normalization_setting_target_loudnessFLOAT-18.00-70–-10Target loudness in LUFS (default -18.0)
    normalization_setting_enabledBOOLEANtrueEnable loudness normalization for the audio
    normalization_setting_target_peakFLOAT-0.50-3–0Target peak level in dBTP (default -0.5).
    voice_modify_pitchINT0-100–100Pitch adjustment in semitones. Range: -100 to 100. Positive values raise pitch, negative values lower it.
    voice_modify_intensityINT0-100–100Intensity/energy of the voice. Range: -100 to 100. Higher values create more energetic speech.
    voice_modify_timbreINT0-100–100Timbre adjustment. Range: -100 to 100. Affects the tonal quality of the voice.
    max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
    reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
    extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
    max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

    Outputs (4)

    NameTypeDescription
    audioAUDIO—
    audio_pathSTRING—
    duration_msINT—
    infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.