Research Technical report · Open weights · Discontinued

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.

~300MParameters, rectified flow
0.0528CER, single seed
0.0298CER, best-of-8
0.93–0.94WavLM speaker similarity
0 / 12Same-person judgments by a native listener
00 Abstract

~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.

Status. Nothing described here runs as an API. Antalia 1 has been succeeded by Alania 1, which is served through the API at speech.patientdesk.ai. A plain-language account of this work is in the story post.
01 Introduction

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 safetensors with a self-describing config.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.

02 Model

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.

Figure 1From Turkish text to 24 kHz audio
1NormalizerDeterministic Turkish rules: numbers, dates, currency, abbreviations to words; dotted/dotless i lowercasing
2Character encoderEmbedding + sinusoidal positions, 4 ConvNeXt-style blocks, dim 768; scalar head predicts log total frames
3Flow decoder16 Transformer blocks, dim 768, 12 heads; self-attn over frames, cross-attn over text, SwiGLU; adaLN from timestep
4Euler sampling32 steps, sway −0.8, CFG on text (4.0) and speaker (1.0); mel clamped to ±5
5BigVGAN v2Frozen, not redistributed; 100-band, 256× upsampling, 24 kHz mono
Speaker embedding (256-d), prosody vector (6-d) and the style adapter enter through zero-initialized paths, so each addition starts as an exact copy of its parent model.

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.

03 Data

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.

Table 1Common Voice rejections by gate
GateClips rejected
Insufficient active audio7,098
Transcript mismatch (ASR vs prompt)1,449
Too short356
Level too low351
Low SNR5
Clipping4
The same acoustic gates (SNR, clipping, level) are applied to the voice recordings. The filter manifests and QA reports that record the exact selection are in the antalia-eval dataset.

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.

04 Training

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.

Table 2Training lineage (peak LR; “—” = not recorded in the release brief)
#StageUpdatesLRDataTrainable / notes
1Foundation v3, normalized100,0001e-461,469 clips / 67.55 h (CV + FLEURS)Full model from clean init. Released as Antalia 1 Foundation.
2Speaker-conditioned continuation3,000—Common Voice speaker idsNew speaker embeddings and projections only
3Voice specialization100—621 voice segments / 2.965 hAppends one speaker embedding for the voice
4CFG fine-tune8,0002e-541,277 CV + 621 voice (46.96 h)15% null-text, 10% unconditioned-speaker rows; text encoder and duration head frozen
5Consistency fine-tune (“v5”)6,0002e-547,487 records / 73.6 h: voice ×10 (6,210 rows) + 41,277 CV replayText/speaker dropout 0.1. The checkpoint evaluated by the human listener (§5.5)
6Timbre adapter (released)1,4001e-41,073 voice segments / 5.008 hAdapter 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.

05 Evaluation

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

Table 3Automatic evaluation on turkish-v2 (120 prompts)
SystemCER meanCER p90WER meanSim meanSim p10
Foundation v3 @100k, unconditioned, single seed0.18350.40490.39520.8162*0.625*
v5 consistency @6000, single seed0.08400.23250.18700.93150.8913
v5 best-of-8 (timbre-gated, w = 0.05)0.03750.11270.10590.94230.9113
Antalia 1 (adapter v2 @1400), single seed0.05280.13480.12970.93310.9054
Antalia 1, best-of-8 (timbre-gated)0.02980.10070.09340.94450.9170
Abandoned: infill / reference conditioning u40000.69770.95170.98260.95240.9271
Abandoned: context-full v1 @6000 (16 steps)0.0761—0.17730.93930.8918
CER/WER: Whisper-large-v3 against normalized text. Sim: WavLM x-vector cosine similarity to the released voice. *The foundation never saw the released voice; its similarity is shown only as the verifier’s floor. Highlighted rows are the released model.

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.

