Every system was run locally on one Ubuntu box with a single RTX 3090 — no API, no cloud, nothing rented — to find out how well open-weights text-to-speech actually speaks Romanian.
| Model | Score | Listen | Voice | Params | VRAM peak | Load | All 17 sentences | Runs on CPU? | Licence | Fine-tunable | Code & weights |
|---|---|---|---|---|---|---|---|---|---|---|---|
| FireRedTTS3 | 10 | Liana clone | 2.12B + 0.94B codec † | 14 514 MB | 130 s | 63 s | no | Apache-2.0 | no training code | FireRedTeam/FireRedTTS3 | |
| Higgs TTS 3 | 9 | Liana clone | 4B | 21 114 MB ‡ | 176 s | 120 s | no | Boson Higgs TTS 3 Research and Non-Commercial | no | bosonai/higgs-tts-3-4b | |
| NeuTTS Romanian | 9 | Liana clone | ~553M + codec | 4 479 MB | 61 s | 47 s | no | a bare apache-2.0 tag in a 146-byte README | mechanically yes; codec is gated | psimandan/neutts-romanian-finetune | |
| OmniVoice | 9 | Liana clone | 0.6B | 4 038 MB | 31 s | 19 s | no | code Apache-2.0 · weights "CC-BY-NC" | yes, but NC follows the derivative | k2-fsa/OmniVoice | |
| Piper Liana high | 9 | built-in | 28.3M | — | 2.5 s | 26 s | CPU only — 3.6× faster than playback | CC BY-NC 4.0 | yes, recipe is public | eduardem/piper-liana-romanian | |
| Piper Liana medium | 9 | built-in | 15.7M | — | 3.0 s | 9.6 s | CPU only — 10× faster than playback | CC BY-NC 4.0 | yes, recipe is public | eduardem/piper-liana-romanian | |
| Supertonic 3 | 9 | built-in | ~99M | 0 MB | 15 s | 41 s | yes — 3.1× faster than playback | code MIT · weights OpenRAIL-M | legally yes, practically no | Supertone/supertonic-3 | |
| ZONOS2 | 9 | Kore clone | 8B total / 900M active | 19 239 MB | 150 s | 190 s | no | contested: HF Apache-2.0, GitHub MIT | no training code | Zyphra/ZONOS2 | |
| dots.tts-soar | 8 | Liana clone | 2.2B | 6 539 MB | 73 s | 133 s | no | Apache-2.0 | yes | dots-studio/dots.tts-soar | |
| F5-TTS Romanian | 7 | Liana clone | 335M | 5 850 MB | 42 s | 92 s | no | CC BY-NC 4.0 | yes | eduardem/f5-tts-romanian | |
| MOSS-TTS-Local v1.5 | 7 | Liana clone | 4.55B | 12 339 MB | 265 s | 38 s | no | Apache-2.0 | yes | OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5 | |
| VibeVoice-1.5B | 7 | Kore clone | 2.70B | 5 603 MB | 65 s | 191 s | no | MIT | no — MIT permits it, but no TTS training code was published | microsoft/VibeVoice-1.5B | |
| Fish S2 Pro | 6 | Liana clone | 4.56B | 20 410 MB | 135 s | 539 s | no | Fish Audio Research License | NC only; outputs may not improve a foundation model | fishaudio/s2-pro | |
| MMS-TTS Romanian | 5 | built-in | 36.3M | 712 MB | 8 s | 4.5 s | yes | CC BY-NC 4.0 | no | facebook/mms-tts-ron | |
| TADA-3B-ML | 4 | Kore clone | 4.23B + codec | 10 759 MB | 186 s | 1 244 s § | no | weights Llama 3.2 Community · code MIT | no | HumeAI/tada-3b-ml | |
| VoxCPM2 | 4 | Kore clone | 2.29B | 6 096 MB | 169 s | 60 s | yes | Apache-2.0 | yes — LoRA and full fine-tune configs published | openbmb/VoxCPM2 | |
| Chatterbox | 2 | Kore clone | 500M | 4 729 MB | 43 s | 56 s | no | MIT | no — inference-only repository, no training or LoRA code | ResembleAI/chatterbox | |
| Maya1 | 2 | from text | 3.30B | 7 458 MB | 171 s | 148 s | no | tagged apache-2.0 | no | maya-research/maya1 | |
| CosyVoice3 0.5B | 1 | Kore clone | 0.5B | 3 734 MB | 109 s | 58 s | no | Apache-2.0 | Apache-2.0 permits it; not assessed here | FunAudioLLM/Fun-CosyVoice3-0.5B-2512 | |
| Dia2-2B | 1 | Kore clone | 1.92B | 14 527 MB | 134 s | 319 s | no | Apache-2.0 + CC BY 4.0 decoder | no | nari-labs/Dia2-2B | |
| FireRedTTS3-Instruct | 1 | from text | 2.12B + 0.94B codec † | 14 479 MB | 142 s | 110 s | no | Apache-2.0, with a research-only sentence in the README | no — inference only; the instruction schema is unpublished | FireRedTeam/FireRedTTS3 | |
| IndexTTS-2.5 | 1 | Kore clone | ~0.8B | 5 938 MB | 114 s | 103 s | no | bilibili Model Use License Agreement | no code | IndexTeam/IndexTTS-2.5 |
Sorted by the blind score. The player in each row is the same sentence for every system — “Bună dimineața! Afară sunt paisprezece grade și e înnorat.” — so you can hear them against each other without leaving this page.
“All 17 sentences” is the wall-clock time to synthesise the whole set, not one sentence. Piper Liana medium really does produce all seventeen in 9.6 seconds — about 95 seconds of speech. “Runs on CPU?” gives the speed against playback for the models that need no GPU: 10× faster than playback means a minute of audio takes six seconds to make. Everything here is one run on one RTX 3090 — no batching, no warm cache, no seed search — so it tells you whether a model fits on your card and how long you wait, not its best achievable quality.
† FireRed publishes no parameter count. 2 120 632 897 is counted
from the safetensors header of fireredtts3_base, all fp32; the RedAE codec adds
943 776 322. Following the vendor's own download instruction pulls 20.8 GB,
because the base and instruct variants share one repository.
‡ Higgs' weights are only 7.61 GiB. The rest is preallocation: the two-stage
engine stands up two vLLM instances reserving 0.6 and 0.25 of whatever the card has free.
Read it as needs a 24 GB card, not needs 21 GB.
§ TADA's manifest does not reconcile with itself — it records 1 244.4 s of
total generation while the per-item figures in the same file sum to about 124 s. Both are
reproduced as recorded, so read that cell as unresolved rather than as a measurement.
The score is one native listener, blind, on letter codes. Not a MOS panel. Where two scores are within a point, treat the ordering as an opinion. “Not publishable” in the listen column is a provenance rule, not a quality verdict: those systems were only ever run as clones of a reference clip this repository does not redistribute, so there is nothing to publish. ZONOS2 scored 9 and has no audio here for exactly that reason, while two systems scoring 1 and 2 are published in full.
The last six were never run, so nothing about them was measured and nothing about them is claimed. Details for all seven are in METHOD.md.
Chatterbox ran, but not in Romanian. It rejects language_id='ro'
with a ValueError, so it was run under Italian — the listener's verdict was
“Italian, not Romanian”. Its score measures that substitution.