Antalia 1: An Open Turkish Text-to-Speech Model from a Rights-Clean Pipeline, and Why Automated Speaker Similarity Was Not Enough
A ~300M-parameter rectified-flow Turkish TTS model trained only on Common Voice, FLEURS and one consenting voice actor’s recordings, released with its foundation model, code, voice corpus and evaluation suite. It reaches a Whisper-large-v3 CER of 0.0528 on a single seed and 0.0298 with best-of-8 selection at an automated speaker similarity of 0.93–0.94, and a native listener who knows the voice judged 0 of 12 synthetic-versus-real pairs to be the same person. This is the web version of the release report.
Development is discontinued and the model is not served. Human evaluation is a single informed listener, run on the checkpoint before the released one; no multi-listener MOS or CMOS exists for any version. Headline CER depends on best-of-8 selection. The limitations are part of the result.
~300M-parameter rectified flow
Character-conditioned flow matching over 100-band log-mel at 24 kHz, 16 Transformer blocks, one scalar duration head, frozen BigVGAN v2 vocoder. One voice, no zero-shot cloning.
Nothing scraped
67.55 h of filtered Common Voice 26.0 and FLEURS Turkish for the foundation; 5.008 h from one professional voice actor under a redistribution addendum. Her recordings are published too.
CER 0.0528 → 0.0298
Single seed vs best-of-8 on a 120-prompt Turkish suite (Whisper-large-v3). WavLM speaker similarity 0.9331 and 0.9445.
What to trust
Similarity of 0.93–0.94 does not certify identity: 0/12 same-person judgments, traced to a +4.0 dB excess at 4.7–6.8 kHz. One listener, and not re-run on the released model.
00A usable model, a documented pipeline, and one central negative result
We release Antalia 1, a Turkish text-to-speech model of about 300M parameters, together with the speaker-agnostic base it was derived from (Antalia 1 Foundation), the training and inference code, the voice corpus and an evaluation suite. The model is a character-conditioned rectified-flow acoustic model over 100-band log-mel spectrograms at 24 kHz, vocoded by the frozen public BigVGAN v2. Every training sample came either from a public corpus with a compatible license (Common Voice, FLEURS) or from one professional Turkish voice actor recorded under an explicit redistribution agreement.
On a 120-prompt Turkish suite the model reaches a Whisper-large-v3 character error rate (CER) of 0.0528 with a single seed and 0.0298 with best-of-8 seed selection, at a WavLM speaker similarity of 0.93–0.94 to the target voice. The central negative result: in a controlled comparison against real recordings, a native listener who knows the voice judged synthetic and real speech to be the same person in 0 of 12 anchored pairs, while automated similarity sat at 0.91–0.94 throughout. We traced the mismatch to a +4.0 dB excess in the 4.7–6.8 kHz band of the synthetic voice.
We document the full six-stage training lineage, the inference stack the numbers depend on, the experiments that failed, and the limits of what is released. Development has been discontinued; this is the release report, not a roadmap. Weights are published under Antalia OpenRAIL-M and code under Apache-2.0.
01Motivation and constraints
Turkish is a large language with comparatively few open, high-quality neural TTS voices. This project set out to build one flagship Turkish voice for a conversational product, under two constraints that shaped every later decision: the voice had to belong to a single consenting speaker whose recordings could be redistributed as open weights, and no training audio could be acquired by scraping. Within those constraints we trained a flow-matching acoustic model from scratch on public Turkish corpora, specialized it to the consented speaker, and built the inference and evaluation tooling around it.
The product the voice was built for was cancelled, and development stopped before the planned follow-up retune. Rather than let the artifacts disappear, we are releasing them as they are, with this report as their documentation. It is written for two audiences: people who want to run or fine-tune the model, and people who want to know what a small team learned about identity, evaluation and rights-clean data while building it.
Contributions
- Antalia 1 (304,552,293 parameters) and the speaker-agnostic Antalia 1 Foundation (299,623,013), as
safetensorswith a self-describingconfig.json(§6). - An independent CrossFlow-style rectified-flow implementation with a total-duration head instead of an aligner and zero-initialized conditioning paths (§2).
- A rights-first data pipeline, and a negative result on public-domain Turkish “found audio” (§3).
- The full six-stage training lineage (§4), the inference stack the numbers depend on (§6), and automatic and human evaluation including what was tried and abandoned (§5).
On the name: “Antalia” is an unregistered project name. An unrelated Italian business operates as “ANTALIA AI”; there is no connection.
02Architecture
Antalia 1 is an independent implementation of a CrossFlow-style architecture: a character-conditioned rectified-flow model[1,2] that predicts velocity fields over normalized log-mel frames, with a Transformer decoder[3] that cross-attends to a text encoder. The design is in the family popularized by F5-TTS[4], but the implementation does not use or depend on F5-TTS or FreyaTTS weights, code, audio or data.
2.1Acoustic representation
Audio is represented as 100-band log-mel spectrograms at 24 kHz with FFT size 1024, hop 256 and window 1024 (93.75 frames/s), fmin 0 and fmax 12 kHz. Each band is normalized by its training-set mean and standard deviation and clipped to ±5.0. Per-band normalization was introduced after two earlier foundation runs diverged (§5.7); the normalized run is the one that survived.
2.2Text front end and encoder
Input is graphemes, not phonemes. A deterministic Turkish normalizer expands numbers, ordinals, dates, times, currency, percentages and abbreviations into words and applies Turkish-aware lowercasing. For example, “Sn. Yılmaz’ın 3. randevusu 07.08.2026’da saat 09:07’de” (“Mr/Ms Yılmaz’s 3rd appointment on 07.08.2026 at 09:07”) becomes “sayın yılmaz’ın üçüncü randevusu yedi ağustos iki bin yirmi altı’da saat dokuz sıfır yedi’de”, and initialisms such as TCMB are spelled out letter by letter. The encoder is a character embedding plus sinusoidal positions followed by four ConvNeXt-style blocks[5] with depthwise convolutions of kernel size 7, at dimension 768.
2.3Duration
There is no aligner and no per-token duration predictor. A single scalar head on the pooled text encoding predicts the log of the total number of mel frames, trained with an MSE loss at weight 0.1 relative to the flow loss. At inference the predicted total sets the length of the noise sequence to be denoised. This is the simplest possible duration model, and its failure on long inputs is the reason for the chunking in §5.4 and §6.
2.4Acoustic decoder and objective
The decoder is a stack of 16 Transformer blocks at dimension 768 with 12 attention heads. Each block applies self-attention over mel frames, cross-attention over text tokens, and a SwiGLU feed-forward network[6] with inner dimension 3072. Following DiT[7], each block is modulated by the timestep through an adaLN-style 9-way projection (shift, scale and gate for each of the three sub-layers). The modulation projection and the output projection to mel space are zero-initialized, so each block starts as an identity residual.
Training uses the rectified-flow objective: with x1 the clean normalized mel, x0 ~ N(0, I) and t ~ U(0, 1), the model sees xt = (1−t)x0 + t x1 and regresses the velocity x1 − x0 with a frame-masked MSE.
2.5Conditioning and guidance
The foundation is text-only. The fine-tuning stages add two conditions to the timestep context through zero-initialized projections, so the foundation’s behaviour is preserved exactly at initialization: a speaker embedding table of dimension 256 covering roughly 737 Common Voice speaker identities plus the released voice, with id 0 reserved for “unconditioned”; and a 6-dimensional prosody vector (log seconds per character, log energy mean and standard deviation, log F0 mean and standard deviation, voiced ratio), supplied at inference from named presets derived from the voice actor’s recordings. Classifier-free guidance[8] is applied independently on text (scale 4.0 in the release recipe) and on speaker (scale 1.0), which is why the guidance fine-tune trains with null-text and unconditioned-speaker rows.
2.6Speaker-style adapter
The final training stage adds a zero-initialized bottleneck adapter to every decoder block: layer norm, a down-projection to dimension 128, a learned style vector added in the bottleneck, SiLU, and an up-projection whose weights and bias start at zero. Its output is added residually after the feed-forward sub-layer and can be scaled or switched off at runtime. There are 64 adapter tensors totalling 3,160,832 parameters; they were the only trainable parameters in the final stage, and their EMA weights are what ship in Antalia 1.
2.7Sampling and vocoder
Sampling uses an Euler solver with 32 steps and sway sampling[4] with coefficient −0.8, which concentrates steps at low t. The mel output is inverted with BigVGAN v2 (24 kHz, 100-band, 256×)[9], used frozen and not redistributed: the loader pulls nvidia/bigvgan_v2_24khz_100band_256x (MIT) at a pinned source commit with a one-line huggingface_hub compatibility patch. On real-mel reconstruction the vocoder is transparent to within ±0.4 dB per band, which mattered when attributing the timbre error in §5.6.
03Rights-clean by construction
All training audio comes from three sources: Mozilla Common Voice 26.0 Turkish[10], FLEURS Turkish[11], and studio recordings of one professional Turkish voice actor made for this project. No audio was scraped from the web, and a pilot of public-domain sources (§3.4) concluded that none was usable.
3.1Public corpora and filtering
From the Common Voice 26.0 Turkish validated split, 120,407 clips were decoded and content-hashed, and 112,909 entered ASR verification, where each clip was transcribed with Whisper-large-v3[12] forced to Turkish and compared with its prompt. Accepted clips have a median CER of 0 against their prompts, with p90 0.111 and p95 0.231. From FLEURS Turkish, 3,607 clips passed validation.
| Gate | Clips rejected |
|---|---|
| Insufficient active audio | 7,098 |
| Transcript mismatch (ASR vs prompt) | 1,449 |
| Too short | 356 |
| Level too low | 351 |
| Low SNR | 5 |
| Clipping | 4 |
The foundation training manifest contains 59,593 Common Voice clips and 1,876 FLEURS clips, 61,469 clips and 67.55 h in total, a subset of the accepted pool. The Common Voice speaker-ID vocabulary used in later stages contains roughly 737 speakers. Per-band mel normalization statistics were measured on 256 training records (89,966 frames) and ship inside the release config.json.
3.2Consented voice recordings
The released voice belongs to one professional Turkish voice actor, credited anonymously at her request. She recorded from machine-generated, PII-free scripts in a fixed studio setup (same microphone, room and mouth distance across sessions; 48 kHz/24-bit masters) and signed a redistribution addendum that explicitly covers open-weight release of a model trained on her recordings. The addendum also permits public redistribution of the recordings themselves, not only of the weights, so the 5.008 h training portion is published as antalia-voice-corpus under CC-BY-4.0; the parent-disjoint test split is withheld. She consented to redistribution of these weights and her recordings, not to derivative datasets of her voice presented as recordings of a real person.
Two recording campaigns contribute. The first scripted campaign yielded 621 script-aligned segments (2.965 h) across six script categories and was the only voice data through training stages 3–5. A second, targeted campaign (in-context dialogue turns, graded expressive intensity, long-form monologues with natural pausing, and telephone-style readbacks of numbers and codes) was designed after the human evaluation in §5.5 and partially recorded before development stopped. The corrected first-campaign recordings plus the completed part of the second total 1,073 segments (5.008 h), which trained the final adapter stage.
Every recorded take passed through: (i) dual-ASR consensus using Whisper-large-v3 and a wav2vec 2.0 XLSR-53 Turkish CTC model[13]; (ii) CTC forced alignment to the script for segmentation; (iii) a spoken-PII scan using Turkish named-entity recognition from Stanza[14]; (iv) a speaker-consistency gate on WavLM speaker-verification embeddings[15] to catch mislabelled or off-mic takes; and (v) acoustic gates on SNR, clipping and level.
3.3Evaluation contamination
All evaluation prompts were deduplicated against every training manifest. One collision was found and excluded from the evaluation suite.
3.4Found-audio pilot (negative result)
Before committing to a second recording campaign, we piloted the two public-domain source families that would have been rights-compatible for Turkish single-speaker audio. LibriVox Türkçe: the LibriVox API’s language filter silently returns the general catalogue, and an authoritative query against archive.org (collection:librivoxaudio AND language:(Turkish)) returned 0 items. VOA Türkçe: the discoverable audio RSS inventory was one zone of 10 episodes totalling 1.63 h; a sample episode measured an estimated SNR of 32.6 dB, against an accepted training corpus averaging above 45 dB, and the content was multi-speaker field reporting. Verdict: no-go. The consented recording campaign was the only viable data path.
04A six-stage lineage on one GPU
Antalia 1 is the end of a six-stage lineage (Table 2). All stages ran on a single A100-80GB. The foundation used AdamW[16] with weight decay 0.01, gradient clipping at 1.0 and an EMA of the weights with decay 0.9999; both released checkpoints are EMA weights.
| # | Stage | Updates | LR | Data | Trainable / notes |
|---|---|---|---|---|---|
| 1 | Foundation v3, normalized | 100,000 | 1e-4 | 61,469 clips / 67.55 h (CV + FLEURS) | Full model from clean init. Released as Antalia 1 Foundation. |
| 2 | Speaker-conditioned continuation | 3,000 | — | Common Voice speaker ids | New speaker embeddings and projections only |
| 3 | Voice specialization | 100 | — | 621 voice segments / 2.965 h | Appends one speaker embedding for the voice |
| 4 | CFG fine-tune | 8,000 | 2e-5 | 41,277 CV + 621 voice (46.96 h) | 15% null-text, 10% unconditioned-speaker rows; text encoder and duration head frozen |
| 5 | Consistency fine-tune (“v5”) | 6,000 | 2e-5 | 47,487 records / 73.6 h: voice ×10 (6,210 rows) + 41,277 CV replay | Text/speaker dropout 0.1. The checkpoint evaluated by the human listener (§5.5) |
| 6 | Timbre adapter (released) | 1,400 | 1e-4 | 1,073 voice segments / 5.008 h | Adapter only (3,160,832 params); preservation weight 0.5; best of 1,600 max updates |
Stage 1 trained from a clean initialization with 2,000 warmup steps and cosine decay to 1e-5, on batches of 6,000 mel frames per GPU (at most 32 samples of at most 24 s each), seed 20260805. Two earlier foundation attempts diverged (§5.7); v3 added per-band mel normalization and is the surviving base. Stages 2–5 added the speaker table, appended a row for the released voice, calibrated classifier-free guidance with null-text and unconditioned-speaker rows, and finally ran a low-learning-rate, replay-heavy consistency fine-tune with the voice upweighted ten times. That checkpoint (“v5”, update 6,000) was the engineering champion, was deployed to staging, and is the system the listener evaluated.
Stage 6 came after the human evaluation localized the identity gap to timbre. A residual adapter was trained on the corrected and expanded 5.008 h corpus with all other weights frozen. A preservation term (the masked MSE between the adapter model’s velocity and the same model’s velocity with the adapter scaled to zero, weight 0.5) kept the adapter from drifting away from the foundation’s pronunciation. Update 1,400 was best and is released as Antalia 1.
Infrastructure. The model trained in bf16 with activation checkpointing at roughly 45–50 GB peak memory, so one 80 GB A100 sufficed and multi-GPU training never became a dependency. A duration-bucketed sampler kept step times stable and avoided out-of-memory failures. Every fine-tune carried a validation-degradation guard that aborts the run and leaves the parent checkpoint untouched when validation loss degrades for consecutive evaluations. Serving and further fine-tuning started from EMA weights, and every synthesis and quality report records the SHA-256 of the checkpoint, the vocoder revision and the flag set, so each audio artifact is traceable to exact weights.
05Automatic metrics, one listener, and what did not work
The numbers below are those of a system, not a bare checkpoint: clause chunking, a rate floor and optional best-of-8 selection are part of the release recipe and are described in §6.
5.1Suite and scoring
turkish-v2 contains 120 prompts in 10 categories of 12: acknowledgement, emotional style, voice-agent turns, questions and confirmations, long form, general, names and places, numeric, foreign terms and abbreviations, and adversarial normalization. Metrics are Whisper-large-v3 CER and WER against the normalized prompt text, and WavLM x-vector cosine similarity to the voice actor’s real recordings. A separate pronunciation suite (turkish-pronunciation-v1) is released but was not used for the headline numbers.
Scoring normalization mattered more than any model change in one category. Whisper writes spoken numbers as digits (“üç bin yedi yüz” becomes 3700) while the reference text had words. Before the evaluator spelled out digits, decimals and thousands groups the way Turkish speaks them (in the evaluator only; training text untouched), the numeric category read 41.5% CER; afterwards, about 2.7% CER and 7.4% WER on the same audio. A planned “numbers fine-tune” was cancelled. All numbers here use the normalized scorer.
5.2Automatic results
turkish-v2 (120 prompts)| 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 |
| Abandoned: infill / reference conditioning u4000 | 0.6977 | 0.9517 | 0.9826 | 0.9524 | 0.9271 |
| Abandoned: context-full v1 @6000 (16 steps) | 0.0761 | — | 0.1773 | 0.9393 | 0.8918 |
The single-seed adapter model has a CER of 0.0528 against 0.0840 for the v5 champion, and best-of-8 selection brings it to 0.0298 (WER 0.0934). Automated similarity moves little across the fine-tuned systems (0.9315–0.9445 mean, 0.8913–0.9170 p10); as §5.5 shows, it should not be read as evidence of identity. The best-of-8 output has a mean timbre penalty of 1.997 (v5 best-of-8: 2.182), still outside the 0.47–0.98 range of real recordings, and a mean envelope penalty of 1.358. Estimated SNR of the synthesized audio is about 50 dB. The model card adds one later measurement on this checkpoint: recipe v2 against v1 over 40 prompts × 8 seeds reduced between-seed timbre drift from 2.088 to 1.520 (real-voice reference 1.414) and single-seed CER from 0.0717 to 0.0615.
5.3Per-prompt spread
Seed selection matters most on the hardest categories. Across seeds, per-prompt CER spreads from 0.0 to 0.17, which is why single-seed numbers should be treated as a distribution, not a point. Some prompts recover under selection; some do not recover on any of the eight seeds.
normalization-005 · “Prof. Dr. Öz’s e-prescription dated 21.09.2026 is number 004781.”
foreign-006 · “I connected the Bluetooth headphones to the iPhone and listened to the podcast recording offline.”
normalization-012 · “The file is 18 MB, transfer speed 2.4 MB/s, and time remaining 00:01:36.”
normalization-012 stays at 0.23 and numeric-002 at 0.13 after selection; the model card notes that numeric-002 is scored against the unnormalized prompt, so a correctly spoken amount still counts as errors there.5.4Long form
Long inputs are the clearest case of the system mattering more than the checkpoint. The scalar duration head was trained on short Common Voice clips and fails out of distribution quietly: on long text it budgets 0.0635 s per character against 0.083 s in the speaker’s natural speech, about 35% too fast, so the flow crams syllables and smears them. On a 370-character input, unchunked synthesis predicts 9.1 s of rushed, mumbled speech; the same text chunked at clause boundaries takes 34.8 s. Two long-form measurements exist, on different metrics and recipe snapshots, and we report both: chunking alone took long-form CER from 23.1% to 4.1%, and chunking plus the rate floor took CER from 23.9% to 4.1% and WER from 42.9% to about 11%; the recipe-v4 measurement recorded WER falling from 36.6% to 10.7%. All were single-seed, measured before the timbre term and the adapter existed, and not re-measured for the final recipe.
5.5Human evaluation
Protocol. A comparison mean opinion score (CMOS) session was run on 2026-08-09 on the v5 consistency champion with the gated best-of-8 serving recipe. The listener was a single native Turkish speaker: the project owner, who knows the voice actor’s voice and the study design. The session had 27 non-catch trials in two pools: an A/B pool comparing the gated recipe against plain single-seed synthesis (n = 15), and an anchored pool comparing synthesis against real recordings of the voice actor (n = 12), each with a same-person judgment. Anchored pairs used different content on the two sides, the harder, product-realistic identity test. Ratings used a 7-point scale from −3 to +3, with clip order randomized. Three catch trials (the same clip twice) were all clean, so the ratings are treated as attentive.
| Pool | n | CMOS | Same person |
|---|---|---|---|
| Pooled, all non-catch trials | 27 | −0.667 ± 0.653 | — |
| A/B: gated vs plain synthesis | 15 | +0.267 ± 0.728 | — |
| Anchored: synthetic vs real recording | 12 | −1.833 ± 0.757 | 0 / 12 |
What the result means. Throughout the session the automated verifier reported similarity of 0.91–0.94 for the same audio. A listener who knows the voice said “not the same person” on every one of twelve pairs. We therefore treat WavLM x-vector similarity in this regime as saturated and uninformative for the claim “this is her voice”. It still separates the foundation (0.8162) from the fine-tuned models and remains useful as a selection signal, but it cannot certify identity. The gated recipe was directionally better than plain synthesis (+0.27, CI overlapping zero), so the inference stack was not the problem; the model’s identity and pronunciation ceiling was.
Caveats, stated plainly. This is one informed listener, not a panel. The listener knew the study design and the voice, and real clips carry a room and microphone signature an informed ear can use. We do not believe any of these plausibly turns 0/12 into a pass, but the CMOS values should not be quoted as population estimates. A protocol for three or more listeners with fresh trials was designed and never run. No multi-listener MOS or CMOS exists for any version of this model.
5.6Timbre analysis and response
The listener localized the anchored failure to voice tone alone (“everything else sounds like the same person”). A band-spectrum comparison of the evaluation pack against real recordings confirmed it: the synthetic voice carries a +4.0 dB excess in the 4.7–6.8 kHz band (z = +3.5 relative to the real voice’s own variability) plus a tilt in the formant region. Because the vocoder reconstructs real mels to within ±0.4 dB, the acoustic model owns the error.
Two changes followed. First, a timbre penalty for selection: an 11-band, level-normalized spectral-shape distance z-scored against 13 real clips, which separated real clips (0.47–0.98) from synthetic ones (1.42–3.26) with no overlap on that pack. A weight sweep on a frozen 8-seed set chose w = 0.05, moving the mean penalty from 2.585 to 2.182 and changing 44 of 120 picks at a cost of +0.1 percentage points CER; the owner A/B-listened to the five largest switches and judged the new picks closer to the real voice. Second, the adapter stage of §4, which brought the best-of-8 mean penalty to 1.997.
5.7What was tried and abandoned
FastPitch baseline. The first system (2026-08-01) was a FastPitch[17] model adapted to 3.48 h of the voice actor’s data and evaluated on a 39-prompt predecessor suite (Table 5). Conversational categories reached CER 0.27–0.32 with identity holding (mean similarity 0.809), but names, numbers, foreign terms and adversarial normalization were broken. The normalizer expanded every adversarial prompt correctly; the acoustic model produced fluent word salad on spelled initialisms, long digit sequences and foreign names it had never seen. The diagnosis, acoustic vocabulary coverage rather than text normalization, motivated the move to a flow-matching model on a much larger Common Voice foundation, whose scripted sentences contain numbers, names and rare vocabulary.
turkish-v1 suite| Category | CER | WER | Sim |
|---|---|---|---|
| Acknowledgement | 0.272 | 0.583 | 0.414 |
| Emotional style | 0.302 | 0.653 | 0.866 |
| Voice agent | 0.316 | 0.628 | 0.840 |
| Questions and confirmations | 0.316 | 0.719 | 0.717 |
| Long form | 0.389 | 0.755 | 0.937 |
| General | 0.393 | 0.682 | 0.776 |
| Names and places | 0.578 | 1.424 | 0.846 |
| Numeric | 0.607 | 1.032 | 0.897 |
| Foreign terms and abbreviations | 0.714 | 1.236 | 0.929 |
| Adversarial normalization | 1.066 | 1.211 | 0.898 |
Foundation v1 and v2. The first two CrossFlow foundation runs diverged, with the failure attributed to aligner and duration behaviour. Foundation v3 added per-band mel normalization and trained to completion.
Aggressive direct adaptation. Before the stage-5 recipe, a direct adaptation of the foundation to the voice regressed intelligibility by update 300–400. One adaptation run tripped the validation-degradation guard at update 450, and later evaluation confirmed the abort was right. Only the low-learning-rate, replay-heavy consistency recipe improved identity without moving CER; it raised pre-selection p10 similarity from 0.860 to 0.891 with CER unchanged.
Reference-audio infilling and context conditioning. To bind identity structurally rather than through a 256-d additive bias, we trained variants conditioned on a paired reference of the voice: in-context infilling with a masked reference segment, and a “context-full” variant with global reference conditioning. Identity rose (similarity 0.9524 and 0.9393 in Table 3) but intelligibility collapsed: the infill model at update 4,000 had CER 0.6977, and the context-full model at 6,000 updates had CER 0.0761, recorded at the time as 3.2× the adapter’s CER in the same comparison. A prefix-reference variant was judged intelligibility-fatal. The conclusion at the time was that reference-audio infilling would have to be trained from the first step rather than retrofitted onto a trained single-speaker checkpoint.
Differentiable speaker-consistency loss. The context-full run also added a differentiable WavLM speaker-consistency term. At this data volume it did not improve identity beyond what the adapter achieved.
Unfinished. Recording campaign 2 (a targeted +4–6 h) was only partly recorded. Scripts for a campaign 3 were generated, but nothing was recorded or trained. The planned “Antalia 1.1” consistency retune and the multi-listener CMOS that would have judged it were never run.
06The inference stack is part of the model
The release recipe (inference-recipe.json) fixes the components below. Each hides a modelling weakness, and each is required to reproduce the numbers in §5.
| Component | What it does | Measured effect |
|---|---|---|
| Clause chunking | Split at sentence and comma boundaries into chunks of ≤120 characters; synthesize each; join with a fixed 160 ms pause | Long-form CER 23.1% → 4.1% (chunking alone, single seed) |
| Rate floor | A chunk’s frame budget may not imply speech faster than 0.085 s per non-space character | With chunking: CER 23.9% → 4.1%, WER 42.9% → ~11% |
| Mel clamp ±5.0 | Clamp the normalized mel before vocoding (text guidance 4.0 pushes peaks off-manifold) | Clipping ratio reduced about 3× |
| Guidance rescale 0.5 | Match the guided output’s standard deviation back to the conditioned branch | With clamp: sweep CER 0.0934 → 0.0867, SNR about +4 dB; slightly softer output |
| Prosody presets | Per-category 6-d centroids from the actor’s real segments; optional keyword router per chunk | CER 4.88% with presets vs 4.89% without; full-strength presets cost ≤1 pp CER except one, capped at 0.7 |
| Best-of-N selection | Render N seeds in one batched pass; keep the best by Eq. 1 | Best-of-4 on v5 (pre-timbre gate): CER 8.18% → 5.42%, WER 17.0% → 12.7%, p10 sim 0.8603 → 0.909 |
6.1Best-of-8 selection
The recipe optionally synthesizes 8 seeds per chunk and keeps the candidate maximizing
where sim is the cosine similarity between WavLM-base-plus-sv x-vectors of the candidate and the actor’s reference recordings, CER is the Whisper-large-v3 error against the normalized input, Penv is an F0-envelope penalty (z-score of log-F0 mean, spread and voiced ratio against the real recordings; envelope-stats.json), and Ptimbre is the 11-band spectral-shape distance of §5.6 (timbre-profile.json). The envelope term exists because the verifier is blind to “right speaker, wrong persona” takes; on the consistency champion it raised pre-selection p10 similarity from 0.891 to 0.912 after gating. Seeds are deterministic, so selected metrics are reproducible.
The N seeds render in one batched flow pass (padded mixed lengths, per-row noise, shared conditioning). Across the 120-prompt suite, 8 candidates took 145 s against 95 s for one, about 1.5× wall-clock, before the Whisper and WavLM scoring passes. The flow-model work itself is still eight times a single generation.
6.2Latency and the cancelled deployment
On an A100 with a resident model, a 5 s utterance at 32 steps takes about 2.1–2.3 s after warm-up; the first request takes about 6 s. Halving the Euler steps to 16 reduced generation time by 45.1% and kept mean similarity within 0.0006 of the 32-step result, but lowered p10 similarity, so the recipe keeps 32. The v5 champion was deployed to staging; that staging deployment, on Cloud Run L4, measured time-to-first-audio p50 5.0 s and p95 9.2 s at low load before it was cancelled. No latency optimization beyond the 16-step experiment was done. Antalia 1 is not served anywhere. Its successor, Alania 1, is served through the API at speech.patientdesk.ai.
general-001 · “The morning sun was slowly striking the stones of the quiet street.”
6.3Release artifacts
| Artifact | Contents | License |
|---|---|---|
| cloud0day3/antalia-1 | Stage-6 adapter run, update 1,400, EMA; 304,552,293 params; fp32 model.safetensors, 1.22 GB. Plus config.json, inference-recipe.json, prosody-presets.json, envelope-stats.json, timbre-profile.json. SHA-256 853a117ef95fa44efff785a6b674f380878da57879cb879d6d099d1e1444266e | Antalia OpenRAIL-M |
| cloud0day3/antalia-1-foundation | Foundation v3, update 100,000, EMA; 299,623,013 params; 1.20 GB. SHA-256 89ecf310a14333c6bd5a754360cee2207027dd23b2a0171984a32c423afcfcd1 | Antalia OpenRAIL-M |
| antalia-voice-corpus | 1,073 segments, 5.008 h, 24 kHz mono WAV with verbatim, normalized and independent-ASR transcripts, per-clip signal metrics and gate outcomes; 11 content categories across six recording batches; median SNR 34.9 dB. Training split only. | CC-BY-4.0 |
| antalia-eval | turkish-v2 (120 prompts) and turkish-pronunciation-v1; CV and FLEURS filter manifests with QA reports; CMOS protocol and trial sheet; presets, timbre profile, envelope statistics. No audio. | — |
| 0daycloud/antalia | Model, training, synthesis, chunking, best-of-N, release format, Turkish normalizer, scorers and gates, evaluation harness, configs, tests, and the reports cited here. Excludes the serving worker, web product, deployment scripts, recording-export code and secrets. | Apache-2.0 |
| Sample site | Raw single-seed vs best-of-8 per category, failure cases, the long-form pair, foundation samples and the 16-step sample | — |
antalia-crossflow-release-v1 format: config.json carries the model configuration, mel front end and per-band statistics, normalization mode, character and speaker vocabularies, the vocoder pointer (pinned commit 7d2b454564a6c7d014227f635b7423881f14bdac plus the compatibility patch) and a provenance statement. Only the corpus training split is published, so the similarity figures in §5 are not independently reproducible from it.To run the released recipe (after the three BigVGAN setup lines in the repository README):
# single seed; add --seed-candidates 8 and scripts/select-best-of-n.py for best-of-8
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, ben Antalia." --output out.wav
07Limitations and intended use
7.1Voice identity
Automated speaker similarity is about 0.93–0.94, but a native listener who knows the voice rated 0/12 anchored pairs as the same person, and the synthetic voice has a measured timbre bias in the presence band. This is the largest known gap, and no CMOS session was run after the adapter stage.
7.2Long inputs
The total-duration head under-budgets long text. Clause chunking (≤120 characters) and the per-character rate floor are required; unchunked long sentences rush and mumble.
7.3Numbers, normalization-heavy text, foreign names and abbreviations
These have the highest CER and the worst listener scores (−2.0 numeric, −2.5 normalization, −1.14 foreign terms). Best-of-8 selection partially recovers them; some prompts fail on all eight seeds.
7.4Seed variance and cost
Per-prompt CER spreads up to 0.0–0.17 across seeds. The headline numbers depend on best-of-8 selection with Whisper-large-v3 and WavLM as scorers: eight times the flow-model work (about 1.5× wall-clock in the batched implementation) plus the scorer passes. Best-of-8 also multiplies the 2.1–2.3 s warm-A100 latency of a 5 s utterance.
7.5Scope
One fixed voice; no zero-shot cloning; Turkish only; 24 kHz; grapheme input with the shipped normalizer.
7.6Not done
No multi-listener MOS or CMOS. No training-data memorization audit. Outputs carry no watermark. The human evaluation was one informed listener on the v5 checkpoint, not the released model.
Intended use: research on Turkish TTS, flow-matching acoustic models and evaluation; fine-tuning from Antalia 1 Foundation with appropriately licensed data; disclosed synthetic speech where the limitations above are acceptable. Not intended for identity-sensitive applications, safety-critical announcements, or any setting where a listener could reasonably believe a real person is speaking.
08Lessons for the next attempt
Antalia 1 is a usable open Turkish voice with a documented, rights-clean pipeline, and it did not achieve the identity it was built for. We think the second fact is as useful to publish as the first.
Sign redistribution consent before recording. The consented speaker was the only data path that survived (§3.4), and open release was possible only because the addendum was signed. Put that clause in the first contract.
Automated verifiers saturate. Speaker-verification similarity was an excellent selection signal and a useless certificate. At 0.91–0.94 it no longer distinguished “her” from “someone who sounds a lot like her”; one informed listener did, twelve times out of twelve. Identity claims need human listeners who know the voice.
Identity needs structural binding. A 256-d additive speaker bias plus a 3.2M-parameter adapter plus best-of-8 selection took the timbre penalty from 2.585 to 1.997, still outside the real range. Structural binding through reference audio raised identity and destroyed intelligibility at this data volume. We did not find the middle.
The inference stack is part of the model. Chunking, the rate floor and seed selection each hid a modelling weakness and each is required to reproduce the numbers. Never judge identity from one seed per prompt; evaluate with the stack that will be served.
Fix the ruler before the model. The numeric category read 41.5% CER until the evaluator normalized digits, then about 2.7%; a training run had nearly been launched to fix a scorer bug. Conversely, when the listener named timbre as the failure, an 11-band spectral metric built the same day reproduced the verdict with no overlap. Build the measurement for the named failure before training against it.
Zero-initialized, gated conditioning made branching cheap. Bit-exactness with the parent was verified (torch.allclose at 1e-5 on matched sampling) before each branch, so a regression could always be attributed to training rather than plumbing.
Outlook, not a roadmap. At the time development stopped, the plan was to complete campaign 2, run an Antalia 1.1 consistency retune on it, require held-out timbre penalty inside the real range [0.47, 0.98] before a CMOS with three or more listeners, and escalate to a reference-audio infilling rebuild if the anchored same-person rate stayed far below 95%. None of this was carried out.
Cite this report
@misc{antalia1_2026,
title = {Antalia 1: An Open Turkish Text-to-Speech Model from a Rights-Clean Pipeline},
author = {Saygili, Sezgin and Kaplaner, Emre and Ozgul, Oncel and Koktas, Fikri San},
year = {2026},
note = {Technical report},
url = {https://github.com/0daycloud/antalia}
}
Acknowledgements
We thank the voice actor, credited anonymously by her choice, for her recordings and for agreeing to their use in an openly released model; the contributors to Mozilla Common Voice, whose recordings make up most of the foundation data; and NVIDIA for releasing BigVGAN v2 under a permissive license.
References
- Y. Lipman, R. T. Q. Chen, H. Ben-Hamu, M. Nickel, M. Le. Flow Matching for Generative Modeling. ICLR 2023. arXiv:2210.02747.
- X. Liu, C. Gong, Q. Liu. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. arXiv:2209.03003.
- A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, Ł. Kaiser, I. Polosukhin. Attention Is All You Need. NeurIPS 2017.
- Y. Chen, Z. Niu, Z. Ma, K. Deng, C. Wang, J. Zhao, K. Yu, X. Chen. F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching. arXiv:2410.06885, 2024.
- Z. Liu, H. Mao, C.-Y. Wu, C. Feichtenhofer, T. Darrell, S. Xie. A ConvNet for the 2020s. CVPR 2022. arXiv:2201.03545.
- N. Shazeer. GLU Variants Improve Transformer. arXiv:2002.05202, 2020.
- W. Peebles, S. Xie. Scalable Diffusion Models with Transformers. ICCV 2023. arXiv:2212.09748.
- J. Ho, T. Salimans. Classifier-Free Diffusion Guidance. arXiv:2207.12598, 2022.
- S. Lee, W. Ping, B. Ginsburg, B. Catanzaro, S. Yoon. BigVGAN: A Universal Neural Vocoder with Large-Scale Training. ICLR 2023. arXiv:2206.04658.
- R. Ardila, M. Branson, K. Davis, M. Kohler, J. Meyer, M. Henretty, R. Morais, L. Saunders, F. M. Tyers, G. Weber. Common Voice: A Massively-Multilingual Speech Corpus. LREC 2020. arXiv:1912.06670.
- A. Conneau, M. Ma, S. Khanuja, Y. Zhang, V. Axelrod, S. Dalmia, J. Riesa, C. Rivera, A. Bapna. FLEURS: Few-shot Learning Evaluation of Universal Representations of Speech. IEEE SLT 2023. arXiv:2205.12446.
- A. Radford, J. W. Kim, T. Xu, G. Brockman, C. McLeavey, I. Sutskever. Robust Speech Recognition via Large-Scale Weak Supervision. ICML 2023. arXiv:2212.04356.
- A. Baevski, H. Zhou, A. Mohamed, M. Auli. wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations. NeurIPS 2020. arXiv:2006.11477.
- P. Qi, Y. Zhang, Y. Zhang, J. Bolton, C. D. Manning. Stanza: A Python Natural Language Processing Toolkit for Many Human Languages. ACL 2020 System Demonstrations. arXiv:2003.07082.
- S. Chen, C. Wang, Z. Chen, Y. Wu, S. Liu, Z. Chen, J. Li, N. Kanda, T. Yoshioka, X. Xiao, J. Wu, L. Zhou, S. Ren, Y. Qian, Y. Qian, J. Wu, M. Zeng, X. Yu, F. Wei. WavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processing. IEEE Journal of Selected Topics in Signal Processing 16:1505–1518, 2022. arXiv:2110.13900.
- I. Loshchilov, F. Hutter. Decoupled Weight Decay Regularization. ICLR 2019. arXiv:1711.05101.
- A. Łańcucki. FastPitch: Parallel Text-to-Speech with Pitch Prediction. ICASSP 2021. arXiv:2006.06873.