Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · Chatterbox Speech to Speech · $0.015/min
ComfyUI Node

arkennemasis fal · Chatterbox Speech to Speech · $0.015/min

Keep the performance, swap the voice — for 1.5 cents a minute

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · Chatterbox Speech to Speech · $0.015/min
  • source_audio
  • target_voice_audio
  • audio
  • audio_path
  • info
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

Chatterbox is the model that made local TTS a serious proposition: Resemble AI's 0.5B open model, MIT-licensed, zero-shot voice cloning from a few seconds of reference audio, and the launch reception was exactly the awkward kind - people arrived to mock the ElevenLabs comparison and left agreeing with it. In this pack it isn't the text-to-speech node though. It's the voice conversion one, and that's a different and rarer job.

Speech-to-speech means: take a recording of someone performing, and re-render it in a target voice while keeping the timing, the pauses, the emphasis, the laugh in the middle. You didn't write a script; you have a performance already, and you want it in someone else's voice. That's not something a TTS model does at all, and at $0.015 per minute it's the cheapest thing in this whole pack by an order of magnitude.

How it works

Two audio inputs, one audio output, one billable call. Both clips get uploaded to fal's CDN (free), the endpoint converts the source performance toward the target voice, and the result is downloaded to output/fal/fal-ai_chatterbox_speech-to-speech/. This is wrapper-node territory: no weights on your machine, no VRAM used, and the request is logged in output/fal/_requests.jsonl alongside every other fal run.

Worth being clear about the direction, because it's the thing people get wrong: source_audio is what's being converted, target_voice_audio is what it should sound like. Neither one is "the reference you want to clone into text".

The inputs that matter

  • source_audio - required. The performance to convert. Its rhythm and delivery survive; its timbre doesn't.
  • target_voice_audio - the voice you want to hear. Described as required by the tooltip, and it is in practice: a socket declared optional with nothing wired to it will still fail. Keep the reference clean, one speaker, no music behind it.

That's the entire node. No stability dial, no exaggeration setting, no language code. Which is either refreshing or frustrating depending on how much you liked fiddling.

Outputs: audio, audio_path, info. audio_path is the one to hang onto - a converted clip is often the input to something else, like the pack's narration-length or assembly nodes.

Money

$0.015 per minute of audio. A five-minute dialogue is under eight cents. This is not a node you need to budget for; it's a node you can afford to iterate on until it's right. Compare that to dubbing, which is the same general idea at forty times the price.

Install

Manager → search comfyui-arkennemasis, or:

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

Restart, then put FAL_KEY=your-key in the .env in the folder with run_nvidia_gpu.bat (the node also reads the ComfyUI folder's .env, and neither the OS environment nor any node widget). No models, no extra Python packages for the fal provider.

Common issues & troubleshooting

The output sounds like the source, barely altered. Usually a weak target reference - a noisy clip, several speakers, or only a second or two of usable voice. Give it a clean isolated 10–20 seconds of the voice you want.

The output sounds like the target but the delivery went flat. Conversion carries prosody imperfectly when the source and target registers are far apart - a whisper converted into a big resonant voice, for instance. Convert material closer in energy to the source.

"target_voice_audio is required" style failures. The socket shows as optional in the schema, but the endpoint needs it. Wire something.

You typed your script into source_audio. You can't - it's an audio socket. If you have text and no performance, you want a TTS node (there are several in this same pack under arkennemasis/fal/Audio/ElevenLabs), not this one.

It came back instantly, unchanged, and free. That's reuse_identical_run finding the same two clips in output/fal. Turn it off for a fresh conversion.

A long clip seems to hang. ComfyUI's own Cancel cancels on fal too, and if the application died instead, the job finished server-side - recover it free with the pack's fal Recover Result node using the id from the ledger.

Categoryarkennemasis/fal/Audio/Chatterbox

Inputs (6)

NameTypeDefaultDescription
source_audioAUDIO—
target_voice_audiooptAUDIORequired URL to an audio file to use as the target reference voice for speech-to-speech voice conversion.
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 (3)

NameTypeDescription
audioAUDIO—
audio_pathSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.