Figure 2Default seed vs selected seed on hard prompts (audio)
Prof. Dr. Öz’ün 21.09.2026 tarihli e-reçete no.’su 004781’dir. normalization-005 · “Prof. Dr. Öz’s e-prescription dated 21.09.2026 is number 004781.”
Default seed · CER 0.32
Best of 8 · CER 0.13
Bluetooth kulaklığı iPhone’a bağlayıp podcast kaydını çevrim dışı dinledim. foreign-006 · “I connected the Bluetooth headphones to the iPhone and listened to the podcast recording offline.”
Default seed · CER 0.24
Best of 8 · CER 0.04
Dosya 18 MB, aktarım hızı 2,4 MB/sn. ve kalan süre 00:01:36. normalization-012 · “The file is 18 MB, transfer speed 2.4 MB/s, and time remaining 00:01:36.”
Default seed · CER 0.23
Best of 8 · CER 0.23
Audio streamed from the public sample site. 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.

Figure 3The same 370-character passage, unchunked and chunked (audio)
Başvurunuzu tamamladıktan sonra belgeleriniz güvenli biçimde incelenecek, eksik bir bilgi görülürse size kısa bir bildirim gönderilecek… “Once you complete your application, your documents will be reviewed securely; if any information is missing, you will be sent a short notice…”
Unchunked · 9.1 s
≤120-character chunks, 0.085 s/char floor · 34.8 s

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.

Table 4CMOS session v1 (toward the candidate; ± is the 95% CI)
PoolnCMOSSame person
Pooled, all non-catch trials27−0.667 ± 0.653—
A/B: gated vs plain synthesis15+0.267 ± 0.728—
Anchored: synthetic vs real recording12−1.833 ± 0.7570 / 12
Promotion required pooled CMOS ≥ 0, anchored same-person rate ≥ 95%, and no category at or below −1.0. All three failed, and the model was not promoted as a launch voice.
Figure 4CMOS by category, toward the candidate (scale −3 to +3)
Emotion+2.0
General+2.0
Questions+0.2
Acknowledgement0.0
Long form−0.5
Names and places−1.0
Voice agent−1.0
Foreign terms−1.14
Numeric−2.0
Normalization−2.5
Dashed line: the −1.0 promotion floor. Five categories sit at or below it. One listener; per-category values rest on very few trials and are not population estimates.

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.

Figure 5Mean timbre penalty against the real-voice range (lower is closer)
Real recordings (13 clips)Synthetic clips on the CMOS pack (1.42–3.26)
Scale 0–3.5. The released model is closer, but still outside the real range, and no CMOS session was run on it.

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.

Table 5FastPitch baseline, final step, 39-prompt turkish-v1 suite
CategoryCERWERSim
Acknowledgement0.2720.5830.414
Emotional style0.3020.6530.866
Voice agent0.3160.6280.840
Questions and confirmations0.3160.7190.717
Long form0.3890.7550.937
General0.3930.6820.776
Names and places0.5781.4240.846
Numeric0.6071.0320.897
Foreign terms and abbreviations0.7141.2360.929
Adversarial normalization1.0661.2110.898
From the 2026-08-01 failure analysis. A different, smaller suite than Table 3, so the two are not directly comparable.

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.

06 Inference, deployment and release

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.

Table 6Inference components and their measured effect
ComponentWhat it doesMeasured effect
Clause chunkingSplit at sentence and comma boundaries into chunks of ≤120 characters; synthesize each; join with a fixed 160 ms pauseLong-form CER 23.1% → 4.1% (chunking alone, single seed)
Rate floorA chunk’s frame budget may not imply speech faster than 0.085 s per non-space characterWith chunking: CER 23.9% → 4.1%, WER 42.9% → ~11%
Mel clamp ±5.0Clamp the normalized mel before vocoding (text guidance 4.0 pushes peaks off-manifold)Clipping ratio reduced about 3×
Guidance rescale 0.5Match the guided output’s standard deviation back to the conditioned branchWith clamp: sweep CER 0.0934 → 0.0867, SNR about +4 dB; slightly softer output
Prosody presetsPer-category 6-d centroids from the actor’s real segments; optional keyword router per chunkCER 4.88% with presets vs 4.89% without; full-strength presets cost ≤1 pp CER except one, capped at 0.7
Best-of-N selectionRender N seeds in one batched pass; keep the best by Eq. 1Best-of-4 on v5 (pre-timbre gate): CER 8.18% → 5.42%, WER 17.0% → 12.7%, p10 sim 0.8603 → 0.909
Measurements were taken on different recipe snapshots and checkpoints, as noted; none of the chunking figures were re-measured for the final recipe. Guidance, clamp and sway (−0.8) were set by single-seed sweeps and need no retraining.

