Spark_TTS_Clone
Clone a voice from a single audio clip, right inside ComfyUI
- Audio_reference
- Audio
- Node Status
The sibling node in this pack does the trickier job. Spark_TTS_Clone takes a snippet of someone talking and a script, then reads the script back in that voice - zero-shot voice cloning, no fine-tuning, no training data beyond the reference clip. It turns "I want my video narrated like X" from a hiring decision into a Saturday-afternoon experiment.
Where the Creation node gives you gender and pitch sliders, this one gives you a person. It shares the same Spark-TTS 0.5B core, but instead of synthesizing a generic speaker it runs your reference audio through Spark-TTS's speaker encoder and conditions the generation on it. If you've already got a workflow that produces video, this is the node you wire in when you want it to talk.
How it works
Two ways to supply the reference. The easy one: pick a speaker_preset. That dropdown is populated live from a speakers_info.json file and ships with about 25 voices - ad_male_en, Benedict_male_en, Genshin_zhongli_male_zh, pitch-tagged variants like female_pitch_265_en, and more. Each preset maps to a bundled prompt audio file named {SpeakerName}_prompt.wav.
The better one: connect an Audio_reference from any node that outputs AUDIO - a Load Audio node, say. Audio_reference wins, no contest; the tooltip is blunt about it overriding speaker_preset. The node writes your clip to a temp file and uses it as the prompt speech. If you take that route, also fill custom_prompt_text with a transcript of the reference clip. The README and the tooltip both call it out as the thing that actually improves cloning accuracy, because Spark-TTS conditions on both the voice and its words.
Beyond the reference choice: text is your script. pitch and speed exist, but the tooltip hedges - "effect depends on cloning strength." Translation: they're weak knobs, mostly future-proofing, so don't count on them to fix a bad clone. The sampling quartet (temperature, top_k, top_p, max_new_tokens) and keep_model_loaded / use_cpu work exactly like the Creation node.
Outputs
Audio (standard AUDIO type - into your usual save/preview nodes) and Node Status (a string). Same pattern as its sibling: if the audio comes back silent, read the status string.
Installing it
Same pack, so same install: ComfyUI Manager (search "Spark-TTS") or:
cd ComfyUI/custom_nodes
git clone https://github.com/KERRY-YUAN/ComfyUI_Spark_TTS
cd ComfyUI_Spark_TTS
pip install -r requirements.txt # with your ComfyUI Python
The one extra requirement is the Speaker_Preset folder, expected at ComfyUI/models/TTS/Speaker_Preset/ - it's a separate little repo, not part of the model weights. The auto-downloader fetches both, but it's the preset half that usually fails, because it's a git clone and needs Git in your PATH. If the dropdown shows a "(No speakers directory found)" placeholder, that's what happened - run Model_Download.bat in the node folder.
Where people get burned
Reference quality matters more than anything else here. Clean, single-speaker, ten-to-twenty seconds of reference audio beats a noisy five-second clip every time - it's the same lesson every ComfyUI TTS thread eventually teaches. If the clone drifts toward a generic tone, add or improve custom_prompt_text rather than fiddling with pitch. And you can grow the preset list yourself: drop a {Name}_prompt.wav into Speaker_Preset and add a matching line to speakers_info.json, and it shows up in the dropdown on the next refresh.
One honest note on expectations: the ComfyUI TTS crowd generally ranks dedicated cloners like EchoTTS and Chatterbox above Spark-TTS's 0.5B for sheer fidelity. What this node has going for it is that it's already in your graph, with a one-file reference setup and working auto-download - plenty for narration, tutorials, and game-style voices.
And since this is cloning a real human voice we're talking about: use it on your own voice, or with the person's blessing, not on the famous audio you found online. The model is good enough that the question stops being academic.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | Cloning a voice with Spark TTS is interesting. | Text to be synthesized / 待合成的文本 |
| custom_prompt_text | STRING | Optional text transcription for the custom audio reference, improves cloning accuracy / 自定义参考音频的文本转录(可选),提高克隆准确性 | |
| speaker_preset | COMBO | ad_male_en | Select a preset speaker for cloning / 选择一个预设说话人进行克隆 |
| pitch | COMBO | moderate | Output voice pitch level (e.g., moderate). Effect depends on cloning strength / 输出语音的音高水平(例如:中等)。效果取决于克隆强度 |
| speed | COMBO | moderate | Output voice speed level (e.g., moderate). Effect depends on cloning strength / 输出语音的语速水平(例如:中等)。效果取决于克隆强度 |
| temperature | FLOAT | 0.700–1 | Sampling temperature for generation / 生成的采样温度 |
| top_k | INT | 300–100 | Top-K sampling parameter / Top-K 采样参数 |
| top_p | FLOAT | 0.700–1 | Top-P (nucleus) sampling parameter / Top-P (核) 采样参数 |
| max_new_tokens | INT | 2020100–90000 | Maximum number of new tokens to generate / 要生成的最大新 token 数 |
| keep_model_loaded | BOOLEAN | true | Keep model in VRAM after use for faster subsequent runs / 使用后将模型保留在显存中以便后续运行更快 |
| use_cpu | BOOLEAN | false | Force node execution on CPU instead of GPU / 强制节点在 CPU 而非 GPU 上执行 |
| Audio_referenceopt | AUDIO | Custom audio file for voice cloning. Overrides 'speaker_preset' / 用于语音克隆的自定义音频文件。会覆盖 'speaker_preset' |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| Audio | AUDIO | — |
| Node Status | STRING | — |