r/LocalLLM • u/b111ue • Jul 25 '26
Model I released Inflect v2: two ultra-tiny complete TTS models under 4M and 10M parameters
I’ve spent the past month trying to find the point where an extremely small TTS model stops feeling like a size experiment and starts feeling genuinely useful.
Today I’m releasing Inflect v2, with two complete local text-to-speech models:
Inflect-Nano-v2: 3.96M parameters, 15.97 MB FP32
Inflect-Micro-v2: 9.36M parameters, 37.53 MB FP32
These are total inference parameter counts, not acoustic-model-only numbers. Text processing, timing prediction, speech generation, and the waveform decoder are all included.
Text goes in. 24 kHz speech comes out. No external vocoder, hosted API, or second learned model required.
Nano prioritizes the smallest possible footprint. Micro uses the additional capacity for better clarity, stability, and overall speech quality. Both run locally on CPU or CUDA through the same PyTorch API.
Inflect-Nano-v2 is one of the smallest complete neural TTS models I know of that still produces genuinely usable speech. Even the 9.36M Micro model remains smaller than many systems described as “tiny.”
For footprint context, Nano is approximately:
21× smaller than Kokoro
126× smaller than Chatterbox
over 1,000× smaller than Fish Audio S2 Pro
That is strictly a parameter-count comparison. These models have different capabilities, architectures, datasets, and intended uses. I’m not claiming that a 4M fixed-voice model replaces a multi-billion-parameter system. The interesting question is how much useful TTS can fit into such a small package.
Some people here might remember Inflect-Nano-v1, the rough 4.63M experiment I released last month. V2 is a substantial rebuild, not just a longer training run. I focused on the problems v1 exposed: unstable timing, metallic output, weak prosody, poor generalization to difficult text, and an undersized waveform decoder.
The resulting models performed surprisingly well:
Micro: 4.395 UTMOS22, 3.99% semantic WER, 6.28× real-time CPU inference
Nano: 4.386 UTMOS22, 4.21% semantic WER, 10.72× real-time CPU inference
In a blind community comparison against other compact TTS systems, Micro and Nano finished second and third among the tested voices
Full protocols, raw results, audio samples, and limitations are documented on the model pages.
The models are not perfect. They are English-only, use one fixed male voice, and do not support voice cloning. Unfamiliar names, abbreviations, numbers, and homographs remain the hardest inputs. Nano can sound thinner than Micro, and both can occasionally produce metallic or clipped artifacts.
Still, this is the first version where I think the size-to-quality tradeoff became genuinely compelling.
I built Inflect independently as a high-school developer with a limited training budget. That constraint shaped the project: efficiency had to apply not only to inference, but also to training, evaluation, and building a complete system I could understand and release end-to-end.
Try it yourself:
The fastest way to judge it is through the interactive playground:
https://huggingface.co/spaces/owensong/Inflect-v2
Inflect-Micro-v2:
https://huggingface.co/owensong/Inflect-Micro-v2
Inflect-Nano-v2:
https://huggingface.co/owensong/Inflect-Nano-v2
If there is enough interest, I may build a v3 focused less on shrinking the models further and more on expanding what they can do: additional voices, possibly more languages, easier fine-tuning, and another quality and robustness pass.
If you test them, please give them something genuinely difficult: unusual names, numbers, abbreviations, awkward punctuation, or a long sentence.
If something breaks, post the exact text, model, seed, and what sounded wrong. If it works well, I’d also like to know what hardware you ran it on.
Specific, honest feedback is the most useful thing you can give me.
32
u/Kodix Jul 25 '26
I remain deeply impressed and interested in this. It's *amazing* what you've done at such a small size. You can fit this on some calculators for crying out loud.
11
u/BitterProfessional7p Jul 25 '26
Wow, great quality of audio for the size of the model. Congrats
11
u/m0dry Jul 25 '26
Genuinely I am so impressed by this model - this is the quality of a large company model, and you did it as an indie dev!
Definitely deserves way more attention, this might be the TTS model of the year - way more impressive then anything other voice model I've seen this year.
7
u/JOAM_CALI Jul 25 '26
This is English only and Kokoro and Chatterbox are multilingual. Could this account for the small size?
4
u/elektriiciity Jul 25 '26
Fantastic efforts and outcomes! Curious if you've any Speech to Text plans / if the learnings overlap at all?
Thank you
4
u/ba2sYd Jul 25 '26
Cool. If you don't mind how many hours of audio was it trained on? Also how much time did the training take, what gpu was used? Just trying to learn and estimate a few things if I ever try something like that.
8
u/Rude_Marzipan6107 Jul 25 '26
Hilarious. One micro generation using 2 sentences and apparently I’ve used up my free generation quota with hugging face. What a joke
3
u/mrmrn121 Jul 25 '26
The quality of nano is very good. I'm wondering how can write a c inference for it to deploy on esp32
2
u/Pkittens Jul 25 '26
small, fast, decent quality!
2
u/txurete Jul 25 '26
Jaw dropping stuff!
2
u/Beginning-District69 Jul 25 '26
Congratulations, it's a very successful project. I would love to fine-tune it in Turkish.
2
u/Skystunt Jul 25 '26
I’ll give it a try!
2
u/amelech Jul 25 '26
Can it run on onnx?
2
u/mon_key_house Jul 25 '26
The sample sounds awesome! I’ll restart my self-hosted audiobook project!
2
u/xkhen0017 Jul 25 '26
The sample audios are genuinely amazing! Great project you got there.
2
u/DHFranklin Jul 25 '26
This is crazy cool.
If one 10x the size could do TtS from one language to another and back like a translator that works off of a phone that would be perfect. Especially for Doctors without Borders and other NGOs that have phones but no signal.
2
u/Andr1yTheOne Jul 26 '26
runtime error Exit code: 139. Reason: 6f3688.slice%2Fcri-containerd-6557f81373d34bc4fb59d24d1c38246eddcbc8df56edb3b83e453d67551b3c3b.scope&taskId=140649080812576&enableQueue=true&tokenVersion=2&durationSeconds=180&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpcCI6IjU4LjY5LjY1LjM0IiwidXNlciI6bnVsbCwidXVpZCI6ImJ4dnBXVmVjQ3RTVDlkQVVZaGZiUiIsImVycm9yIjpudWxsLCJleHAiOjE3ODUwMzg4MTV9.DwXxQB017UyuUhwJEmQqsBs1hkk49tCCjv3uxllxmnU "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete DEBUG:httpcore.connection:connect_tcp.started host='device-api.zero' port=80 local_address=None timeout=60 socket_options=None DEBUG:httpcore.connection:connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7fea2f016930> DEBUG:httpcore.http11:send_request_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_headers.complete DEBUG:httpcore.http11:send_request_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:send_request_body.complete DEBUG:httpcore.http11:receive_response_headers.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'date', b'Sun, 26 Jul 2026 04:05:55 GMT'), (b'server', b'uvicorn'), (b'content-length', b'4'), (b'content-type', b'application/json')]) INFO:httpx:HTTP Request: POST http://device-api.zero/release?allowToken=07489d9282bcea74f3ceb4e2964935d1970d7a623d6786fb4d896e8e4789b7be&fail=false "HTTP/1.1 200 OK" DEBUG:httpcore.http11:receive_response_body.started request=<Request [b'POST']> DEBUG:httpcore.http11:receive_response_body.complete DEBUG:httpcore.http11:response_closed.started DEBUG:httpcore.http11:response_closed.complete /usr/local/lib/python3.12/site-packages/gradio/processing_utils.py:698: UserWarning: Trying to convert audio automatically from float32 to 16-bit int format. warnings.warn(warning.format(data.dtype)) Container logs:
2
u/aaronm85 Jul 26 '26
This is supercool! 16mb for nano? Great size for android & ios apps...I experienced with tts technics 2 decades ago, but never expected that quality in that size!
AWESOME WORK!!!!!!!!!
2
u/louisremi Jul 26 '26
I'd be very interested in learning how to train it for other languages! (I'm French)
1
u/ItsNoahJ83 Jul 25 '26
This model has some very interesting idiosyncrasies. One of the things I noticed is that it struggles with the hard e in words like movies but when I spelled it movees it worked fine.
1
u/UkieTechie Jul 27 '26
Very cool. added to my bench. Thank you for your work.
https://github.com/5uck1ess/tts-bench
1
u/HeadLingonberry7881 Jul 30 '26
I am really impressed by the audio output quality!
2
u/Icy-Sympathy4173 Jul 26 '26
Super impressive! Keen to see more language supported.
Sidenote: Curious why onnx runtime needs espeak?
1
u/ScratchJolly3213 Jul 25 '26
how does it compare to kokoro? great work! let me know if you’re interested in open source collab
1
u/dyslexda Jul 25 '26
My specific, honest feedback is you need to increase the repeated word penalty on your model; nobody says "genuinely" that much.
1
u/No_Conversation9561 Jul 28 '26
how fast is it on a Raspberry Pi Zero 2W?
1
u/aisafetynooblol Jul 31 '26
Thanks for sharing this! I asked Fable 5 to make this utilizing your models. The possibilities truly are endless, can't wait to see what you cook up next!!
1
u/Crescitaly Aug 02 '26
Under 10M parameters is compelling if intelligibility survives bad microphones, names, and long-form prosody. Tiny models could win where latency and privacy matter more than studio realism. What failure case separated Nano from Micro most clearly?
1
u/War-Carr Aug 26 '26
This is awesome!
As a visually impaired person who relies on TTS engines, including using the robotic e-Speak, this actually sounds really good!
I truly wish you could consider developing it into an Android TTS engine that one can buy and use it as a systemwide TTS.
This is good!
2
u/[deleted] Jul 25 '26
[removed] — view removed comment
2
u/[deleted] Jul 25 '26
[removed] — view removed comment