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!
Related Tools
Breeze TTS 2
breezeblue.ai/breeze-tts-2
Open-weight multilingual TTS from BreezeBlue, built for real-time interaction. Reference-free voice design and reference-guided voice direction, with sub-40m.
Spark-X2.5-4B
huggingface.co/XHToken/Spark-X2.5-4B
XHToken's efficient 4B open-weight model: hybrid sliding-window attention for native 1M-token context, strong coding and agent performance, Apache 2.0, multilingual.
Ling-3.0-flash
huggingface.co/inclusionAI/Ling-3.0-flash
inclusionAI MIT hybrid-linear MoE: 124B total, 5.1B active.
Related Insights

Grok Bot and Hermes Bot: one person finally gets a think tank and a secretariat
Grok Bot now ships with Cursor Pro+. Hermes Bot runs on a VPS. They are not smarter chat boxes. The think tank advises, the secretariat executes, and you still make the call.
Hook OpenCode Go into Codex on Windows. Do Not Open a Second Toolkit.
A ChatGPT-signed Codex desktop app still shows mostly GPT in the picker. On Windows, enable only OpenCode Go and the Grok, GLM, Kimi, DeepSeek, and MiniMax models you already pay for appear in the same selector. Keys stay local. Native GPT stays put.
What Locks Codex Is the Picker, Not the Models
You already pay for OpenCode Go, Grok, and Z.ai, but the Codex picker still shows mostly GPT. The community project codex-router does not teach another install ritual. It puts subscriptions you already bought back into the selector, keeps keys on the machine, and leaves native GPT alone.