Edge0 Releases Audio8-TTS-Realistic, a 0.6B Voice Cloning TTS Model
Edge0 has released Audio8-TTS-Realistic , an open-weight text-to-speech model for zero-shot voice cloning. Audio8-TTS-Realistic is a 0.6B-parameter model that clones a voice from 1 reference clip and transcript. It supports 23 languages, 12 more than its predecessor. The weights and code ship under Apache 2.0 . For developers, the catch is competitive multilingual accuracy at a size that is cheap to fine-tune and serve. TL;DR Size: 601M main-model parameters (codec excluded); up to 2,048 packed text/audio positions of context. Runs on: a CUDA GPU is recommended; smoke-tested on NVIDIA H20 in BF16. The paper reports 1.1 to 1.2 GiB peak memory on an Apple M2 CPU (INT4 ONNX). No Realistic ONNX export is public yet. Performance: ahead of larger open models on CV3, behind 4B-class models on MiniMax. Best: 4.86% average CV3 error across 9 languages, versus 7.73% for Qwen3-TTS-1.7B. Worst: 48.57% WER on Thai (CV3) and 31.35% CER on Cantonese (MiniMax). What is Audio8-TTS-Realistic? It is the second 0.6B release in Edge0’s Audio8 TTS family. It builds on Audio8-TTS-Preview-0.6b and keeps the same Transformers inference interface. The repository bundles the checkpoint, a 44.1 kHz neural audio codec, tokenizer, processor and custom code. It can also generate speech without a reference voice. New languages are Arabic, Finnish, Hindi, Indonesian, Malay, Norwegian, Portuguese, Russian, Swedish, Thai, Turkish and Vietnamese. How does the architecture work? The model uses a dual-autoregressive (DualAR) design inspired by Fish Audio S2 Pro . According to the technical research report , the slow branch is built on Qwen2.5 0.5B. It has 24 layers at width 896 and runs at about 21.5 frames per second. Each step predicts text tokens plus the first audio codebook. A shallow 4-layer fast branch then predicts the remaining 9 codebooks in parallel. Sequential compute therefore happens only at the frame level. How does Edge0 train for realism? The team argues that word error rate (WER) and speaker similarity (SIM) miss rhythm, pauses and timing. A model can score well on both and still sound synthetic. Training runs in 3 stages: Multilingual supervised fine-tuning (SFT). GRPO with a combined reward: 0.7 weight on WER, 0.3 on SIM. GRPO guided by a learned realism critic. The critic scores each output against a matched human recording of the same sentence. It was trained on a quality ladder built from 6 open-source TTS systems. These were ranked in a private blind listening study, with human recordings at the top. Synthetic pause compression adds finer rungs to the ladder. An identity-erasure loss stops the critic from rewarding generator fingerprints. The critic head has about 3M parameters on top of a frozen WavLM-large encoder. A duration penalty also kicks in beyond 1.35x the reference length. This blocks the policy from gaming the critic with slower speech. The final stage used only Chinese and English prompts. It still improved both aggregate metrics on the 13 lower-resource languages. Their error fell from 22.53% to 20.77%, and SIM rose from 0.637 to 0.679. Step through</button> </div> <div id="a8-stage"></div> <p class="note">The realism stage used only Chinese and English prompts, yet improved both metrics on the 13 additional languages. Source: technical report, Table 1.</p> </div> <div class="pn" data-p="bench"> <div class="ctrl"> <button class="btn on" data-b="cv3">CV3 (9 langs)</button> <button class="btn" data-b="mm">MiniMax (24 langs)</button> <button class="btn" data-b="seed">Seed-TTS EN/ZH</button> </div> <div id="a8-bench"></div> <p class="note" id="a8-bnote"></p> </div> <div class="pn" data-p="lang"> <div class="ctrl"> <button class="btn on" data-l="az">A to Z</button> <button class="btn" data-l="best">Best first</button> <button class="btn" data-l="worst">Worst first</button> </div> <div class="lg" id="a8-lang"></div> <p class="note">CV3 error rate per language (CER for Chinese, Japanese, Korean; WER otherwise). 500 items each. Shorter bar is better.</p> </div> <div class="pn" data-p="run"> <p><b>Transformers</b> (PyTorch 2.5+, Transformers 4.57+, CUDA GPU recommended):</p> <pre><code>model_id = "Edge0/Audio8-TTS-Realistic-0.6b" processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True) model = AutoModel.from_pretrained(model_id, trust_remote_code=True)</code></pre> <p><b>Serving:</b> SGLang Omni adapter with paged attention, dynamic batching and an OpenAI-compatible <code>/v1/audio/speech</code> API. Throughput and streaming were not benchmarked by Edge0.</p> <p><b>CPU:</b> the paper reports 1.1 to 1.2 GiB peak on an Apple M2 with INT4 ONNX. The repo states no Realistic ONNX export is available yet.</p> </div> <div class="ft"><span>Numbers self-reported by Edge0; competitor figures from their own sources or Boson AI's evaluation.</span><a href="https://www.marktechpost.com" target="_blank" rel="noopener">© Marktechpost</a></div> </div> <script> (function(){ var R=document.getElementById('mtp-a8tts'); function rs(){try{parent.postMessage({mtpEmbedHeight:R.offsetHeight+40,id:'mtp-a8tts'},'*')}catch(e){}} function $$(s){return Array.prototype.slice.call(R.querySelectorAll(s))} $$('.tab').forEach(function(t){t.onclick=function(){ $$('.tab').forEach(function(x){x.setAttribute('aria-selected',x===t?'true':'false')}); $$('.pn').forEach(function(p){p.classList.toggle('on',p.getAttribute('data-p')===t.getAttribute('data-t'))}); if(t.getAttribute('data-t')==='bench')bench(curB); if(t.getAttribute('data-t')==='train')stage(curG); if(t.getAttribute('data-t')==='lang')lang(curL); setTimeout(rs,60);};}); /* architecture */ var D=['A reference clip and its exact transcript condition the model. The model can also generate speech without a reference.', 'The slow branch is built on Qwen2.5 0.5B. Once per audio frame it predicts text tokens plus the first of 10 codebooks.', 'A 4-layer fast branch reads the slow hidden state and predicts the remaining 9 codebooks in parallel, adding no extra sequential steps.', 'The bundled codec turns 10 codebooks of 4,096 entries per frame back into a 44.1 kHz waveform. It is excluded from the 0.6B count.']; var det=R.querySelector('#a8-detail');det.textContent=D[0]; $$('.blk').forEach(function(b){b.onclick=b.onmouseenter=function(){$$('.blk').forEach(function(x){x.classList.toggle('on',x===b)});det.textContent=D[+b.getAttribute('data-d')]};}); var F=R.querySelector('#a8-frames'),N=16,html=''; for(var i=0;i<N;i++){html+='<div class="fr">';for(var c=0;c<10;c++)html+='<div class="cb"></div>';html+='</div>'} F.innerHTML=html;var fr=$$('.fr'),k=0; setInterval(function(){var col=fr[k%N].children; if(k%N===0)fr.forEach(function(f){Array.prototype.forEach.call(f.children,function(x){x.className='cb'})}); col[0].className='cb s';setTimeout(function(){for(var c=1;c<10;c++)col[c].className='cb f'},180);k++;},420); /* training */ var G=[[5.41,0.639,22.36,0.638],[5.01,0.643,22.53,0.637],[4.86,0.661,20.77,0.679]],curG=0; var LB=['CV3 error % (9 langs)','CV3 SIM','Extra 13 langs error %','Extra 13 langs SIM'],MX=[25,1,25,1]; function stage(g){curG=g;$$('.stp').forEach(function(s){s.classList.toggle('on',+s.getAttribute('data-s')<=g)}); $$('[data-g]').forEach(function(b){b.classList