← all posts
// local · tts

Edge0 Audio8 TTS at 0.6B: where on-device voice cloning holds and where it breaks

Edge0 released Audio8-TTS-Realistic-0.6b under Apache 2.0: zero-shot voice cloning from one reference clip, 23 languages, 601 million parameters before the codec. That is small enough to sit next to a local LLM on a laptop without anyone noticing the memory. The headline error rate is 4.86% across nine core languages of the CV3 benchmark. Then you scroll to the per-language table and find Thai at 48.6% word error rate. The model is real and useful. The question is which half of its language list you live in, and the card gives you no speed figures to plan with.

What is inside

Every second of speech costs the model about 21.5 rounds of a two stage loop. The design is DualAR, credited to Fish Audio's S2 Pro: a slow transformer (24 layers, width 896) picks one semantic token per audio frame, then a fast 4 layer transformer fills in that frame's ten codec codebooks of 4,096 entries each. At 44.1 kHz and 2,048 samples per frame, a ten second sentence is about 215 rounds. The codec ships separately from the 0.6B count, so your download is bigger than the headline.

The constraint that matters most for products is the context: 2,048 packed positions shared by the reference audio, its transcript and the text you want spoken. My back-of-envelope arithmetic says that even if every position were audio, you would get under 100 seconds, and a ten second reference clip spends roughly 215 frames before any text is counted. In practice you synthesise sentence by sentence and stitch. The card also insists that the reference transcript "must match the spoken content exactly", and says noisy clips or loose transcripts reduce stability and speaker similarity. Every user-facing cloning flow therefore needs a transcription step you trust, not a quick dictation.

Where it holds and where it breaks

The card's numbers are vendor-measured with ASR-based error rates (lower is better) and speaker similarity from 0 to 1. On Seed-TTS it reports 1.25% average error with 0.704 similarity. On CV3, English sits at 2.9% WER, Chinese at 1.8% CER, German 3.2%, Spanish 3.4%, Italian 4.9% and Korean 4.8%. On a separate MiniMax set German drops below 1%.

The twelve languages added in this release are a different story. On CV3, Thai is 48.6%, Finnish 32.3%, Vietnamese 28.1%, Hindi 21.7%, Arabic 21.1% and Swedish 19.3%. Even Polish, carried over from the preview, sits at 19.2%. Cantonese, which was already in the preview, reads 31.3% CER on the MiniMax set. Oddly, similarity stays around 0.66 to 0.72 in those languages, so the voice sounds like the person while the words go wrong. That is the worst combination for a product, because a listener trusts the voice and does not catch the error. Czech, which matters to me, is not on the supported list at all; the card still reports 8.6% WER for it on MiniMax, marked as unsupported.

A cloned voice with a 20% word error rate is worse than a generic voice that gets every word right, because the listener trusts it.

The card lists the usual autoregressive TTS failure modes too: mispronunciations, repetitions, omissions and early stopping. Its advice is to listen to outputs before shipping them, which is fair, and also tells you nobody has a reliable automatic gate yet.

Running it on Apple Silicon

The official path is PyTorch with trust_remote_code, recommended on a CUDA GPU, and Edge0's own runtime tests ran on an NVIDIA H20. The card states plainly that throughput and streaming were not benchmarked, and it reports no real-time factor or latency. For a Mac there are two community routes. A 4-bit MLX conversion runs through mlx-audio, takes 1.69 GB on disk because the codec keeps its source precision, and returns one complete waveform per call with no streaming. A GGUF build for audio.cpp comes as Q8_0 at 1.43 GB or BF16 at 1.89 GB, with CUDA, Vulkan and CPU backends listed and no Metal. Neither page publishes speed numbers. I expect it to be usable, but I would not ship a figure I have not measured, and you should not either. Edge0's ecosystem page has on-device figures for its smaller 0.1B TTS and its LLMs, not for this model.

This is the harness I use for any local TTS on an M-series machine. Take 50 sentences per language you care about, short, medium and long, including numbers and names. Generate each with a fixed reference clip and record wall time, audio duration and peak memory from MLX's peak memory counter. Real-time factor is wall time divided by audio duration, and because there is no streaming, time to first audio equals total synthesis time, which is the number your user feels. Run the outputs back through Whisper and compute WER against the input text, the same way the card measures intelligibility, so your numbers compare with theirs. Score speaker similarity with a speaker embedding model against the reference. Do all of it on battery as well as on power, because sustained clocks on a MacBook Air differ from a plugged-in Mac mini. My notes on MLX and Core ML trade-offs cover why the same model can behave differently across those runtimes.

My call

If your app speaks English, Chinese, Korean, German, Spanish or Italian, I would ship Audio8 for narration, accessibility readers and app prompts, under a licence that will not ambush you later. For Thai, Cantonese, Finnish, Vietnamese and the new South Asian and Arabic languages, treat it as a preview and route cloned voices to a cloud voice or a non-cloned default; at 48.6% WER a Thai listener hears close to half the words go wrong in a voice they trust. Put the Whisper round-trip into CI and fail any build where a language's WER climbs above the threshold you set today. Add an explicit consent step before the reference clip upload, because the card asks for consent on every cloned voice and, with weights this easy to run, nothing else enforces it.

#tts#voice-cloning#apple-silicon#open-weights