sanoTTS logo

sanoTTS

Visit

Tiny neural TTS from 294k to 2.3M parameters. Runs in the browser or on a $3 ESP32-S3. 11 voices, 6 languages, GPL-3.0.

Share:
View alternatives

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-nano is 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 / PlatformIO lib_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-web is the documented path.
  • Local scripts: sanotts say "Hello" --voice amy -o hello.wav for 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

  1. Open the browser demo and type a sentence. Nothing is uploaded.
  2. Or install Python: pip install sanotts then sanotts say "Hello from a two megabyte voice." --voice amy -o hello.wav.
  3. Voices land in ~/.cache/sanotts/ from Hugging Face by default. Set SANOTTS_VOICE_SOURCE=github if HF is blocked.
  4. For a microcontroller, follow arduino/README.md and flash a quantized voice blob from the voices-v1 / voices-v2 releases.

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

Tips

  1. Start with the browser demo before flashing a board. If heart is good enough in WASM, you may not need the MCU path.
  2. Pin SANOTTS_VOICE_SOURCE in CI so a Hugging Face outage does not fail builds.
  3. 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!