Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · ElevenLabs TTS Multilingual v2 · $0.1/1k chars
ComfyUI Node

arkennemasis fal · ElevenLabs TTS Multilingual v2 · $0.1/1k chars

Eleven widgets and the two that make long narration work

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · ElevenLabs TTS Multilingual v2 · $0.1/1k chars
    • audio
    • audio_path
    • timestamps
    • info
    ◄text►
    ◄voiceRachel►
    ◄stability0.50►
    ◄similarity_boost0.75►
    ◄style0.00►
    ◄speed1.00►
    ◄timestampsfalse►
    ◄previous_text►
    ◄next_text►
    ◄language_code►
    ◄apply_text_normalizationauto►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Multilingual v2 is the oldest TTS node in this pack and still the one with the most knobs: eleven widgets against the newer v3 and v4 nodes' six. That's not nostalgia - two of those extras are the reason to pick it for long-form work, and one of them is a genuinely good trick.

    The trick is previous_text and next_text. TTS models generate in chunks, and chunked generation has a tell: the delivery resets at every seam, so a ten-part narration sounds like ten narrations. Feed the model the sentence before and the sentence after the current chunk, and it carries the prosody across the join. If you've ever rendered a long script and had the fourth paragraph come out with a different energy than the third, this is the fix, and it's the sort of thing you only learn by reading the schema.

    How it works

    Standard fal-node plumbing for this pack: key from the install's .env, input validation, a cost estimate from the character count, one billed call, polling with status on the node, and audio written to output/fal/fal-ai_elevenlabs_tts_multilingual-v2/. Requests land in output/fal/_requests.jsonl with their estimates, which is how you find out what a batch actually cost.

    The inputs that matter

    text is required. voice is free text, defaulting to Rachel. Then:

    • stability (0–1, default 0.5) - lower for expressiveness, higher for a consistent read across a long script.
    • similarity_boost (0–1, default 0.75) - closer to the reference voice, slightly less natural. This is the dial the v3 node doesn't have.
    • style (0–1, default 0) - style exaggeration. It's at zero for a reason; a little goes a long way.
    • speed - 0.7 to 1.2, and the tooltip warns that extreme values hurt quality. Sitting at 0.7 to stretch a script to fit a runtime is a trap; fix the runtime instead.
    • previous_text / next_text - the continuity trick above.
    • language_code - ISO 639-1, and it's enforced rather than hinted: an unsupported code errors instead of falling back.
    • apply_text_normalization - auto / on / off, deciding whether numbers and dates get spelled out.
    • timestamps - word-level timing, the thing you want if captions are coming.

    Outputs: audio, audio_path, timestamps, info.

    Money

    $0.10 per 1,000 characters, the same as Eleven v3, and a fifth of the music nodes' per-minute rate. Note there's no speed-based discount: stretching a script with speed: 0.7 costs exactly the same and sounds worse. The max_cost_usd default of $20 is about 200,000 characters, i.e. a short novel; the guardrail that actually matters in a long-form pipeline is the pack's branch gating, so a failed render doesn't re-run the whole chain.

    Install

    Manager → search comfyui-arkennemasis, or:

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

    Restart, then FAL_KEY=your-key-from-fal.ai/dashboard/keys in the .env beside run_nvidia_gpu.bat. No downloads, no dependencies for the fal provider - the pack's only requirement is httpx, for its Codex/ChatGPT-login nodes.

    Common issues & troubleshooting

    Every paragraph sounds like a restart. Use previous_text and next_text. Split the script into sentence-boundary chunks and pass the neighbouring text with each one; it's more wiring and dramatically better output.

    The voice drifts across a long render. Raise stability. That's what it's for.

    A language code errored the run. Enforced by the model, not a node bug. Clear the field to let it infer from the text.

    Numbers read oddly. apply_text_normalization set to off, or auto guessing wrong. Force it.

    Captions land late or early. Your timings came from somewhere else. Turn on timestamps here, or run the rendered audio through a transcription or alignment node for real word times - the pack's own caption tooling is honest that estimation drifts when a performance deviates from the script.

    A run that looked like it hung. Long text takes time, and this node polls rather than timing out - status, elapsed seconds and the estimate show while it works. Cancel cancels on fal too, and if ComfyUI died, fal Recover Result collects the paid job by request id for free.

    Categoryarkennemasis/fal/Audio/ElevenLabs

    Inputs (15)

    NameTypeDefaultDescription
    textSTRINGThe text to convert to speech
    voiceSTRINGRachelThe voice to use for speech generation Empty leaves it out.
    stabilityFLOAT0.500–1Voice stability (0-1)
    similarity_boostFLOAT0.750–1Similarity boost (0-1)
    styleFLOAT0.000–1Style exaggeration (0-1)
    speedFLOAT1.000.7–1.2Speech speed (0.7-1.2). Values below 1.0 slow down the speech, above 1.0 speed it up. Extreme values may affect quality.
    timestampsBOOLEANfalseWhether to return timestamps for each word in the generated speech
    previous_textSTRINGThe text that came before the text of the current request. Can be used to improve the speech's continuity when concatenating together multiple generations or to influence the speech's continuity in the current generation. Empty leaves it out.
    next_textSTRINGThe text that comes after the text of the current request. Can be used to improve the speech's continuity when concatenating together multiple generations or to influence the speech's continuity in the current generation. Empty leaves it out.
    language_codeSTRINGLanguage code (ISO 639-1) used to enforce a language for the model. An error will be returned if language code is not supported by the model. Empty leaves it out.
    apply_text_normalizationCOMBOautoThis parameter controls text normalization with three modes: 'auto', 'on', and 'off'. When set to 'auto', the system will automatically decide whether to apply text normalization (e.g., spelling out numbers). With 'on', text normalization will always be applied, while with 'off', it will be skipped.
    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—
    timestampsSTRING—
    infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.