Sopro V2 Turbo 2610: cleaner cloned voices, same 120M model, same CPU speed
Summary
Sopro V2 Turbo is a 120M-parameter open-source TTS model with zero-shot voice cloning that streams with ~300ms time-to-first-audio on laptop CPU and runs in-browser via ONNX, reaching SOTA-level intelligibility despite its small size.
View Cached Full Text
Cached at: 10/03/26, 05:04 PM
samuel-vitorino/sopro-v2-turbo · Hugging Face
Source: https://huggingface.co/samuel-vitorino/sopro-v2-turbo
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#sopro-ttsSopro TTS
**Compatibility:**Current model artifacts require
sopro\>=2\.2\.0or@soprotts/onnx\-web\>=0\.3\.0; upgrade withpip install \-U soproornpm install @soprotts/onnx\-web@latest.
Sopro (from the Portuguese word for “breath/blow”) is a lightweight voice-cloning text-to-speech model family. This repo shipssopro-v2-turbo, a 120M-parameter open model that streams, runs comfortably on a laptop CPU or in the browser, and reaches SOTA-level intelligibility against much larger systems. The full story, evaluations, and audio samples are in theblog post.
Main features:
- 120M parameters
- English, European Portuguese, French, and German
- Streamingwith ~300 ms time-to-first-audio on a laptop CPU
- Zero-shot voice cloningfrom 5-20 seconds of reference audio
- 0.24 RTF offline / 0.21 RTF streamingon an M3 CPU, 0.07 RTF on an H100
- Runs in the browservia an ONNX runtime
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#local-demoLocal demo
Run the model and open the demo with one command:
uvx --from sopro soprotts serve
If Sopro is already installed:
soprotts serve
Then navigate tohttp://localhost:7860. The model downloads on first use and stays in the Hugging Face cache. Sopro selects CUDA or CPU automatically and defaults to CPU on macOS (pass\-\-device mpsexplicitly to use MPS). Usesoprotts serve \-\-helpfor model, device, port, and CPU int8 options.
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#browser-demoBrowser demo
There is also a fully in-browser demo with no server involved:https://samuel-vitorino.github.io/sopro/. On mobile the model is quantized, so results can be slightly below the local demo, and devices with low memory may crash. The dependency-isolated ONNX runtime and exporter are documented inweb/README\.md. Both demos use the frontend indemos/web.
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#installationInstallation
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#from-pypiFrom PyPI
pip install -U sopro
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#from-the-repoFrom the repo
git clone https://github.com/samuel-vitorino/sopro
cd sopro
pip install -e .
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#examplesExamples
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#cliCLI
soprotts "Sopro is a lightweight 120 million parameter text-to-speech model that streams and runs on device." --ref ref.wav --out out.wav
Add\-\-streamfor the streaming path. You have the expected\-\-temperature,\-\-top\-p, and\-\-top\-kparameters, alongside:
\-\-lang(en,pt,fr,de; optional, helps pronunciation on ambiguous text)\-\-int8(int8 AR weights on CPU)\-\-steps(acoustic solver steps; default 2)\-\-max\-seconds(cap per generated segment; long text is split into segments, so total length is unbounded)
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#pythonPython
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#non-streamingNon-streaming
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro-v2-turbo", device="cpu")
wav = tts.synthesize(
"Hello! This is a non-streaming Sopro TTS example.",
ref_audio_path="ref.wav",
)
tts.save_wav("out.wav", wav)
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#streamingStreaming
import torch
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro-v2-turbo", device="cpu")
chunks = []
for chunk in tts.stream(
"Hello! This is a streaming Sopro TTS example.",
ref_audio_path="ref.mp3",
):
chunks.append(chunk.cpu())
wav = torch.cat(chunks, dim=-1)
tts.save_wav("out_stream.wav", wav)
You can also precalculate the reference to reduce time-to-first-audio:
import torch
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro-v2-turbo", device="cpu")
ref = tts.prepare_reference(ref_audio_path="ref.mp3", stream=True)
chunks = []
for chunk in tts.stream(
"Hello! This is a streaming Sopro TTS example.",
ref=ref,
):
chunks.append(chunk.cpu())
wav = torch.cat(chunks, dim=-1)
tts.save_wav("out_stream.wav", wav)
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#disclaimersDisclaimers
- We did not add watermarking: with an open-source inference pipeline it would be trivial to remove, so it would only provide a false sense of safety. Please use the model for good: do not impersonate people.
- The text frontend is deliberately minimal, so some abbreviations, numbers, and symbols may not be pronounced correctly. Prefer words:
1 \+ 2should be writtenone plus two. That said, Sopro generally reads common abbreviations like “CPU” or “TTS” fine, and you can put a language-specific normalizer in front of it. - Mixed-language text is a weak spot: words from one language inside a sentence of another (an English product name in a Portuguese sentence, for example) can be mispronounced.
- The streaming path (chunked attention and the causal vocoder) is not bit-exact with the offline path. For best quality, prefer the offline path.
- We are not planning to release the training code in the near future due to its complexity.
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#training-dataTraining data
https://huggingface.co/samuel-vitorino/sopro-v2-turbo#acknowledgementsAcknowledgements
Similar Articles
Fast On-Device Voice Cloning (9 minute read)
Sopro V2 is an open-source, fast, on-device text-to-speech model with voice cloning, specifically targeting European Portuguese and other languages for low-latency and private communication.
Tested out VoxCPM2 (Open-Source TTS) locally. The "Ultimate Cloning" mode capturing breathing/accents is getting insane.
Technical breakdown and benchmarks of VoxCPM2, an open-source TTS model featuring Ultimate Cloning Mode for capturing breathing and accents, tested locally with low VRAM footprint and cross-lingual accent retention.
@FeitengLi: A 99M parameter TTS runs on CPU, faster than a 2B model on A100. Supertone's newly open-sourced supertonic-3 with ONNX Runtime, fully local, can run in browser, on phone, and even on Raspberry Pi.
Supertone released Supertonic 3, an open-source TTS model with 99M parameters that runs faster on CPU than a 2B model on A100, supporting 31 languages and ONNX Runtime for fully local inference.
@akshay_pachaar: this TTS model generates speech 167x faster than you can hear it. Supertonic is an on-device TTS engine that runs via O…
Supertonic is a new open-source TTS engine that runs on-device via ONNX, supporting 31 languages and outperforming ElevenLabs in speed, even on a Raspberry Pi without a GPU.
S1-mini by Superwhisper running 100% locally in the browser on WebGPU with Transformers.js
S1-mini is a 600M-parameter LLM that cleans up speech-to-text transcripts by removing errors and adding punctuation, running locally in the browser via WebGPU and Transformers.js.