arkennemasis fal · Qwen Audio 3 TTS · $0.05/1k chars
Fifty-ish voices, eleven languages, five cents per thousand characters
- audio
- audio_path
- info
You need a voice-over. Locally you have real options - the KB's audio overview rates Chatterbox as the open model that made open TTS competitive with paid services, F5-TTS as the faster one, Kokoro and Piper as the tiny ones that run on CPU. What none of them give you for free is a wall of named voices across eleven languages in one combo box.
ArkFal_alibaba_qwen_audio_3_tts is Qwen Audio 3 TTS (the Flash endpoint) running on fal, wrapped as a node. Text in, an AUDIO value and an MP3 path out, billed at $0.05 per 1,000 characters. No weights, no VRAM, nothing to download - which is the actual reason to reach for it: you can narrate a whole video while your GPU is busy sampling something else.
Why an API node for this
Same trade as every other wrapper in external-api-nodes.md: it's the right call for a model you can't run and the wrong default for one you can. TTS is the cheap end of that trade - narration is a few thousand characters, so a five-minute voice-over lands in the cents, not dollars. The KB's own line is that ElevenLabs remains the reliability and language bar for the API path; this node exists for when you want that class of voice quality with a much wider language spread and a per-character bill you can predict.
And per-character is exactly how it bills: the character count of your text is the quantity the cost is computed from. A 3,000-character script is $0.15. You can do that math before you press Run.
What you set
text- the script. Multiline, and this is the only thing that drives the price.voice- defaults toCherry; the list includes Serena, Ethan, Chelsie, Momo, Vivian, Moon, Maia, Kai, and a long tail of others. They are not interchangeable across languages - the node's tooltip points at Alibaba's voice list, and you should actually look at it, because a voice that's excellent in English may not cover Japanese at all.language-Autoby default. Setting it explicitly is the single biggest quality win available here: the tooltip says it improves pronunciation and intonation, which in practice means your German narration stops being pronounced with English phonemes. Options are Chinese, English, Spanish, Russian, Italian, French, Korean, Japanese, German, Portuguese.
The optional four are the pack's shared fal controls: max_cost_usd (default $20, stops the run before anything is sent if the estimate is over it, 0 disables), reuse_identical_run (default on - same text, voice and language returns the already-paid-for MP3 instead of billing you twice), extra_json (a JSON object merged into the request for any fal field the node has no box for) and max_concurrent (how many paid fal calls may run at once in the whole run; 1 by default).
Outputs: audio, a real waveform you can wire into a lip-sync node or the pack's own narration-length utilities; audio_path, the saved MP3 on disk; and info, a JSON blob with the request id, the cost estimate, the saved files and fal's full answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, or install through ComfyUI Manager by searching arkennemasis. Then put your key in a .env file in the folder holding run_nvidia_gpu.bat (the ComfyUI folder on a normal install):
FAL_KEY=your-key-from-fal.ai/dashboard/keys
There is deliberately no key box on the node. The argument for that is good: a key typed into a widget gets saved verbatim into every workflow JSON you share. Nothing here ships a model file, so install is genuinely just "clone and restart".
Where people get burned
The number one support question for any arkennemasis fal · node is the .env file being in the wrong folder, or saved as .env.txt by Notepad. The nodes read that file and nowhere else.
Then reuse_identical_run. It defaults to true, so if you tweak a comma and run again you'll get the cached line back and wonder why the delivery didn't change. Turn it off for a fresh take.
And the boring one: text goes to fal, so it leaves your machine - no different from any other API node, but worth knowing before you paste client material into a text box.
Results land in output/fal/alibaba_qwen-audio-3-tts/, and every request is logged to output/fal/_requests.jsonl.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | The text to convert to speech. | |
| voice | COMBO | Cherry | The voice used for speech synthesis. See the [Qwen-TTS voice list](https://www.alibabacloud.com/help/en/model-studio/qwen-tts-voice-list) for each voice's language and dialect coverage. |
| language | COMBO | Auto | Language of the input text. `Auto` lets the model detect it; setting it explicitly improves pronunciation and intonation. |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety 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_runopt | BOOLEAN | true | If 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_jsonopt | STRING | Advanced: 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_concurrentopt | INT | 11–32 | How 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 (3)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| audio_path | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |