Open release · development discontinued
An open Turkish text-to-speech model, released in full.
One professional voice, about 300 million parameters, a rectified-flow acoustic model at 24 kHz. Weights, code, the voice corpus and every evaluation result are public. This page lets you hear what it does well and where it falls short, with the numbers behind each sample.
Hear the voice
General · best of 8Sabah güneşi sessiz sokağın taşlarına yavaşça vuruyordu.
AI-generated. Whisper transcribed it with zero character errors; speaker similarity to the real voice 0.972.
- 304.6Mparameters
- 24 kHzoutput, 100-band mel
- 5.0 hof the released voice
- 67.55 hCommon Voice + FLEURS foundation
- 0.030CER, best of 8 (0.053 single seed)
Listen
Twenty prompts, each played twice
Two prompts from each of the ten categories in the 120-prompt turkish-v2 evaluation suite. For every sentence you can compare the first random seed as generated with the best of eight seeds picked by an automatic score. CER is the Whisper-large-v3 character error rate against the prompt. Sim is WavLM x-vector cosine similarity to the voice actor’s recordings. Selection costs eight times the compute.
Where it fails
Numbers, normalization and foreign terms
The nine prompts with the highest error rates in the suite: six were the worst single-seed results, three the worst results even after selection. Under each sentence you can read what Whisper actually heard on the raw take, and see where the raw and selected takes sit within the CER range of all eight seeds.
Single seedBest of 8Range across 8 seeds
Long inputs
One duration for the whole input
The model predicts a single total frame count per input from the pooled text encoding. There are no per-token durations and no aligner. On long text that prediction under-budgets: the same 370-character passage renders as 9.1 s of rushed, mumbled speech in one pass, and as 34.8 s when the inference stack splits it at clause boundaries (≤120 characters, 160 ms pauses, a floor of 0.085 s per non-space character). Chunking cut long-form WER from 36.6 % to 10.7 % on a single seed.
The foundation model, unconditioned
Antalia 1 Foundation is the speaker-agnostic base: 299.6M parameters, 100,000 updates on 67.55 h of Common Voice 26 and FLEURS Turkish. With speaker id 0 it produces an averaged voice that belongs to nobody. Single-seed CER on the suite is 0.18. These two samples are where the fine-tuning stages start from.
16 Euler steps instead of 32
Halving the solver steps cut generation time by 45.1 %. Mean speaker similarity stayed within 0.0006 of the 32-step recipe; the 10th-percentile similarity was lower. The release recipe uses 32 steps.
Assessment
What works, what does not
What works
- Short conversational Turkish is intelligible. Single-seed CER 0.053 across the suite (p90 0.135); best-of-8 CER 0.030 (p90 0.101).
- Grapheme input with a deterministic normalizer. Numbers, dates, currency and abbreviations are spelled out in code before synthesis. No phoneme dictionary is needed.
- Clause chunking makes long inputs usable. Long-form WER 36.6 % → 10.7 % with ≤120-character chunks.
- A frozen, transparent vocoder. BigVGAN v2 24 kHz measures within ±0.4 dB on real-mel reconstruction, so the errors you hear come from the acoustic model.
- The release is complete. Both checkpoints, the 5.0 h voice corpus, the training, selection and evaluation code, the 120-prompt suite, the listening protocol and its raw results are all public.
What does not
- Voice similarity. Automated similarity reads 0.93–0.94, but a native listener who knows the voice rated 0 of 12 synthesized-vs-real pairs as the same person. The gap is a timbre bias in the presence band (+4.0 dB at 4.7–6.8 kHz). This is the biggest limitation.
- Long inputs. The total-duration head under-budgets. Without clause chunking and a per-character frame floor, long sentences rush and mumble.
- Numbers, normalization-heavy text, foreign names and abbreviations have the highest CER. Best-of-8 partially recovers them; some prompts fail on all eight seeds.
- Single-seed variance is large. Per-prompt CER spreads up to 0.00–0.17 across seeds. The headline numbers depend on best-of-8 selection with Whisper and WavLM scorers.
- One fixed voice. No zero-shot cloning, Turkish only, 24 kHz, grapheme input.
- No multi-listener MOS, no memorization audit, no watermark.
- Latency. On an A100 with 32 steps and a resident model, a 5 s utterance takes about 2.1–2.3 s after warm-up; the first request about 6 s.
Human listening
One listener, twenty-seven trials, one verdict
Automated speaker similarity should not be read as evidence of identity. The only human listening test that was run says so plainly.
- Same person
- 0 / 12synthesized vs real, anchored
- CMOS vs real
- −1.83± 0.76, n = 12
- Pooled CMOS
- −0.67± 0.65, n = 27
- Listeners
- 1native, knows the voice
A comparative MOS session was run on 9 August 2026 with a single native listener, the project owner, who knows the voice actor’s voice. 27 non-catch trials; the 3 catch trials were rated correctly. The gated serving recipe scored +0.267 ± 0.728 against the plain recipe (n = 15). Against the real recordings, synthesized speech scored −1.833 ± 0.757 and the listener judged none of the 12 pairs to be the same person.
The session rated the v5 predecessor checkpoint. The timbre penalty in selection and the adapter stage that became Antalia 1 were the response: they lowered the measured timbre penalty from 2.585 to 1.997, still outside the real-voice range of 0.47–0.98. A protocol with three or more listeners was designed and never run.
CMOS by category
candidate vs reference, v5 checkpointArchitecture
Characters in, mel frames out
An independent implementation of a CrossFlow-style rectified-flow model. Graphemes are encoded once; the acoustic decoder denoises 100-band log-mel frames conditioned on them through cross-attention. It does not use or depend on F5-TTS or FreyaTTS weights, code, audio or data.
| System | CER mean | CER p90 | WER mean | Sim mean | Sim p10 |
|---|---|---|---|---|---|
| Foundation v3 @100k, unconditioned, single seed | 0.1835 | 0.4049 | 0.3952 | 0.8162* | 0.625* |
| v5 consistency @6000, single seed | 0.0840 | 0.2325 | 0.1870 | 0.9315 | 0.8913 |
| v5 best-of-8 (timbre-gated, w = 0.05) | 0.0375 | 0.1127 | 0.1059 | 0.9423 | 0.9113 |
| Antalia 1 (adapter v2 @1400), single seed | 0.0528 | 0.1348 | 0.1297 | 0.9331 | 0.9054 |
| Antalia 1 best-of-8 (timbre-gated) | 0.0298 | 0.1007 | 0.0934 | 0.9445 | 0.9170 |
* Foundation similarity is measured against the released voice, which the foundation never saw; it is reported only as the verifier’s floor. Similarity above 0.93 did not correspond to human identity judgements (see Human listening).
Run it locally
Synthesize a sentence
Nothing is hosted. The loader pulls the checkpoint from Hugging Face and the vocoder from nvidia/bigvgan_v2_24khz_100band_256x. A GPU is recommended; the numbers on this page were measured on an A100.
-
Clone the repository and install the package.
git clone https://github.com/0daycloud/antalia cd antalia uv sync # or: pip install -e . -
Set up the BigVGAN source tree. The vocoder is not redistributed: the repository pins commit
7d2b4545and ships a one-linehuggingface_hubcompatibility patch.git clone https://github.com/NVIDIA/BigVGAN /opt/bigvgan git -C /opt/bigvgan checkout 7d2b454564a6c7d014227f635b7423881f14bdac patch -d /opt/bigvgan -p4 < scripts/patches/bigvgan-huggingface-hub-1.patch export PYTHONPATH=/opt/bigvgan -
Synthesize with the release recipe: text guidance 4.0, sway −0.8, 32 Euler steps, clause chunking at 120 characters and the per-character frame floor.
python scripts/synthesize-crossflow.py \ --checkpoint cloud0day3/antalia-1 \ --vocoder nvidia/bigvgan_v2_24khz_100band_256x \ --speaker voicedata-candidate-b \ --prosody-presets prosody-presets.json --preset warm_voice_agent \ --text-guidance 4.0 --sway -0.8 --steps 32 --mel-clamp 5.0 \ --min-seconds-per-char 0.085 --chunk-chars 120 \ --text "Merhaba, randevunuzu yarın saat on dört otuz için yeniden planladım." \ --output merhaba.wav
--checkpoint accepts a Hub repo id, a local release directory or a training .pt file. For best-of-8 selection, generate candidates with --seed-candidates 8 and run scripts/select-best-of-n.py with timbre-profile.json and envelope-stats.json from the weights repository. inference-recipe.json there records the full recipe.