6.1Best-of-8 selection

The recipe optionally synthesizes 8 seeds per chunk and keeps the candidate maximizing

s = sim − 1.0·CER − 0.05·Penv − 0.05·Ptimbre   (1)

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.

Figure 6One sentence through the lineage (audio)
Sabah güneşi sessiz sokağın taşlarına yavaşça vuruyordu. general-001 · “The morning sun was slowly striking the stones of the quiet street.”
Foundation, no voice
Antalia 1, best of 8 · sim 0.972
16 Euler steps
Every clip is AI-generated; none is a recording of a real person.

6.3Release artifacts

Table 7What is published
ArtifactContentsLicense
cloud0day3/antalia-1Stage-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 853a117ef95fa44efff785a6b674f380878da57879cb879d6d099d1e1444266eAntalia OpenRAIL-M
cloud0day3/antalia-1-foundationFoundation v3, update 100,000, EMA; 299,623,013 params; 1.20 GB. SHA-256 89ecf310a14333c6bd5a754360cee2207027dd23b2a0171984a32c423afcfcd1Antalia OpenRAIL-M
antalia-voice-corpus1,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-evalturkish-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/antaliaModel, 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 siteRaw single-seed vs best-of-8 per category, failure cases, the long-form pair, foundation samples and the 16-step sample—
Both weight repositories use the 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
07 Read before using

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.

License and use restrictions. The weights are released under Antalia OpenRAIL-M, which prohibits impersonating real persons, deceptive or fraudulent use, political robocalls, and use without disclosure that audio is synthetic. It also requires attribution: any distribution of the model or its derivatives, and any product, service or publication that uses them, must credit “Antalia 1” by Sezgin Saygili, Emre Kaplaner, Oncel Ozgul and Fikri San Koktas (Patientdesk.ai) with a link to the model or code repository. The voice belongs to a real person who consented to open-weight release of a model, not to being impersonated; users must not present the output as her, or any other real person, speaking.

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.

08 Conclusion

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

References

  1. Y. Lipman, R. T. Q. Chen, H. Ben-Hamu, M. Nickel, M. Le. Flow Matching for Generative Modeling. ICLR 2023. arXiv:2210.02747.
  2. X. Liu, C. Gong, Q. Liu. Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023. arXiv:2209.03003.
  3. A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, Ł. Kaiser, I. Polosukhin. Attention Is All You Need. NeurIPS 2017.
  4. 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.
  5. Z. Liu, H. Mao, C.-Y. Wu, C. Feichtenhofer, T. Darrell, S. Xie. A ConvNet for the 2020s. CVPR 2022. arXiv:2201.03545.
  6. N. Shazeer. GLU Variants Improve Transformer. arXiv:2002.05202, 2020.
  7. W. Peebles, S. Xie. Scalable Diffusion Models with Transformers. ICCV 2023. arXiv:2212.09748.
  8. J. Ho, T. Salimans. Classifier-Free Diffusion Guidance. arXiv:2207.12598, 2022.
  9. S. Lee, W. Ping, B. Ginsburg, B. Catanzaro, S. Yoon. BigVGAN: A Universal Neural Vocoder with Large-Scale Training. ICLR 2023. arXiv:2206.04658.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. I. Loshchilov, F. Hutter. Decoupled Weight Decay Regularization. ICLR 2019. arXiv:1711.05101.
  17. A. Łańcucki. FastPitch: Parallel Text-to-Speech with Pitch Prediction. ICASSP 2021. arXiv:2006.06873.