arkennemasis fal · MiniMax Voice Design · $3/voice
Describe a voice you've never recorded, for $3
- audio
- audio_path
- custom_voice_id
- info
Cloning needs a sample. Designing needs a sentence. Voice Design takes a description - "a low, dry, sixty-something narrator with a smoker's rasp" - and manufactures a voice to match, then returns an ID you can use everywhere else. Three dollars per voice.
That's the interesting split in this pack's audio section: clone when the voice exists (Voice Clone), design when it doesn't. If you're casting a narrator for a video series and the person you have in mind is a character rather than a colleague, this is the node.
The two boxes
Only two required inputs, and both are text:
prompt- the voice description. This is the whole act of casting, so write it like a casting brief rather than like a prompt for an image model. Age, pitch, texture, pace, mood, accent, and what kind of person it sounds like. "Female voice" produces wallpaper; "an unhurried Southern documentary narrator, warm mid-range, slight gravel, sounds like she's smiling" produces something you can use.preview_text- up to 500 characters of script the new voice reads immediately, so you can hear it before you commit to anything. Billed at $30 per 1M characters, which is about a cent and a half for a full-length preview. Practically free, and the only reason to write it carefully is that your preview is also your quality check.
Then it returns the voice and its ID. There's no separate "save" step and no candidate list - one call, one voice.
Outputs and the wiring that matters
audio is the preview as a ComfyUI AUDIO value with a player on the node. audio_path is that file under output/fal/fal-ai_minimax_voice-design/. custom_voice_id is the useful one - a plain STRING, which is why it connects directly to voice_setting_voice_id on the pack's Speech 2.8 Turbo node (also a plain string). Clone or design a voice, wire it into the TTS node, and your narration is being read by something that didn't exist ten minutes ago. info carries the request id, cost estimate, saved files and fal's answer.
Worth noting before you spend: unlike the clone path, there's no published retention warning in the node's own fields for a designed voice - so don't park an ID in a sticky note and assume it lives forever. Use it, and keep the preview audio you liked as your reference.
Where the $3 goes
One design request is one voice, and the cost estimate is a flat per-run figure checked against max_cost_usd (default $20) before anything is uploaded. Same for every fal node in the pack: the pre-flight is free, the submit is the only billable step. Results and the request ledger live in output/fal/, and if ComfyUI restarts mid-run, the job continues on fal and fal Recover Result collects it by id at no extra charge.
reuse_identical_run is on by default, which in this case means an identical description and preview text returns the voice you already paid for rather than designing a new one. Want a second take on the same brief? Turn it off - and budget for it, because each attempt is $3.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart ComfyUI, or install from ComfyUI-Manager by searching arkennemasis. The only declared dependency is httpx, and that's for the pack's Codex nodes - the fal provider uses Python's standard library, so nothing else gets pulled in. Then:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
in the .env next to run_nvidia_gpu.bat.
Where people get burned
- The voice is generic. The description was generic. Specificity is the skill here, not luck.
- You spent $3 auditioning. That's the honest trap with a single-shot node: write the brief properly, use the preview to judge, and if you're iterating on a voice concept, iterate on paper first.
- A great voice and no way to reach it later. Keep the preview audio, and keep the description text - reproducing a design means re-running the same prompt, which is another $3.
- Your description was thin and the model just picked a default-sounding voice. Same as point one. Add texture words.
- It refused to run at all. Check
max_cost_usdand thatpreview_textisn't empty - the preview text is required, not optional.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Voice description prompt for generating a personalized voice | |
| preview_text | STRING | Text for audio preview. Must be at least 1 character and limited to 500 characters. A fee of $30 per 1M characters will be charged for the generation of the preview audio. | |
| 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 (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| audio_path | STRING | — |
| custom_voice_id | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |