Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
A lightweight text-to-speech model with zero-shot voice cloning
| Date | Stars |
|---|---|
| 2026-07-31 | 877 |
| 2026-08-04 | 877 |
| 2026-08-06 | 877 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
0.0
growth rate 0.00%/day
https://github.com/user-attachments/assets/8b70f36e-2623-452d-b65a-be473ec36f26
# Sopro TTS
[](https://huggingface.co/samuel-vitorino/sopro)
### 📰 News
**2026.02.04 - SoproTTS v1.5 is out: more stable, faster, and smaller (135M parameters). Trained for just $100 on a single GPU, it reaches 250 ms TTFA streaming and 0.05 RTF (~20× realtime) on CPU.**
Sopro (from the Portuguese word for “breath/blow”) is a lightweight English text-to-speech model I trained as a side project. Sopro is composed of dilated convs (à la WaveNet) and lightweight cross-attention layers, instead of the common Transformer architecture. Even though Sopro is not SOTA across most voices and situations, I still think it’s a cool project made with a very low budget (trained on a single L40S GPU), and it can be improved with better data.
Some of the main features are:
- **135M parameters**
- **Streaming**
- **Zero-shot voice cloning**
- **0.05 RTF on CPU** (measured on an M3 base model), meaning it generates 32 seconds of audio in 1.77 seconds
- **3-12 seconds of reference audio** for voice cloning
---
## Instructions
I only pinned the minimum dependency versions so you can install the package without having to create a separate env. However, some versions of Torch work best. For example, on my M3 CPU, `torch==2.10.0` (without `torchvision`) achieves ~600 it/s on the AR generation.
(Optional)
```bash
conda create -n soprotts python=3.10
conda activate soprotts
```
### From PyPI
```bash
pip install -U sopro
```
### From the repo
```bash
git clone https://github.com/samuel-vitorino/sopro
cd sopro
pip install -e .
```
---
## Examples
### CLI
```bash
soprotts \
--text "Sopro is a lightweight 135 million parameter text-to-speech model. Some of the main features are streaming, zero-shot voice cloning, and 0.05 real-time factor on the CPU." \
--ref_audio ref.wav \
--out out.wav
```
You have the expected `temperature` and `top_p` parameters, alongside:
- `--style_strength` (controls the FiLM strength; increasing it can improve or reduce voice similarity; default `1.2`)
### Python
#### Non-streaming
```python
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", 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)
```
#### Streaming
```python
import torch
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", 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 TTFA:
```python
import torch
from sopro import SoproTTS
tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")
ref = tts.prepare_reference(ref_audio_path="ref.mp3")
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)
```
---
## Interactive streaming demo

After you install the `sopro` package:
```bash
pip install -r demo/requirements.txt
uvicorn demo.server:app --host 0.0.0.0 --port 8000
```
Or with docker:
```bash
docker build -t sopro-demo .
docker run --rm -p 8000:8000 sopro-demo
```
Navigate to http://localhost:8000 on your browser.
---
## Disclaimers
- Sopro can be inconsistent, so mess around with the parameters until you get a decent sample.
- Voice cloning is **highly dependent** on mic quality, ambient noise, etc. On more OOD voices it might fail to match the voice well.
- Prefer words instead of abbreviations and symbolsExcerpt of 5,545 characters
Read on GitHub11
Would you bet a product on this? Bounded 0–100 and slow moving.
matched fp:6659ffd4d453271e, desc:text-to-speech, desc:voice cloning