Model reference · open weights

sanoTTS

Audio ampixa Text→speech 1 build Open, with conditions 1k dl/mo

sanoTTS is an open-weight audio or speech model from ampixa. sanoTTS (BF16) weighs 110 MB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • sanoTTS is a family of tiny neural text-to-speech models developed by ampixa that supports English, Nepali, Hindi, Vietnamese, Indonesian, and Chinese.
  • The models range from 294,279 to 2,272,145 parameters and are designed to run in real-time on an ESP32-S3 microcontroller or in web browsers via WebAssembly without cloud services.
  • The project is open source under the GPL-3.0 license.

Summary of the ampixa/sanoTTS model card, 2026-10-01

What it is

Released byampixa
Released2026-07-13
VRAM110 MB for the weights

What it runs on

Memory and cards for sanoTTS (BF16)

110 MBweights, file size
1.6 GBruntime overhead
CardOne streamMemory
RTX 3060 12 GBfits11.6 GB
RTX 4060 Ti 16 GBfits15.4 GB
RTX 3090 24 GBfits23.4 GB
RTX 4090 24 GBfits23.4 GB
RTX 5090 32 GBfits31.0 GB
L40S 48 GBfits44.0 GB
A100 80 GBfits78.2 GB
H100 80 GBfits78.1 GB
RTX PRO 6000 Blackwell 96 GBfits93.8 GB
DGX Spark (GB10) 128 GB unifiedfits107 GB
H200 141 GBfits138 GB
B200 180 GBfits176 GB

From the model card

What ampixa says about sanoTTS

Read the model card

sano (सानो) — Nepali for "small." A family of tiny neural text-to-speech voices — 294k to 2.27M parameters — that run with no cloud and no NPU: real-time on a ~$3 ESP32-S3 (out a GPIO into an LM386 and a speaker), or live in the browser via WASM.

Parameter range294,279 – 2,272,145
Runs real-time on a $3 microcontrollerESP32-S3, out a GPIO into an LM386
Runs in the browserWebAssembly, no server
Per-voice footprint337 KB to 8.7 MB, zero dependencies (espeak-ng phonemizer included)
Coverage11 voices across 6 languages — English, Nepali (नेपाली), Hindi (हिन्दी), Vietnamese (Tiếng Việt), Indonesian (Bahasa), Chinese (中文)
Licenseopen source, GPL-3.0

Live demo: tts.ampixa.com/sanoTTS — every voice synthesizes your text live in the browser, no server, no upload.

Download

Both packages stream their weights from this repo by default.

import sanotts
sanotts.synthesize("Hello world", voice="heart")     # downloads heart/ from here
import { SanoTTS } from 'sanotts-web';               // fetches web/voices/ from here
const tts = await SanoTTS.load();
const result = await tts.synthesize('Hello world', { voice: 'heart' });

Python needs sanotts >= 0.3.0, the browser sanotts-web >= 0.3.0. Both fall back to the GitHub releases or the Pages host if Hugging Face cannot be reached, so an outage here cannot break an install. Python packages land in ~/.cache/sanotts/; set SANOTTS_VOICE_SOURCE=hf or =github to pin one host. In the browser, passing voiceBase yourself turns the fallback off, so a self-hosted deployment never quietly reaches back to our servers.

Samples

Two clips per voice are in this repo's samples/ folder; one is embedded below. "Package here" means this repo carries that voice's weights. The three languages without one currently ship only through the browser demo and the GitHub repo's web/voices/ — their packages haven't been exported yet.

VoiceLanguageParamsSCOREQPackage hereSample
heartEnglish 🇺🇸2.27 M3.48heart/
hfcEnglish 🇺🇸1.83 M3.94hfc-en-1p8m/
amyEnglish 🇺🇸1.46 M4.13amy-en-1p46m/
kristinEnglish 🇺🇸1.40 M4.09kristin-en-1p4m/
amy-smallEnglish 🇺🇸1.08 M3.70amy-en-1p1m/
robot (on-device, int8)English 🇺🇸567 k—not packaged here (int8 MCU format)
heart-nanoEnglish 🇺🇸294 k2.29heartnano/
IndonesianBahasa1.46 M—id-newstts-1p46m/
VietnameseTiếng Việt1.46 M—vi-vais1000-1p46m/
Nepaliनेपाली1.47 M—not exported yet — see web/voices/nepali/ in the GitHub repo
Hindiहिन्दी1.50 M—not exported yet — see web/voices/hindi/ in the GitHub repo
Chinese中文1.50 M—not exported yet — see web/voices/chinese/ in the GitHub repo

SCOREQ is a no-reference naturalness predictor, higher is better; it is only reported for the English voices, which share one 24-sentence eval set. The other languages haven't been scored against a comparable reference yet.

Size does not order this table, and we are not going to pretend it does. amy at 1.46M scores higher than heart at 2.27M because they come from different teachers and different architectures, not because one is bigger. amy and the voices above it are the piperlite lineage, distilled from a Piper/VITS teacher at 22.05 kHz. heart and heart-nano are the newer nano lineage — 24 kHz, mel-100 → ConvNeXt1D → iSTFT, distilled from a Kokoro teacher through a frozen Vocos — which is the one that quantizes to int8 and runs on a microcontroller. The two are not interchangeable and the sanotts package picks the right runtime for you.

The heart and heart-nano scores were re-measured on 2026-09-04; the eval set, checkpoint hashes, exact commands and all 24 per-clip scores are in evidence/heart-diverse24-remeasure-20260904.json. They were scored on the float32 reference render. The shipped heart-nano int8 export tracks that render at 0.981 waveform correlation, and heart ships as float32 because its int8 export reached only 0.951 against a 0.98 gate.

The "robot" row is the 567,008-parameter model that runs on the ESP32-S3.

Install & use

PlatformInstallThen
Pythonpip install sanottssanotts say "Hello" --voice heart -o hello.wav
Web (npm)npm install sanotts-webconst tts = await SanoTTS.load(); await tts.synthesize('Hello', {voice:'heart'})
Web (no build)copy dist/ + voices/see Deploy on your own site in the GitHub README
Arduino / PlatformIOzip-install or lib_deps = https://github.com/Ampixa/sanoTTS.gitarduino/README.md
Hugging Facethis repothe voice packages above, downloaded for you by pip install sanotts
Browsernothingtts.ampixa.com/sanoTTS

Pip voices: heart, hfc, amy-1p8m, amy, kristin, vi, id, amy-1p1m, heart-nano. Pure numpy infer

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

How it works

How audio & music work

Audio or textinputAudio modelrecognise / synthesiseText or audiooutputSpeech-to-text turns audio into text; text-to-speech and music models turn text into audio.
© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms