Nodes/ComfyUI_zura_nodes/Zura LongCat Voice
ComfyUI Node

Zura LongCat Voice

Local voice cloning that runs in its own little Python bunker

By ZURAVFX·Created about a month ago·Updated a day ago· 2
Zura LongCat Voice
  • reference_audio
  • audio
  • run_report
◄mode▾►
◄script►
◄reference_transcript►
◄pace1.00►
◄seed8923►
◄projectClient_Project_EN►

Local voice cloning in ComfyUI usually means fighting a dependency tree until one of your other nodes breaks. This one sidesteps that entirely: LongCat-AudioDiT 3.5B runs in a separate Python 3.11 environment that the pack's setup script builds for you, and ComfyUI's own environment gains nothing but SoundFile.

The trade is real but fair - an install step you have to run deliberately, in exchange for a voice model that doesn't take your working ComfyUI down with it.

What it does

Two modes, one node:

  • Clone a voice - you supply one clean recording of a speaker plus its exact transcript, and it says something new in that voice.
  • Text to speech - no reference at all; it just speaks your script.

The accuracy of the clone depends almost entirely on that transcript being right. The tooltip is blunt: "Exact words in the reference audio, including any fillers." Include the "um"s. A transcript that doesn't match the audio is the number one cause of a clone that sounds like a stranger doing an impression.

How it works

When you hit Run, the node writes a job folder and launches longcat_runtime/worker.py in the isolated interpreter as a subprocess. Before it does, it unloads ComfyUI's own models and empties the cache - that's the GPU hand-off, and it's why a LongCat run looks like ComfyUI briefly doing nothing. It then polls the child process, honours Stop/interrupt, and cleans up the process on exit.

Everything the run produces is saved, and nothing is overwritten. Each run gets a new folder under output/zura_voice/<project>_<timestamp>_<id>/:

  • voice.wav - 24-bit PCM, 24 kHz mono, the listening copy.
  • master_float32.wav - the unprocessed float samples, also what the node returns.
  • chunk_001.wav, chunk_002.wav, … for long scripts.
  • script.txt, job.json, report.json, worker.log, plus the retained reference recording in clone mode.

Long scripts are split at natural sentence boundaries, never truncated to fit a window; each chunk reuses the same reference with 150 ms inserted between parts. That prevents silent text loss, but it doesn't guarantee prosody across a join - check every seam.

Inputs and outputs

  • mode - Clone a voice or Text to speech.
  • script - the words to generate.
  • reference_transcript - exact words in the reference clip. Ignored in TTS mode.
  • pace - default 1.0, range 0.5–2.0. Faster or slower synthesis, not pitch. Not a duration guarantee.
  • seed - default 8923. Fixed for repeatable takes; subsequent chunks use consecutive seeds.
  • project - an output label. "not a path" - the node rejects anything with a slash, colon or backslash in it.
  • reference_audio (optional, lazy) - one clean speaker, 8–20 seconds to start. In TTS mode the branch isn't even evaluated.
  • audio - AUDIO, into Preview Audio or a video model's guide input.
  • run_report - STRING, the per-run summary text.

Install

Install the pack first, then run the setup helper once:

cd ComfyUI/custom_nodes/ComfyUI_zura_nodes
python setup_longcat.py --install
python setup_longcat.py --check

The helper creates an isolated Python 3.11 environment, then downloads the pinned LongCat model and tokenizer (default %USERPROFILE%\ZuraLongCat; --root moves it). It never installs packages itself - if dependencies are missing it prints the exact uv pip install commands, then you rerun it. Importing the node downloads nothing, and the Registry package bundles no weights.

Two warnings: CUDA with BF16 support is required, and this was tested on Windows with an RTX 4080 16 GB - smaller GPUs and other OSes are unvalidated. The full-precision checkpoint loads on CPU, so budget RAM and disk.

Generation is local and offline - Hugging Face offline flags are set for the worker. And the licence is MIT, which says nothing about the person on the recording: get permission for the speaker, the recording and the intended use before you ship anything.

Common issues

"LongCat is not set up on this machine. Run setup_longcat.py once." Expected until you run the helper. It's not an automatic download, deliberately.

"Connect a reference recording, or choose Text to speech." Clone mode with nothing wired. Note reference_audio is lazy specifically so TTS runs don't make you feed a dummy clip.

"Paste the exact words spoken in the reference clip into reference_transcript." Also clone mode. This one's non-negotiable.

The transcript matches but the voice still drifts. Check reference length. LongCat's combined reference-plus-generation window is 60 seconds - a reference that eats most of it leaves no room to speak. Start at 8–20 seconds of clean single-speaker audio, no music, no overlap.

Memory failures. Close other GPU apps and shorten the reference.

"Use a project label, not a path." The field becomes a folder name under output/zura_voice, so slashes are rejected.

CategoryZura/audio

Inputs (7)

NameTypeDefaultDescription
modeCOMBO2 options: Clone a voice, Text to speech
scriptSTRINGThe words to generate. Long scripts are split at natural boundaries, never cut to fit the model window.
reference_transcriptSTRINGExact words in the reference audio, including any fillers. Not used in Text to speech mode.
paceFLOAT1.000.5–21.0 matches the tested duration estimate. Above 1 is faster; below 1 is slower. Changes synthesis duration, not playback pitch; not an exact duration guarantee.
seedINT89230–4294967295Keep fixed for repeatable takes. Randomise for a new performance. The following chunks use consecutive seeds.
projectSTRINGClient_Project_ENOutput label. Each run gets a new folder so existing audio is never overwritten.
reference_audiooptAUDIOOne clean speaker. Start with a prepared 8–20 second excerpt. TTS mode does not evaluate this branch.

Outputs (2)

NameTypeDescription
audioAUDIO—
run_reportSTRING—