StepAudioEditX - Clone π€
Clone a voice from a 10-second clip β StepAudioEditX Clone, explained
- prompt_audio
- audio
Give this node 3β30 seconds of someone talking plus the exact words they said, and it will say anything else you type in that voice - tone, accent, pitch, rhythm and all. That's zero-shot voice cloning, no training involved. It's the classic character-voice machine: voice a game NPC, do narration in a consistent voice across a whole project, or keep a single voice through long-form content instead of fighting with a different-sounding take every time.
If you've poked at other TTS in ComfyUI, the pitch is the same ("clone any voice!"), but Step Audio EditX is one of the stronger open models for it, and the pack is native ComfyUI - pure Python, no JS, no API keys. It's the generation half of the same pack as the Edit node, and the two are designed to chain: clone a line, then re-emote it.
How it works
The pipeline is: reference audio β dual-codebook tokenizer (VQ02 + VQ06) β a 3B audio language model conditioned on both your reference clip and the target text β a CosyVoice vocoder that turns tokens into 24kHz audio. Zero-shot here means no fine-tuning or voice embedding step on your side - the model infers the voice identity directly from the clip it's given.
That's why prompt_text is the lever that actually matters. The model uses the transcript of your reference to align the voice characteristics; if the transcript doesn't match what's actually said, cloning quality tanks. The README is emphatic: punctuation and spacing count. The pack depends on openai-whisper, and the example workflows use Whisper to transcribe your reference automatically - which is the sane way to do this instead of typing it.
The inputs that matter
prompt_audio- the reference clip. 3β30 seconds is the sweet spot (0.5β30s supported); clean, low-noise audio wins. This is technically the optional input, but it's the whole point of the node.prompt_text- exact transcript of the reference. Get this right.target_text- what you want said in the cloned voice. Any length, butβ¦longform_chunking- flip this on for text over ~2000 words. It splits at sentence boundaries, generates each chunk, and stitches them back together seamlessly. Slower, but it removes the length ceiling.temperature- 0.7 is the recommendation. Lower (0.1β0.5) is flatter and more consistent; higher gets expressive and eventually unhinged.max_new_tokens- audio-token budget: 2048 β 10s, 4096 β 20s, 8192 β 40s. Watch it if you're tight on VRAM.seed- 0 for random, a fixed number to reproduce an exact take.
Then there's the shared model-config block: device (cuda), torch_dtype (bfloat16 recommended), quantization (none / int8 / int4), attention_mechanism (sdpa default, flash_attn for RTX 30xx+), and keep_model_in_vram. Output is a single audio (AUDIO) node - save it, or feed it into the Edit node for the two-pass workflow.
Installing it
Same pack as the Edit node: ComfyUI Manager β search "Step Audio EditX TTS" β install β restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/Saganaki22/ComfyUI-Step_Audio_EditX_TTS
cd ComfyUI-Step_Audio_EditX_TTS # note: not the folder name in the README's older example
pip install -r requirements.txt
You need system-level FFmpeg (not just the Python package), plus both HuggingFace repos - stepfun-ai/Step-Audio-EditX and stepfun-ai/Step-Audio-Tokenizer - cloned into ComfyUI/models/Step-Audio-EditX/. And transformers is pinned to exactly 4.53.3; newer versions have a tokenization bug that yields silent or garbled output. Budget ~11β14GB VRAM in bfloat16 (a bit less with int8), and give the first run a while - loading the model is the slow part, and it re-downloads the whisper bits on first use.
Troubleshooting
- Poor clone quality - 90% of the time it's the transcript or the reference. Match
prompt_textexactly; use a clean, noise-free clip; nudge temperature to 0.7β0.8. - Garbled or silent speech -
pip install transformers==4.53.3, thenpip install librosa hyperpyyamlif it persists. - "No models found" in the dropdown -
model_pathis auto-discovered at startup, not a free-text field. Put both models in the right folder and restart ComfyUI before the node will see them. - CUDA OOM - int8/int4 quantization,
max_new_tokensdown to 4096,float16, or disablekeep_model_in_vramto free ~8GB between runs.
One community gripe worth knowing: the model tends to flatten non-English accents toward an American read, and that gets worse the harder you push iterations on the Edit side. For plain cloning at default settings it's fine - but if you're cloning a regional accent and it comes out sounding Hollywood, that's the model, not you.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_text | STRING | Exact transcript of what the reference audio says. Must match the audio content perfectly for best voice cloning results. The AI uses this to align the voice characteristics. | |
| target_text | STRING | The new text you want to speak in the cloned voice. Can be any text - the AI will speak it with the reference voice's tone, accent, prosody, and speaking style. | |
| model_path | COMBO | (No models found - download Step-Audio-EditX) | Step-Audio-EditX model location. Place models in ComfyUI/models/step_audio/ or select from discovered models. |
| device | COMBO | cuda | Hardware device: 'cuda' for GPU (10-100x faster, ~8GB VRAM) or 'cpu' (very slow, no VRAM needed). Always use CUDA if available. |
| torch_dtype | COMBO | bfloat16 | Model precision: bfloat16 (best quality, stable, 8GB VRAM), float16 (good quality, 6GB VRAM), float32 (max quality, 16GB VRAM), auto (selects best for your GPU). |
| quantization | COMBO | none | VRAM reduction: 'none' (best quality, 8GB VRAM), int8 (good quality, 4GB VRAM), int4 (acceptable quality, 3GB VRAM), int4_awq (optimized int4, requires pre-quantized model). Use if low on VRAM. |
| attention_mechanism | COMBO | sdpa | Attention layer: sdpa (fastest, good VRAM, default), eager (slowest, most stable), flash_attn (fastest, needs RTX 30xx+), sage_attn (best VRAM efficiency). |
| temperature | FLOAT | 0.70.1β2 | Voice variation control: 0.1-0.5 (very consistent, robotic), 0.6-0.8 (natural, recommended), 0.9-1.5 (varied, expressive), 1.6-2.0 (very random, creative). Controls randomness in speech generation. |
| do_sample | BOOLEAN | true | Sampling mode: True (natural, varied speech with temperature control) or False (deterministic, uses greedy decoding, ignores temperature). Keep True for natural-sounding voices. |
| max_new_tokens | INT | 4096256β16384 | Maximum audio tokens to generate: 2048 (~10s), 4096 (~20s), 8192 (~40s). Higher = more VRAM + time. With longform chunking enabled, each chunk is limited to this value. |
| longform_chunking | BOOLEAN | false | Smart text splitting for long content (>2000 words). Splits at sentence boundaries, generates chunks separately, then stitches seamlessly. Slower but handles unlimited length. Disable for short text. |
| seed | INT | 00β18446744073709550000 | Reproducibility seed: 0 (random output each time) or any number (same input = same output). Use fixed seed to reproduce exact voice outputs with identical parameters. |
| keep_model_in_vram | BOOLEAN | true | Model caching: True (keep loaded in VRAM, fast repeated use) or False (unload after use, frees ~8GB VRAM). Disable if switching between multiple models frequently. |
| prompt_audioopt | AUDIO | Reference voice audio (3-30 seconds recommended, 0.5-30s supported). The AI will analyze and clone this voice's tone, accent, pitch, rhythm, prosody, and speaking style for target_text generation. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | β |