Model reference · open weights
Soprano-1.1 is an open-weight audio or speech model from ekwek. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.
Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.
What it is
| Maker | ekwek |
|---|---|
| Type | Audio & music |
| Task | Text→speech |
| Parameters (lead) | 80M |
| Runs with | transformers |
| Released | 2026-01-14 |
| Popularity | 7k downloads / month |
| Licence | Open weights |
About
2026.01.14 - Soprano-1.1-80M released! 95% fewer hallucinations and a 63% preference rate over Soprano-80M. 2026.01.13 - Soprano-Factory released! You can now train/fine-tune your own Soprano models. 2025.12.22 - Soprano-80M released! Code | Demo
Soprano is an ultra‑lightweight, on-device text‑to‑speech (TTS) model designed for expressive, high‑fidelity speech synthesis at unprecedented speed. Soprano was designed with the following features:
pip install soprano-tts
To get the latest features, you can install from source instead.
git clone https://github.com/ekwek1/soprano.git
cd soprano
pip install -e .[lmdeploy]
git clone https://github.com/ekwek1/soprano.git
cd soprano
pip install -e .
⚠️ Warning: Windows CUDA users
On Windows with CUDA,
pipwill install a CPU-only PyTorch build. To ensure CUDA support works as expected, reinstall PyTorch explicitly with the correct CUDA wheel after installing Soprano:pip uninstall -y torch pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/cu128
Start WebUI:
soprano-webui # hosted on http://127.0.0.1:7860 by default
Tip: You can increase cache size and decoder batch size to increase inference speed at the cost of higher memory usage. For example:
soprano-webui --cache-size 1000 --decoder-batch-size 4
soprano "Soprano is an extremely lightweight text to speech model."
optional arguments:
--output, -o Output audio file path (non-streaming only). Defaults to 'output.wav'
--model-path, -m Path to local model directory (optional)
--device, -d Device to use for inference. Supported: auto, cuda, cpu, mps. Defaults to 'auto'
--backend, -b Backend to use for inference. Supported: auto, transformers, lmdeploy. Defaults to 'auto'
--cache-size, -c Cache size in MB (for lmdeploy backend). Defaults to 100
--decoder-batch-size, -bs Decoder batch size. Defaults to 1
--streaming, -s Enable streaming playback to speakers
Tip: You can increase cache size and decoder batch size to increase inference speed at the cost of higher memory usage.
Note: The CLI will reload the model every time it is called. As a result, inference speed will be slower than other methods.
Start server:
uvicorn soprano.server:app --host 0.0.0.0 --port 8000
Use the endpoint like this:
curl http://localhost:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"input": "Soprano is an extremely lightweight text to speech model."
}' \
--output speech.wav
Note: Currently, this endpoint only supports nonstreaming output.
from soprano import SopranoTTS
model = SopranoTTS(backend='auto', device='auto', cache_size_mb=100, decoder_batch_size=1)
Tip: You can increase cache_size_mb and decoder_batch_size to increase inference speed at the cost of higher memory usage.
# Basic inference
out = model.infer("Soprano is an extremely lightweight text to speech model.") # can achieve 2000x real-time with sufficiently long input!
# Save output to a file
out = model.infer("Soprano is an extremely lightweight text to speech model.", "out.wav")
# Custom sampling parameters
out = model.infer(
"Soprano is an extremely lightweight text to speech model.",
temperature=0.3,
top_p=0.95,
repetition_penalty=1.2,
)
# Batched inference
out = model.infer_batch(["Soprano is an extremely lightweight text to speech model."] * 10) # can achieve 2000x real-time with sufficiently large input size!
# Save batch outputs to a directory
out = model.infer_batch(["Soprano is an extremely lightweight text to speech model."] * 10, "/dir")
# Streaming inference
from soprano.utils.streaming import play_stream
stream = model.infer_stream("Soprano is an extremely lightweight text to speech model.", chunk_size=1)
play_stream(stream) # plays audio with <15 ms latency!
Soprano is currently English-only and does not support voice cloning. In addition, Soprano was trained on only 1,000 hours of audio (~100x less than other TTS models), so mispronunciation of uncommon words may occur. This is expected to diminish as Soprano is trained on more data.
This p
From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys soprano-1-1 for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (soprano-1-1 below is illustrative; you get the exact model name on deployment.)
$ curl -sS https://api.axforge.ai/v1/audio/transcriptions \ -H "Authorization: Bearer $AXFORGE_API_KEY" \ -F model="soprano-1-1" -F file=@audio.mp3
Create an account — your API key is available in the console. 5M tokens/month currently included with every new account at launch.