Recently, Nepali developer Ashish Thapa founded Ampixa Labs and open-sourced sanoTTS, a family of miniature neural speech synthesis models ranging from 294K to 2.27M parameters. It runs in real time on an ESP32-S3 microcontroller that costs around NT$100, and can also run directly in the browser via WebAssembly—no cloud servers, GPUs, or NPUs needed. “Sano” means “small” in Nepali, and the name precisely captures the project’s core philosophy: compressing neural TTS to an unprecedented size so any device can speak on its own.

Technical architecture: distilled from the Piper teacher model
The complete speech synthesis pipeline at deployment—from phoneme recognition (espeak-ng, compiled to WebAssembly at just 275KB) to acoustic model to waveform reconstruction—takes only 1.02 seconds to generate 4.54 seconds of speech on the ESP32-S3, achieving 0.22x real-time speed, which is faster than playback speed. The same C-language core also runs offline on the ESP32-C3, which lacks a floating-point unit, at 5.72x real-time speed.

The paper’s authors state that this is the smallest known complete phoneme-to-waveform neural TTS graph that can run in real time on a general-purpose microcontroller without relying on a neural accelerator.
Benchmark data: Naturalness champion under 15M parameters.
In a benchmark covering multiple small TTS systems, sanoTTS’s amy voice (1.46M parameters) achieved the best results in the sub-15M category on both SCOREQ and UTMOS naturalness prediction metrics:
- sanoTTS amy (1.46M parameters):SCOREQ 4.13、UTMOS 4.10
- TinyTTS (1.62M parameters):SCOREQ 3.94、UTMOS 3.65
- Inflect Nano (4.63M parameters):SCOREQ 3.81、UTMOS 3.65
- Kitten TTS nano (15M parameters):SCOREQ 3.02、UTMOS 3.58
- Kokoro (82M parameters):SCOREQ 4.89、UTMOS 4.52
sanoTTS achieves better naturalness scores than TinyTTS with fewer parameters. Although Kokoro leads across the board, its parameter count is 36 times that of sanoTTS’s largest voice and 279 times that of its smallest voice. Under the constraint of extremely small size, compressing to this level of quality is a fairly outstanding engineering achievement.
The team also found that the key bottleneck affecting voice quality lies in the decoder rather than the output representation. Using the same amy voice, doubling the decoder from 1.09M parameters to 1.84M parameters improved SCOREQ from 3.70 to 4.16.
From Japan to Mexico: Communities Spontaneously Expanding Language
sanoTTS natively supports English, Nepali, Hindi, Vietnamese, Indonesian, and Chinese—6 languages and 11 voices in total. However, community-driven expansion is faster than official expansion.
Japanese developer @nnn112358 ported sanoTTS to Japanese as sanoTTS-jp and integrated it into StackChan, a cute robot face running on the ESP32. He demonstrated real-time speech synthesis on X and noted that sanoTTS-jp supports streaming processing, “so no matter how long the text is, latency doesn’t increase—you can even make a StackChan that talks endlessly.” Another Japanese developer @ayousanz Created two Japanese model specifications, 8MB and 2MB, and am submitting a merge request.
Stackchan-idf と SanoTTS_jp をくっつけてみました。 pic.twitter.com/xdLeFALzyD
— nnn (@nnn112358) September 7, 2026
In Latin America, @MXZKARTA independently distilled a ~1.5M-parameter Mexican Spanish voice from Piper’s Mexican Spanish teacher model, and handled G2P normalization for Mexican place names such as Oaxaca and Tlaxcala, as well as local number and currency formats.
¡SanoTTS ya habla español mexicano! 🇲🇽🗣️
El modelo TTS neuronal más pequeño (~1.5M parámetros, corre hasta en un chip de $3 y en el navegador vía WASM) ahora tiene voz mexicana 🌵.
🔊 Descargá la voz: https://t.co/N0GYeCTdSB 🔧
Código (soporte español):… https://t.co/gYbXBZsK4U pic.twitter.com/VPV7nmVIph
— zkarta (@MXZKARTA) September 8, 2026
Installation and Usage Instructions
sanoTTS offers multiple usage channels:
- Pythonpip install sanotts, call it via CLI or library, and the voice model is automatically downloaded from Hugging Face on first use.
- Webpage: npm install sanotts-web, or directly copy the static files to deploy, all executed client-side
- Arduino / PlatformIOCompile and run directly on the ESP32-S3, outputting via GPIO to the LM386 amplifier and speaker.
- Browser experienceampixa.github.io/sanoTTS provides a live demo, with no need to install anything.
The weights of each sound model range from 337KB (heart-nano, int8 quantized) to several MB, with pure NumPy inference—no PyTorch or ONNX Runtime required.
sanoTTS – GitHub
Limitations and Applicable Scenarios
To be honest, the audio quality of sanoTTS comes at a notable cost. The embedded version mentioned in the paper (567K parameters) scores only 2.54 on SCOREQ, far below the teacher model’s 4.68. Chinese voice support is still in its early stages, and @realfxw’s review confirms this as well.
sanoTTS is suited for scenarios where audio quality requirements are not strict, but small footprint and offline capability are essential: voice prompts in industrial equipment, low-power toys, local announcements on IoT devices, and web applications that need basic voice feedback in the browser. In these scenarios, the combination of 337KB weights and zero cloud dependency is something other solutions cannot provide.
Source: KOCPC Chinese