🖥️GPT-SoVITS
Voice cloning inside a ComfyUI graph
- audio
- audio_path
GPT-SoVITS is a real, actively-discussed open-source voice cloning project - it comes up whenever people compare local TTS options against RVC and F5-TTS, and the consistent take is that it's one of the better free options for cloning a specific voice from a short reference clip. This node is comfyui_LLM_party's wrapper around it, and it's aimed squarely at the "one-stop LLM + TTS + ComfyUI" pipeline the README talks about: an LLM writes the script, this node speaks it in a cloned voice, and the rest of your graph (subtitles, video, whatever) picks up from there.
The mechanism is few-shot voice cloning: you give it a short reference audio clip plus its exact transcript, and it learns to speak new text in that voice. That's what ref_audio_path and prompt_text are for - the audio file and the text it actually says, which need to match closely or the cloning quality falls apart. text is what you actually want spoken (the default is a Chinese sample line, which tells you where this project's primary audience is), and text_lang / prompt_lang tell the model what language each piece of text is in - there's a long list of choices because GPT-SoVITS supports Chinese, English, Japanese, Korean, Cantonese, and mixed-language variants (the all_* options), which is more language coverage than most Western TTS tools bother with. text_split_method (default cut5) controls how your input text gets chunked before synthesis - this affects pacing and where pauses land, so if a long line comes out rushed or oddly broken, try a different cut method. GPT_weights_path and Sovits_weights_path point at the actual trained model checkpoints GPT-SoVITS needs to run - this node doesn't ship those for you, they're a separate download (either the stock GPT-SoVITS base checkpoints or a voice you've fine-tuned yourself), so budget time for that step before you expect this node to produce anything. Outputs are audio (feed straight into a save-audio or video-mux node) and audio_path, the file location on disk if something downstream needs a path rather than the raw audio object.
Installing it is the standard pack install: search "comfyui_LLM_party" in ComfyUI Manager, or git clone https://github.com/heshengtao/comfyui_LLM_party into custom_nodes and restart, then pip install -r requirements.txt from the pack folder using ComfyUI's own Python. This node in particular pulls in real weight - GPT-SoVITS's own dependencies are not trivial, so expect a heavier install than the pack's text-only nodes, and don't be surprised if it takes longer than everything else in the pack combined.
A couple of things worth knowing before you lean on this for anything real. GPT-SoVITS's code is MIT-licensed, but the weights themselves don't carry an unambiguous commercial license - it's a live open question in the community rather than a settled one, so if you're shipping cloned audio commercially, verify it yourself instead of assuming MIT covers everything. And the fiddly part is exactly where you'd expect: clone quality lives or dies on the reference clip, so a noisy or too-short sample gives you a worse voice no matter how good the base weights are - grab the cleanest few seconds of the source voice you can find before you blame the model.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | 先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。 | — |
| text_lang | COMBO | zh | 11 options: auto, auto_yue, en, zh, ja, yue, +5 |
| ref_audio_path | STRING | — | |
| prompt_text | STRING | — | |
| prompt_lang | COMBO | zh | 10 options: auto, en, zh, ja, yue, ko, +4 |
| text_split_method | COMBO | cut5 | 6 options: cut0, cut1, cut2, cut3, cut4, cut5 |
| batch_size | INT | 1 | — |
| media_type | COMBO | wav | 4 options: wav, raw, ogg, aac |
| GPT_weights_path | STRING | — | |
| Sovits_weights_path | STRING | — | |
| is_enable | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| audio_path | STRING | — |