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

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

$0.10 per 1,000 Characters, No Voice Clone Required

By Hishamahmer·Created 3 months ago·Updated 10 days ago· 11
arkennemasis fal · MiniMax Speech 02 HD · $0.1/1k chars
    • audio
    • audio_path
    • duration_ms
    • info
    ◄text►
    ◄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►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Speech 02 HD is MiniMax's flagship TTS - the model line the lab launched in January 2025 and benchmarked, openly, against ElevenLabs. This node is the fal endpoint wrapped for ComfyUI, priced at $0.10 per 1,000 characters. Paste a script, get an MP3 with a waveform you can play on the node.

    Why you'd use it instead of a local TTS

    Local TTS got genuinely good - Chatterbox at ElevenLabs-adjacent quality, Kokoro for speed, and both run on your own card. The KB's honest split is that the API still wins the two jobs where reliability matters most: best-in-class multi-language output, and production-grade delivery where a mispronounced name is expensive. MiniMax's own positioning is exactly that lane. If you're narrating in one language with a generic voice and it's not a paid deliverable, use Chatterbox and keep your money. If you need Arabic and German from the same script, or a specific predefined voice, this is the node.

    How it works

    The usual pack plumbing: FAL_KEY from the .env beside your launcher, input validation, a cost estimate sized from the character count of your text, one billed submit to fal, polling, then download into output/fal/fal-ai_minimax_speech-02-hd/. Nothing before the submit costs anything - and there are no uploads here at all, so a rejected input is entirely free.

    Inputs

    • text - note the field name: text, not prompt, and capped at 5000 characters. The price is straight arithmetic on this box, so a 500-word narration (~2,600 characters) is about 26 cents.
    • voice_setting_voice_id - a free-text box defaulting to Wise_Woman, one of MiniMax's predefined voice IDs. Empty leaves the choice to the model. This is a predefined-voice picker, not a clone slot.
    • voice_setting_emotion - (not set), happy, sad, angry, fearful, disgusted, surprised, neutral. (not set) lets the model decide from your text, which is usually the right default.
    • voice_setting_speed (0.5–2.0), voice_setting_pitch (−12 to 12), voice_setting_vol (0.01–10) - the small dials. Speed is the one people actually use; 1.05 or 1.1 often cleans up a narration read that drags.
    • language_boost - an explicit language picker (English, Chinese, Japanese, German, Arabic and a long tail, plus auto). Worth setting: it tells the model what language it's reading, which is how you stop numbers and names from being read with the wrong accent.
    • voice_setting_english_normalization - off by default; turn it on if your script is number-heavy and reads badly.
    • audio_setting_format (mp3, pcm, flac), audio_setting_bitrate (32000–256000), audio_setting_sample_rate (8000–44100), audio_setting_channel (1 = mono, 2 = stereo).
    • pronunciation_dict - a JSON box for text replacements, which is the escape hatch for a name the model keeps mangling. Empty leaves it out.
    • output_format - url or hex, default hex, non-streaming only. Leave it as shipped.

    Optional: max_cost_usd (default $20; the run halts before sending if the estimate is over it, 0 = off), max_concurrent (default 1), reuse_identical_run (identical text and settings return the file you already paid for, restart included), extra_json.

    Outputs: audio (waveform + sample rate, playable on the node), audio_path, duration_ms - an integer you can wire into the pack's Narration Length or Word Timings to time shots and captions to the real read - and info.

    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, and it's under arkennemasis/fal/Audio/MiniMax.

    The tier question

    HD at $0.10/1,000 characters versus Turbo at $0.06. Same model family, same inputs, same voice list. Turbo is the one for "does this script read well?" - you're paying 60% for a check. HD earns its price on the final render, where the difference in warmth and breathing is the thing people notice. Iterate cheap, deliver HD.

    Categoryarkennemasis/fal/Audio/MiniMax

    Inputs (18)

    NameTypeDefaultDescription
    textSTRINGText to convert to speech (max 5000 characters, minimum 1 non-whitespace character)
    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.
    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.