Nodes/comfyui-sopro-tts/SoPro Text to Speech
ComfyUI Node

SoPro Text to Speech

Local voice cloning that's fast enough to actually iterate on

By vjumpkung·Created about 23 hours ago·Updated about 23 hours ago· 0
SoPro Text to Speech
  • sopro_model
  • sopro_reference
  • audio
textHello! This is SoPro text to speech.
languageauto
generation_modeoffline
seed0
temperature0.80
top_p0.90
top_k25
steps2
max_seconds30
min_seconds0.4
stream_chunk_frames64

This is the payoff node. Type some text, get speech in your cloned voice, out the other end as a standard ComfyUI AUDIO value - no API key, no cloud round-trip, no watermark. SoPro Text to Speech is the third node in vjumpkung/comfyui-sopro-tts, and it's where the whole "drop in an MP3 of someone talking and it matches the voice" thing actually happens.

Where it sits in the wider picture: audio is the thinnest layer in ComfyUI, a stack that was image-first, then video-first, and only got sound when the silent clips needed to talk. TTS arrived as bespoke node packs with their own dependency stacks, and SoPro occupies the lightweight corner of that world. It's not the best voice outright - that's Chatterbox territory - but it's small, multilingual (the default v2-turbo model covers English, European Portuguese, French, and German), and genuinely fast on CPU. People measure it in seconds: around 2–3 seconds to generate ~10 seconds of audio, or ~7.5 seconds for 30 seconds of speech. That speed is the whole reason to reach for it - you can iterate on a line of dialogue the way you iterate on a prompt.

How it works

SoPro generates in two stages: an autoregressive model produces semantic tokens (the weights that int8 in the loader quantizes), then an acoustic model turns those into audio via a solver - that's what steps means. The seed drives both the semantic sampling and the acoustic noise, so it's your reproducibility handle. generation_mode flips between two paths:

  • offline (default) - the full-quality path. This is the one to use unless you have a reason not to.
  • streaming - uses SoPro's causal generation path internally to cut latency and memory, then joins the chunks into one normal AUDIO output. Don't expect live chunks playing into your ears; ComfyUI gets the finished clip either way.

The inputs that matter

  • model and reference - the SOPRO_MODEL and SOPRO_REFERENCE handles from the other two nodes. Both required.
  • text - multiline, so a whole paragraph is fine. This is where long scripts live.
  • language - auto by default; or force en, pt, fr, de if the model's guessing wrong.
  • generation_mode - offline or streaming, as above.
  • seed - reproducibility. Every other knob hides in Advanced.

The advanced set is where the actual tuning lives: temperature, top_p, top_k for semantic sampling; steps for the acoustic solver (default 2 - SoPro's claim to fame is how low this can go, but for a difficult reference the README suggests bumping it to 8, 16, or 32 at a speed cost); max_seconds and min_seconds for segmentation; stream_chunk_frames for the streaming chunk size.

The one gotcha people hit

SoPro's text frontend is intentionally minimal. Write numbers and symbols as words: "the year 2024" should be "the year twenty twenty four" or the model will mangle it. Keep a sentence in one language too - mixed-language text is less reliable than text written in a single selected language. And about length: people hit what feels like a ~500-character wall, but it's not a hard cap. max_seconds applies per segment - long text is split into segments automatically, so the node keeps going until the whole script is spoken. If you want the output as one clean file, just let it run and connect audio to Preview Audio or Save Audio; the segments come back joined.

Two honest cautions. First, "streaming" is a latency feature, not a live-playback feature - if you expected chunks to play as they generate, that's not what this does. Second, and more important: the upstream model ships no watermark, so a cloned voice is indistinguishable from the real thing. Only clone voices you have permission to use. That's not a footnote - that's the one rule that keeps this kind of tool legitimate.

Categoryaudio/sopro

Inputs (13)

NameTypeDefaultDescription
sopro_modelSOPRO_MODEL
sopro_referenceSOPRO_REFERENCE
textSTRINGHello! This is SoPro text to speech.
languageCOMBOautoOptional language hint: English, European Portuguese, French, or German.
generation_modeCOMBOofflineOffline gives the best quality. Streaming can reduce generation latency and memory.
seedINT00–18446744073709550000Random seed used for semantic sampling and acoustic noise.
temperatureFLOAT0.800.01–2
top_pFLOAT0.900.01–1
top_kINT251–4375
stepsINT21–64Acoustic solver steps. Higher values may improve difficult references at a speed cost.
max_secondsFLOAT301–300Maximum duration per text segment. Long text is split into multiple segments.
min_secondsFLOAT0.40–30
stream_chunk_framesINT644–1024Streaming acoustic chunk size. Must be a multiple of the model's hop ratio.

Outputs (1)

NameTypeDescription
audioAUDIO