SAVRN
Search Contact SAVRN

Open-weight model · Text to speech

Soprano-1.1-80M

by Eugene Kwek ekwek/Soprano-1.1-80M

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!

Parameters80M
Context1,024
Weights280.9 MB
Licenseapache-2.0
AccessOpen weights
Monthly Downloads52.9k

Runs On

What it takes to serve Soprano-1.1-80M (80M parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 0.2 GB 0.2 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 0.1 GB 0.1 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Sep 18, 2026.

Model Card

By Eugene Kwek, published under apache-2.0, revision 27b5a5f5f541.

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: - Up to 2000x real-time generation on GPU and 20x real-time on CPU - Lossless streaming with one plus one, etc) If Soprano produces unsatisfactory results, you can easily regenerate it for a new, potentially better generation. You may also change the…

Read Eugene Kwek's full model card

Soprano: Instant, Ultra‑Realistic Text‑to‑Speech

[![Alt Text](https://img.shields.io/badge/Github-Repo-black?logo=github)](https://github.com/ekwek1/soprano) [![Alt Text](https://img.shields.io/badge/HuggingFace-Demo-yellow?logo=huggingface)](https://huggingface.co/spaces/ekwek/Soprano-TTS)

News

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


Overview

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: - Up to 2000x real-time generation on GPU and 20x real-time on CPU - Lossless streaming with <15 ms latency on GPU, <250 ms on CPU - <1 GB memory usage with a compact 80M parameter architecture - Infinite generation length with automatic text splitting - Highly expressive, crystal clear audio generation at 32kHz - Widespread support for CUDA, CPU, and MPS devices on Windows, Linux, and Mac - Supports WebUI, CLI, and OpenAI-compatible endpoint for easy and production-ready inference


Installation

Install with wheel (CUDA-only for now)

pip install soprano-tts

To get the latest features, you can install from source instead.

Install from source (CUDA)

git clone https://github.com/ekwek1/soprano.git
cd soprano
pip install -e .[lmdeploy]

Install from source (CPU/MPS)

git clone https://github.com/ekwek1/soprano.git
cd soprano
pip install -e .

Warning: Windows CUDA users

On Windows with CUDA, pip will install a CPU-only PyTorch build. To ensure CUDA support works as expected, reinstall PyTorch explicitly with the correct CUDA wheel after installing Soprano:

bash pip uninstall -y torch pip install torch==2.8.0 --index-url https://download.pytorch.org/whl/cu128


Usage

WebUI

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: bash soprano-webui --cache-size 1000 --decoder-batch-size 4

CLI

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.

OpenAI-compatible endpoint

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.

Python script

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!

Usage tips:

  • Soprano works best when each sentence is between 2 and 15 seconds long.
  • Although Soprano recognizes numbers and some special characters, it occasionally mispronounces them. Best results can be achieved by converting these into their phonetic form. (1+1 -> one plus one, etc)
  • If Soprano produces unsatisfactory results, you can easily regenerate it for a new, potentially better generation. You may also change the sampling settings for more varied results.
  • Avoid improper grammar such as not using contractions, multiple spaces, etc.

Limitations

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.


License

This project is licensed under the Apache-2.0 license. See LICENSE for details.

Configuration

Architecture
Qwen3ForCausalLM
Context length (tokens)
1,024
Layers
17
Hidden size
512
Feed-forward size
2,304
Attention heads
4
Key/value heads
1
Head dimension
128
Vocabulary size
8,192
RoPE base
10,000
Model type
qwen3

Identity and Version

Repository
ekwek/Soprano-1.1-80M
Publisher
Eugene Kwek
Task
Text to speech
Modality
Audio
Library
transformers
Parameters
80M parameters
Languages
Not stated by the source
Revision
27b5a5f5f541a1db3a51d6fd1b0fc7147b92cd01
First published
2026-01-14
Last updated
2026-01-14

Files and Weights

9 files, 283.9 MB in total. The weights are 2 files totalling 280.9 MB in pth, safetensors.

Weights2 files · 280.9 MB
Configuration3 files · 1.3 KB
Tokenizer2 files · 3.0 MB
Documentation1 file · 6.6 KB
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
decoder.pthWeights121.4 MB 11245487e458
model.safetensorsWeights159.4 MB 10e8c4223e14
config.jsonConfiguration1.1 KB
generation_config.jsonConfiguration111 B
special_tokens_map.jsonConfiguration28 B
README.mdDocumentation6.6 KB
.gitattributesRepository1.5 KB
tokenizer.jsonTokenizer1.6 MB
tokenizer_config.jsonTokenizer1.4 MB

License and Download

License
apache-2.0
Access
Open weights, no gate
Download size
280.9 MB
Download from Eugene Kwek

Released by Eugene Kwek through its official repository on Hugging Face. Read the license.

Memory Requirements

PrecisionWeights in memory
As published280.9 MB
16-bit0.2 GB
8-bit0.1 GB
4-bit0.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About Soprano-1.1-80M

How much GPU memory does Soprano-1.1-80M need?

About 0.2 GB at 16-bit and 0 GB at 4-bit: the weights (80M parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run Soprano-1.1-80M on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use Soprano-1.1-80M commercially?

Yes. Soprano-1.1-80M is released under Apache License 2.0. The Apache License 2.0 is a permissive open-source license. It permits commercial use, modification and redistribution. It requires keeping the license and copyright notices and any NOTICE file, stating significant changes, and it includes an express patent grant from contributors.

What is Soprano-1.1-80M's context length?

1,024 tokens, from the maximum position embeddings in its published configuration.

Similar Models

Model · Text to speech

mms-tts-hin

AI at Meta

mms - vits pipelinetag: text-to-speech This repository contains the Hindi (hin) language text-to-speech (TTS) model checkpoint. This model is part of Facebook's Massively Multilingual Speech project, aiming to provide speech technology across a diverse range of languages. You can find more details about the supported languages and their ISO 639-3 codes in the MMS Language Coverage Overview, and see all MMS-TTS checkpoints on the Hugging Face Hub: facebook/mms-tts. MMS-TTS is available in the Transformers library from version 4.33 onwards. VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech) is an end-to-end speech synthesis model that predicts a speech…

Open weights cc-by-nc-4.0 36M parameters transformers

Model · Text to speech

mms-tts-eng

AI at Meta

mms - vits pipelinetag: text-to-speech This repository contains the English (eng) language text-to-speech (TTS) model checkpoint. This model is part of Facebook's Massively Multilingual Speech project, aiming to provide speech technology across a diverse range of languages. You can find more details about the supported languages and their ISO 639-3 codes in the MMS Language Coverage Overview, and see all MMS-TTS checkpoints on the Hugging Face Hub: facebook/mms-tts. MMS-TTS is available in the Transformers library from version 4.33 onwards. VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech) is an end-to-end speech synthesis model that predicts a speech…

Open weights cc-by-nc-4.0 36M parameters transformers

Model · Text to speech

mms-tts-bam

AI at Meta

mms - vits pipelinetag: text-to-speech This repository contains the Bamanankan (bam) language text-to-speech (TTS) model checkpoint. This model is part of Facebook's Massively Multilingual Speech project, aiming to provide speech technology across a diverse range of languages. You can find more details about the supported languages and their ISO 639-3 codes in the MMS Language Coverage Overview, and see all MMS-TTS checkpoints on the Hugging Face Hub: facebook/mms-tts. MMS-TTS is available in the Transformers library from version 4.33 onwards. VITS (Variational Inference with adversarial learning for end-to-end Text-to-Speech) is an end-to-end speech synthesis model that predicts a speech…

Open weights cc-by-nc-4.0 36M parameters transformers

Model · Text to speech

VieNeu-TTS-v3-Turbo

Pham Nguyen Ngoc Bao

VieNeu-TTS v3 Turbo is the next generation of Vietnamese TTS — 48 kHz high-fidelity speech, 23 built-in preset voices across three regions (North / Central / South), instant voice cloning, real-time streaming with an OpenAI-compatible API (16 concurrent streams on one RTX 3060), inline emotion cues, and seamless bilingual (En–Vi) code-switching. The reference implementation is the vieneu Python SDK (v3.7.1). Its minimal install is torch-free: on CPU everything runs on ONNX Runtime (PyTorch is never imported), and on a CUDA machine it auto-switches to the PyTorch engine with automatic batching and a continuous-batching stream scheduler — same API, no code change. The VieNeu-TTS v3 Turbo…

Open weights apache-2.0 131M parameters 1,024 tokens

Model · Text to speech

kokoro-inno-clone-tuner

Jeremy Braun

Zero-shot voice tuner for Kokoro-82M. Outputs base Kokoro compatible voice packs @ [510, 1, 256]. Same passage for every voice, enrolled from the references. LibriTTS-R speakers are dev-clean held out from training. Integrated into Kokoro-FastAPI (v0.9.0+) The pack is a plain tensor; torch.save(pack, "voices/amme.pt") makes it a voice file like any other, prefixed by accent and gender like the stock packs. The pitch-tracking ceiling is set automatically from the reference's harmonic spacing, so band-limited or archival sources land in the right octave without tuning. - enroll(..., fmax=180) overrides it if a voice still reads the wrong register. Enrollment embeds an input audio sample via…

Open weights apache-2.0 10M parameters

Model · Text to speech

Kokoro-82M

Hexgrad

Kokoro is an open-weight TTS model with 82 million parameters. Despite its lightweight architecture, it delivers comparable quality to larger models while being significantly faster and more cost-efficient. With Apache-licensed weights, Kokoro can be deployed anywhere from production environments to personal projects. You can run this basic cell on Google Colab. Listen to samples. For more languages and details, see Advanced Usage. Under the hood, kokoro uses misaki, a G2P library at https://github.com/hexgrad/misaki Model SHA256 Hash: 496dba118d1a58f5f3db2efc88dbdc216e0483fc89fe6e47ee1f2c53f18ad1e4 Data: Kokoro was trained exclusively on permissive/non-copyrighted audio data and IPA…

Open weights apache-2.0