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

arkennemasis fal · ElevenLabs TTS Eleven v3 · $0.1/1k chars

The older, pricier sibling — when it's still the right pick

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · ElevenLabs TTS Eleven v3 · $0.1/1k chars
    • audio
    • audio_path
    • timestamps
    • info
    ◄text►
    ◄voiceRachel►
    ◄stability0.50►
    ◄timestampsfalse►
    ◄language_code►
    ◄apply_text_normalizationauto►
    ◄max_cost_usd20.0►
    ◄reuse_identical_runtrue►
    ◄extra_json►
    ◄max_concurrent1►

    Straight comparison, because it's the question you're actually asking: this node is $0.10 per 1,000 characters, and the Eleven v4 node in the same folder is $0.08. v4 is newer. v4 is cheaper. v4 has more dials, including similarity_boost.

    So why does this node exist? Because "newer and cheaper" describes the API, not the take. Voice models don't iterate cleanly - a version bump can move the timbre of a specific voice you've built a project around, or change how a particular piece of text lands. When you get an output you like and it came from v3, the pragmatic move is to stay on v3. The other reason is expressiveness: v3 is the version ElevenLabs built its dialogue and tag-driven delivery work on, and on some material that shows.

    If you're starting fresh, reach for v4. If you're reproducing something, don't change the model out from under yourself.

    How it works

    A generated fal node, like every other on this shelf: FAL_KEY read from the install's .env, inputs validated, cost estimated from character count, one billed submission, polling with live status, and the audio downloaded into output/fal/fal-ai_elevenlabs_tts_eleven-v3/. The request id, estimate and fal's full response are all logged to output/fal/_requests.jsonl, so you can diff what a session cost after the fact rather than guessing.

    The inputs that matter

    text is required - the words, and any bracket tags you want the model to act on. voice is a free-text string defaulting to Rachel; empty leaves it to the model. stability (0–1, default 0.5) is the only performance dial on this node; there's no similarity_boost here, which is the clearest functional difference from the v4 nodes.

    timestamps is the one to look at twice: set it to true and the response includes timing for each word in the generated speech, which is what you feed a caption track. On a pipeline where captions must land on the real syllables, that's worth more than the two-cent difference per thousand characters.

    Then language_code (ISO 639-1, empty to infer) and apply_text_normalization, whose three modes the tooltip lays out plainly: auto decides whether to spell out things like numbers, on always normalises, off never does. "1958" as digits versus "nineteen fifty-eight" is this widget.

    Outputs: audio, audio_path, timestamps, info.

    Money

    $0.10 per 1,000 characters - about a minute of speech per thousand, so roughly $0.10 a minute of narration, which compares quite well against the $0.60/min music nodes when you think about what a full video costs. max_cost_usd defaults to $20 and won't intervene unless you're synthesising a novel.

    Install

    Manager → search comfyui-arkennemasis, or:

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

    Restart, then FAL_KEY=your-key in the .env next to run_nvidia_gpu.bat (the ComfyUI folder's .env also works; nothing else does). No model downloads.

    Common issues & troubleshooting

    Text over the endpoint's length limit. Split the script. The multilingual v2 node handles chunk continuity better thanks to its previous_text/next_text fields - see that article if you're rendering long-form.

    It sounds less like the reference voice than you expected. There's no similarity_boost on this node. If that's the problem you're solving, the v4 or multilingual v2 nodes are the fix.

    Numbers read the wrong way. apply_text_normalization - force it on for years and currency, off for identifiers like model numbers that should be read digit by digit.

    Same result, no charge on re-run. reuse_identical_run (default true) served a previous paid result from output/fal. Leave it on when you're re-running the graph to test wiring; switch it off when you want a new performance.

    You're weighing this against a local model. Chatterbox is the open one worth knowing - MIT, 0.5B, zero-shot cloning from a few seconds of reference audio, and genuinely close to commercial quality on a good day. If the voice is a specific person's, or the audio must never leave your machine, run it locally and use these nodes for the material where reliability matters more.

    Categoryarkennemasis/fal/Audio/ElevenLabs

    Inputs (10)

    NameTypeDefaultDescription
    textSTRINGThe text to convert to speech
    voiceSTRINGRachelThe voice to use for speech generation Empty leaves it out.
    stabilityFLOAT0.500–1Voice stability (0-1)
    timestampsBOOLEANfalseWhether to return timestamps for each word in the generated speech
    language_codeSTRINGLanguage code (ISO 639-1) used to enforce a language for 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.