Test of 22 open-weights TTS systems

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.

▶  Listening grid — 391 clips, all 17 sentences The written guide Licence analysis Method
ModelScoreListenVoiceParams VRAM peakLoadAll 17 sentencesRuns on CPU? LicenceFine-tunableCode & 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

Reading the table

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.

Tried to run but failed, for various reasons

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.