sanoTTS is a family of tiny neural text-to-speech voices from Ampixa. The name is Nepali for "small." The GitHub repo Ampixa/sanoTTS is GPL-3.0, created 2026-07-11. On 2026-09-05 the API listed about 186 stars. Parameter counts on the README range from 294k (heart-nano, 337 KB of int8 weights) to 2.27M (heart at 24 kHz). Inference is numpy on the Python path, with no PyTorch and no ONNX Runtime. A WebAssembly build runs in the browser with no server. An Arduino / PlatformIO port targets ESP32-S3 boards around the $3 class.
Compare Breeze TTS 2 if you want a larger open-weight multilingual model with voice design, or ElevenLabs Turbo v2.5 if you want a hosted API.
Key Features
- Complete stack in hundreds of kilobytes:
heart-nanois documented as a full TTS stack at 294k parameters / 337 KB. Larger voices (heart,hfc,amy-1p8m,amy,kristin,vi,id,amy-1p1m) trade size for quality. - No cloud required: Python CLI, browser WASM, and microcontroller firmware all run locally. Voices download from huggingface.co/ampixa/sanoTTS on first use, with GitHub Releases as fallback.
- Six languages, eleven voices: English, Nepali, Hindi, Vietnamese, Indonesian, and Chinese, per the README.
- espeak-ng phonemizer included: the browser demo phonemizes on-device. Under 4 MB per voice is the project's size claim.
- Install paths:
pip install sanotts,npm install sanotts-web, Arduino zip / PlatformIOlib_deps, or just open the live demo.
Limitation: GPL-3.0 is copyleft. Shipping sanoTTS inside a proprietary product has license work you do not have with Apache-2.0 TTS stacks. Quality will not match a frontier hosted voice. Star count is still small; treat SCOREQ / UTMOS "leads the sub-15M class" as the author's claim, not an independent audit.
Use Cases
- Offline gadgets: toys, badges, and ESP32-S3 boards that need speech without a network or NPU.
- Static websites: drop WASM + voice files on a CDN. The npm package
sanotts-webis the documented path. - Local scripts:
sanotts say "Hello" --voice amy -o hello.wavfor batch files without a GPU.
Pricing
The software is free under GPL-3.0. There is no hosted inference SKU. Hardware cost is whatever board you already have; the README's $3 figure is the ESP32-S3 class it targets, not a product you buy from Ampixa.
Getting Started
- Open the browser demo and type a sentence. Nothing is uploaded.
- Or install Python:
pip install sanottsthensanotts say "Hello from a two megabyte voice." --voice amy -o hello.wav. - Voices land in
~/.cache/sanotts/from Hugging Face by default. SetSANOTTS_VOICE_SOURCE=githubif HF is blocked. - For a microcontroller, follow
arduino/README.mdand flash a quantized voice blob from thevoices-v1/voices-v2releases.
First-party resource: the GitHub README.
Frequently Asked Questions
Does it need a GPU?
No. Python inference is numpy. The MCU path is int8 on ESP32-S3.
Can I use it commercially?
GPL-3.0 requires you to share corresponding source if you distribute a binary that includes it. Read the license; this page is not legal advice.
Where do the weights live?
Hugging Face ampixa/sanoTTS, with GitHub Releases as backup.
Alternatives
- Breeze TTS 2: larger open-weight English/Chinese model with voice design and cloning.
- ElevenLabs Turbo v2.5: hosted low-latency TTS.
- OpenAI tts-1: simple API TTS if you already pay OpenAI.
Tips
- Start with the browser demo before flashing a board. If
heartis good enough in WASM, you may not need the MCU path. - Pin
SANOTTS_VOICE_SOURCEin CI so a Hugging Face outage does not fail builds. - Do not drop GPL code into an MIT/Apache app without a lawyer. The license is the product constraint.
Conclusion
sanoTTS is TTS for people who care about bytes and milliwatts, not arena scores: a 294k-to-2.3M voice family that runs in the browser or on a cheap microcontroller. Start at the demo or the repo.
Comments
No comments yet. Be the first to comment!