Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · ElevenLabs Voice Changer · $0.3/min
ComfyUI Node

arkennemasis fal · ElevenLabs Voice Changer · $0.3/min

ElevenLabs Voice Changer in ComfyUI

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · ElevenLabs Voice Changer · $0.3/min
  • audio
  • audio
  • audio_path
  • seed
  • info
◄voiceRachel►
◄remove_background_noisefalse►
◄seed-1►
◄output_formatmp3_44100_128►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

Voice changing is not text-to-speech, and mixing the two up is why people install this node and then feel let down. TTS takes words and invents a performance. This takes a recording you already like - the pauses, the half-laugh, the way the guy trails off at the end of a sentence - and swaps out who it sounds like. The performance survives. Only the vocal cords change.

That's a genuinely different job, and the wrapper here is ElevenLabs, which the audio knowledge base calls the reliability and language bar for production work: the safe default when a mispronunciation is expensive. It's closed, it's commercial, and it's the thing every open model gets measured against. You pay for that.

What the node does

It's a thin ComfyUI wrapper around fal's fal-ai/elevenlabs/voice-changer endpoint. No local model, no VRAM - your clip gets uploaded to fal's CDN, re-voiced there, and downloaded back into output/fal/fal-ai_elevenlabs_voice-changer/ as something that wires into the rest of your graph like any other audio.

The node bills by the minute of input audio, at the rate in its title: $0.30/min. Before anything is sent, the wrapper measures the clip you've connected and estimates the cost against max_cost_usd. A three-minute take is about ninety cents, which is fine. A one-hour podcast is not.

The inputs that matter

  • audio - the performance you want kept. Wire it from a LoadAudio node or anything else producing an AUDIO.
  • voice - this is a plain text box, not a dropdown, defaulting to Rachel. That's the one to get right. It takes an ElevenLabs voice name or the voice's ID; your own cloned voices generally need the ID, not the friendly name. Leave it empty and you get fal's own default, which is rarely what you meant.
  • remove_background_noise - off by default. This runs ElevenLabs' isolation model over the input first. If your source was recorded on a phone in a room with a fridge in it, turn it on; it's the difference between a usable swap and a muddy one.
  • output_format - mp3_44100_128 by default. The list is long and includes raw pcm_* plus ulaw/alaw telephony formats. If you're going to cut or blend the result downstream, take a pcm_44100; MP3 is fine for delivery.
  • seed - -1 unless you're chasing a reproducibility bug.

Outputs

audio is the re-voiced clip - send it to SaveAudio, or into the pack's own Voice Dub / Narration Fit nodes if you're building a narrated video. audio_path is the saved file on disk. seed comes back as an INT, and info is a JSON blob with the request id, the cost estimate, saved files and fal's full answer - handy when you want to know what a run actually cost.

Install

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

Restart, and the node shows up under the arkennemasis menu. ComfyUI-Manager works too - it's one pack, comfyui-arkennemasis, installable by Git URL. The pack's requirements.txt is a single line, httpx, and that's for its ChatGPT/Codex nodes; the fal side talks over Python's standard library, so this node adds nothing to your environment.

Then put your key in the .env file of your ComfyUI install - in the portable build, the folder holding run_nvidia_gpu.bat:

FAL_KEY=your-key-from-fal.ai/dashboard/keys

The key is read from that file and nowhere else. There's deliberately no key box on the node, so a key can never leak into a workflow you share.

Where people get burned

The voice field being free text is the number one trip. A typo doesn't always produce a loud error; sometimes you just get a delivery in a voice you didn't ask for.

Second: this changes how you sound, not what you said. It won't fix a flubbed line, cut an um, or translate. If you want text read aloud in a cloned voice, that's TTS - the pack ships a local Qwen3-TTS clone node for free, and it's the right tool when you're starting from a script rather than a recording.

Third: reuse_identical_run is on by default, so re-queueing the exact same audio and settings returns the cached file instead of paying again. Great feature, confusing the first time it "accidentally" gives you an identical result. Flip it off for a fresh take. And if a fal call 429s or a gateway blips, the node retries with backoff before you ever see it - max_concurrent stays at 1 by default for exactly that reason.

Categoryarkennemasis/fal/Audio/ElevenLabs

Inputs (9)

NameTypeDefaultDescription
audioAUDIOThe input audio file
voiceSTRINGRachelThe voice to use for speech generation Empty leaves it out.
remove_background_noiseBOOLEANfalseIf set, will remove the background noise from your audio input using our audio isolation model.
seedINT-1-1–2147483647Random seed for reproducibility. -1 leaves it to the model.
output_formatCOMBOmp3_44100_128Output format of the generated audio. Formatted as codec_sample_rate_bitrate.
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—
seedINT—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.