Engineering

Redible TTS: cloud-level speech, running entirely on your phone

We built Redible TTS on the open Qwen3-TTS model and made it run entirely on a phone — no server, no internet — while keeping its intelligibility in the range of the original.

Almaz Shakirzyanov, Founder of Redible·
5.6× smallerabout 450 MB on the phone, instead of about 2.5 GB for the original model
15×faster than real time on iPhone 15 Pro Max, all on the Neural Engine
1.41 %word error rate on Seed-TTS-eval English, Android build

Why the voice has to live on the phone

Redible is an app for reading and listening to books in the language they were written in. Our own library is narrated in advance, book by book. But people also bring their own books — an EPUB bought somewhere, a classic from Project Gutenberg — and a book nobody has seen before cannot be narrated ahead of time.

So the voice for those books has to be on the phone. It has to start the moment you press play, keep going on a plane or in the metro, and never send the book anywhere. And it has to sound like a narrator, not like the robotic voice that phones have had for years.

We started from Qwen3-TTS, an open text-to-speech model from the Qwen team, in its 0.6B version, and taught it 18 fixed voices across seven languages. Then we made it small and fast enough to run on a phone — and checked, carefully, what that cost in quality.

Listen first

One sentence per language from the MiniMax multilingual test set, made by the Android build’s engine with the same files as in the app.

English“We take care of the future best by taking care of the present now”
Russian“Привет! Я новый здесь. Можете ли вы сказать, как мне добраться до метро?”
German“Hallo! Ich bin neu hier. Können Sie mir sagen, wie ich zum Bahnhof komme?”
French“Je veux absolument aller voir la pièce de Koltès au théâtre du Rond-Point cette semaine.”
Spanish“El Gran Hotel es ya el primer hotel de lujo con luz eléctrica de nuestra patria.”
Italian“Il tempo oggi è meraviglioso, che ne dici di andare al parco questo pomeriggio per goderci il sole?”
Portuguese (Brazil)“A coisa mais importante que você pode aprender é só amar e ser amado em troca.”
Portuguese (Portugal)“A coisa mais importante que você pode aprender é só amar e ser amado em troca.”

How intelligible is it?

The usual way to measure this is word error rate: let a speech recognizer transcribe the audio and count how many words come back wrong. Lower is better. We ran two open benchmarks through the phone build — Seed-TTS-eval English (1,088 sentences) and the MiniMax multilingual test set (100 sentences per language) — and transcribed everything with Whisper-large-v3-turbo.

0%1%2%3%4%5%1.000.84en2.234.46ru0.831.09de2.332.93fr0.511.49es1.911.53it0.912.25pt
Word error rate by language — our phone build (Android) and Qwen3-TTS-12Hz-0.6B as published

Next to it are the numbers published for the original model and for two cloud services, on the same sentences:

MiniMax test setRedible, on the phoneQwen3-TTS-12Hz-0.6BMiniMax-SpeechElevenLabs Multilingual v2
English1.00 %0.84 %2.16 %2.34 %
Russian2.23 %4.46 %4.28 %3.88 %
German0.83 %1.09 %1.91 %0.57 %
French2.33 %2.93 %4.10 %5.22 %
Spanish0.51 %1.49 %1.03 %1.08 %
Italian1.91 %1.53 %1.54 %1.74 %
Portuguese0.91 %2.25 %1.88 %1.33 %

And on Seed-TTS-eval English, next to the results published on the same set:

Seed-TTS-eval EnglishWord error rate
Redible, on the phone1.41 %
Qwen3-TTS-12Hz-1.7B1.24 %
Qwen3-TTS-12Hz-0.6B1.32 %
CosyVoice 31.45 %
MiniMax-Speech1.65 %
F5-TTS1.83 %
Seed-TTS2.25 %

In other words: a model 5.6 times smaller, running on a phone, lands in the same range as the original model and the cloud services. We don’t read the table as “better than” anyone, and you shouldn’t either:

We also listened. The sentences with the most “errors” were, almost every time, read exactly as written — the recognizer had misheard, added words, or invented a phrase out of silence.

What it takes on a phone

143 msfrom a tap to the first audio on iPhone
188 msfrom a tap to the first audio on a Galaxy S23+, on average
15×faster than real time on iPhone 15 Pro Max, all on the Neural Engine
10×faster than real time on a Galaxy S23+, on the CPU
≈ 450 MBto download the whole voice, 5.6× smaller than the original
≈ 6 %of battery per hour of listening on iPhone, screen locked

Speed matters most when you tap. Tap a word or a hint and you want to hear it now, so taps are served first. The iPhone figure is the median of 14 taps, with the 90th percentile at 149 ms; weaker Android phones stay under half a second. These times run from the request to the first audio ready from the engine; the phone’s own audio output adds a little on top.

In steady reading, the real-time factor is 0.067 on the iPhone and 0.096 on the Galaxy, which uses about 0.93 GB of memory. Battery use depends on the phone: 7–8 % an hour on the Galaxy. The iPhone stayed cool throughout. Part of the original model’s size is an encoder for voice cloning, which we don’t need.

How we got there

The short version: we combined randomized Hadamard rotations, GPTQ and quantization-aware training to shrink the model. We also replaced the original speech decoder with our own, smaller and faster one, built for phones. On Android the model runs on our own CPU kernels; on iPhone it is rebuilt for the Neural Engine. The two phone builds come from the same model but are tuned separately for each platform — the error rates above are for the Android build.

Two things happen before a sentence is spoken. First, the text is normalized: numbers, dates and abbreviations become words, the way a narrator would read them. Second, for Russian, where stress moves and changes meaning, the model has learned to read stress marks — an acute accent over the stressed vowel — so it puts the stress where the book does.

What we tested along the way:

How we measured

The benchmark sentences were generated by the Android build’s engine running on a Mac, with the same model files as in the app and the same sampling settings; we checked earlier that this copy produces the same output as the phone. Every sentence was spoken once, with a fixed random seed, with no picking the best of several tries. 1,783 of 1,788 sentences finished normally. The recognizer was Whisper-large-v3-turbo with the language set explicitly and greedy decoding. The reference is the original text of each set; both the reference and the transcript go through Whisper’s normalizer (the English one for English, the basic one for the other languages), and the error rate is counted over the whole set.

Sources: Seed-TTS-eval · MiniMax-Speech technical report (multilingual test set; MiniMax-Speech and ElevenLabs Multilingual v2 results, Table 2) · Qwen3-TTS technical report (Qwen3-TTS results, Seed-TTS-eval comparison) · Qwen3-TTS on GitHub

Redible is an app for reading and listening to books in their original language. This voice reads your own books in it — on iPhone and iPad and Android.