Prepare SoPro Voice Reference
The node that actually clones the voice
- sopro_model
- reference_audio
- reference
The voice clone happens here, not in the synthesis node. SoPro is a zero-shot voice cloner - feed it a clip of someone talking and it builds an encoded reference that every sentence you generate from then on is matched against. Prepare SoPro Voice Reference is that encoding step, and it's deliberately separate from generation so you pay the encoding cost once and reuse it for as many text rolls as you want.
That separation is the feature. Prep a few speakers up front and you've got a little voice bank: swap the reference wire into SoPro Text to Speech and the same text comes out in a different voice, no re-encoding. If you've only got one voice in mind, this node still matters because it's where reference quality decides everything downstream. A clean reference beats any amount of synthesis tuning - that's true of every cloner in this corner (Chatterbox, F5-TTS, all of them), and SoPro is no exception.
How it works
The node takes ComfyUI's standard AUDIO value and does three quiet things before handing it to the model's encoder:
- Mixes to mono. Batches and channels get averaged down to a single mono reference, so a stereo
LoadAudiofile is fine - it just gets collapsed. - Crops with a pause-aware algorithm to your target
reference_seconds. That's a polite way of saying it looks for speech boundaries instead of lopping audio off mid-word. - May add a whisper of room tone - which is what the
seedinput is for. Yes, a seed for silence. SoPro pads the reference slightly so the clone doesn't sound like it's in a vacuum, and the seed controls that fill. Crank it for determinism, leave it alone otherwise.
The inputs that matter
- model - the
SOPRO_MODELhandle from Load SoPro Model. Required, no way around it. - reference_audio - an
AUDIOinput, typically from ComfyUI's core Load Audio node. - reference_seconds - target length of the retained crop, default 15, range 1–120. SoPro's own recommendation is a clean 5–20 second clip, so the default is on the money.
- seed - room-tone fill, default 0. Advanced; touch it if you're chasing reproducible output.
The one output is reference, a SOPRO_REFERENCE handle that wires straight into SoPro Text to Speech. You never hear the reference itself - it's an encoded token, not audio.
What makes a good reference
Keep it to one speaker, 5–20 seconds, no background music, no heavy reverb. The crop means you can drop in a longer clip and it'll carve out the best chunk - a three-minute podcast segment works, it just keeps the pause-aware slice. What you can't fix later: if the reference is noisy, the clone inherits the noise. And since everything gets mixed to mono, don't waste effort on stereo placement.
Common issues
Install is the same story as the rest of the pack - clone the repo, pip install -r requirements.txt into the same Python that runs ComfyUI, restart (details on the Load SoPro Model page). If this node throws, it's almost always because the reference is empty or not proper AUDIO - Load Audio is the reliable source. Keep reference_seconds above the 1s minimum and you'll be fine.
One habit worth forming: keep this node separate from the synthesizer even in a throwaway workflow. Re-rolling text doesn't re-encode the reference, and once you feel how much faster that makes iterating on a script, you'll never bake the reference into the generation step again.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| sopro_model | SOPRO_MODEL | — | |
| reference_audio | AUDIO | — | |
| reference_seconds | FLOAT | 15.01–120 | Target amount of reference audio retained by SoPro's pause-aware crop. |
| seed | INT | 00–18446744073709550000 | Controls the tiny room-tone fill SoPro may add while preparing a reference. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| reference | SOPRO_REFERENCE | — |