
Alongside the character sheets for our Emirati animated series pilot, we tested every self-hosted text-to-speech model we could install. Each one voiced the same lines for the same four characters in Arabic and English. This post records the process, the GPU, the timings, and all 108 clips.
Every model ran locally. No cloud speech API was used.
What we did
The series will be made in Arabic and in English, so each model read one line per character in both languages, two takes each. We installed seven speech models and ran eight configurations (Habibi-TTS has two checkpoints). After listening, Audar-TTS V1 Turbo was chosen for the series.
No real person was cloned
We have no consented actor recordings yet, so the reference voices are synthetic. OmniVoice designed one voice per character from its documented attributes, speaking that character’s English line, two seeds each:
- Yadda: female, elderly, low pitch.
- Yaddi: male, elderly, low pitch.
- Salem: male, child.
- Noora: female, child.
Take 1 of each became the reference every cloning model copied. So every model voiced the same four synthetic people, and what differs between clips is the model.
The lines
| Character | Arabic | English |
|---|---|---|
| Yadda, the grandmother | الخريطة ردّت متروسة… وقلبي بعد، يوم شفتكم ويا بعض. | The khareetah came back full… and so is my heart, seeing you two together. |
| Yaddi, the grandfather | علّي صوتج يا بنتي، لا تستحين. | Sing up, my girl. Don't be shy. |
| Salem, 9 | أنا ما بطلع يا يدّه. كبرت على حق الليلة. بقعد ويا يدّي. | I'm not going, Yadda. I'm too grown-up for Hag Al Laila. I'll stay with Yaddi. |
| Noora, 7 | بس أنا أستحي أغنّي بروحي. | But I'm too shy to sing by myself. |
The GPU and the setup
- GPU: every clip ran on an NVIDIA GeForce RTX 5090 (32 GB VRAM), one clip at a time.
- Environments: each model has its own Python environment with PyTorch 2.8 for CUDA 12.8, installed from its own source code, with no cloud endpoints and no prompt rewriting.
- Timing: each clip runs as its own process and loads its model, so every time below includes loading.
- Gate: every clip passed our render gate as an approved job.
- Extra downloads: Audar needs the NeuCodec codec (1.16 GB, checksum verified) and w2v-BERT 2.0 (2.3 GB).
Timings and licences
| Model | Details | Licence | Clips | Typical per clip | First clip | Audio made |
|---|---|---|---|---|---|---|
| OmniVoice voice design (the references) | attribute-designed voices | CC BY-NC 4.0 (weights) | 8 | 9.5 s | 24.6 s | 26.8 s |
| Audar-TTS V1 Turbo | 1.64B, GGUF Q8_0, NeuCodec | AudarAI Community License (Enterprise licence for commercial use) | 16 | 12.3 s | 19.6 s | 52.9 s |
| Audar-TTS V1 Flash | 553M, bf16, NeuCodec | AudarAI Open License | 16 | 15.6 s | 52.2 s | 52.8 s |
| Habibi-TTS Unified (UAE dialect tag) | F5-TTS, 337M, Arabic only | CC BY-NC-SA 4.0 | 8 | 11.6 s | 24.7 s | 29.4 s |
| Habibi-TTS UAE | F5-TTS, 337M, Arabic only | CC BY-NC-SA 4.0 | 8 | 11.5 s | 18.7 s | 29.4 s |
| Chatterbox Multilingual | 0.5B, 23 languages, watermarked output | MIT | 16 | 15.0 s | 71.3 s | 58.9 s |
| Fish Audio S2 Pro | 4B + 400M, plain PyTorch | Fish Audio Research License | 16 | 23.9 s | 76.3 s | 50.4 s |
| OmniVoice | 0.6B, voice design and cloning | CC BY-NC 4.0 (weights) | 16 | 9.8 s | 11.2 s | 55.1 s |
| qwen3.5-TTS-Emirati | 1.7B, one built-in speaker | Apache 2.0 tag | 4 | 13.7 s | 34.4 s | 11.4 s |
All 108 clips completed and none failed.
What the timings actually measure
Read the table above carefully before drawing conclusions from it, because it is not measuring what a benchmark usually measures. Every clip runs as its own process and loads its model from cold, so each number is a load plus about five seconds of generated speech — and the load dominates. These are cold-start figures.
That is deliberate: it is exactly how the pipeline uses these models, one clip at a time as a separate job. It is also the worst case, and the wrong number to quote for a service that keeps a model resident. A server doing that would look completely different, and nothing here measures it.
It is why the “first clip” column is worth as much as the typical one. The gap between them is the operating system’s file cache filling: the first run reads the weights off disk, every later run finds them in memory.
The surprise: the bigger model was the faster one
Audar ships two checkpoints. Turbo is 1.64 billion parameters and Flash is 553 million — three times the size — and Turbo was faster on both measurements: 12.3 s against 15.6 s typical, and 19.6 s against 52.2 s on the first clip. The first-clip gap is the striking one: the smaller model took 33 s longer to get going.
The difference is not the model, it is the packaging. Turbo is distributed as GGUF at Q8_0 and Flash as bf16 safetensors. A GGUF file is memory-mapped, so pages arrive as they are touched and inference can start before the whole file is resident; the safetensors path materialises tensors up front. Parameter count is what people compare, and here it predicted the answer backwards.
We are confident about the measurement and only partly confident about the explanation. What we can rule out is raw file size — at Q8_0 the 1.64 B checkpoint is the larger download of the two, so fewer bytes is not the reason. If you are choosing between two checkpoints of one model, measure both rather than assuming the small one is quicker.
Why the slowest model is slow
Fish Audio S2 Pro is the largest here (4 B plus a 400 M component) and the slowest at 23.9 s typical and 76.3 s on the first clip. Size is part of it, but the shape of the loader is the bigger part: the upstream init_model builds the network in float32 on the CPU and then reads 9 GB of shards into it, peaking around 27 GB of host RAM before a single byte reaches the GPU.
That is a host-memory problem wearing a GPU model’s clothes, and it is the kind of thing you only find by installing the model rather than reading its card. We ended up writing a leaner loader that constructs on the GPU directly. The general lesson: when a model is unexpectedly slow to start, look at how its loader allocates before you look at the model.
What went wrong
“All 108 clips completed and none failed” is true of the run and hides most of the work. Three of these models could not speak at all when first installed:
- Audar needs two extra downloads and neither is in the weights. The checkpoints are useless without the NeuCodec audio codec and w2v-BERT 2.0 (1.16 GB and 2.3 GB). NeuCodec is gated and returned
403on first attempt. Turbo is also GGUF-only, and the standard GGUF tokenizer splits its special tokens, which has to be worked around before it produces anything. - Habibi ships no vocoder. It needs Vocos fetched separately. Its underlying F5 stack also silently converts characters it does not know into spaces — a failure mode that produces plausible audio with words quietly missing, which is worse than an error.
- qwen3.5-TTS-Emirati cannot do the job at all, and the model card does not say so. It has one baked-in speaker measured at about 140 Hz — an adult male — and no speaker encoder, so it cannot clone. Of our four characters it can voice the grandfather and nobody else. A seven-year-old girl is not a pitch setting away.
What we still cannot judge from this
- Nothing here measures quality, which is the thing that actually decides it. The table ranks loading speed. Audar Turbo was chosen by ear, and the Arabic dialect is judged separately by a native Emirati speaker before any voice is used.
- The voice designer has no Arabic in its vocabulary. It fixes age, sex and timbre from attributes like
female, child; the Emirati performance comes entirely from the cloning stage that follows it. So a designed reference cannot be judged for accent at all. - Licences decide more than the benchmark does. The two quality references here — Habibi and OmniVoice — are non-commercial, so however they sound they are not production options. Half the table is eliminated before any of it is heard.
The Arabic dialect is judged separately, by a native Emirati speaker, before any voice is used in the series.
All 108 clips
Yadda, the grandmother
الخريطة ردّت متروسة… وقلبي بعد، يوم شفتكم ويا بعض.
The khareetah came back full… and so is my heart, seeing you two together.
Reference voice (OmniVoice design)
English, take 1 (24.6 s to make, 4.6 s long)
English, take 2 (9.3 s to make, 4.6 s long)
Audar-TTS V1 Turbo
Arabic, take 1 (19.6 s to make, 5.2 s long)
Arabic, take 2 (12.3 s to make, 4.9 s long)
English, take 1 (12.8 s to make, 4.7 s long)
English, take 2 (12.8 s to make, 4.6 s long)
Audar-TTS V1 Flash
Arabic, take 1 (52.2 s to make, 4.7 s long)
Arabic, take 2 (16.4 s to make, 4.8 s long)
English, take 1 (15.4 s to make, 4.5 s long)
English, take 2 (18.8 s to make, 5.0 s long)
Habibi-TTS Unified (UAE dialect tag)
Arabic, take 1 (24.7 s to make, 5.0 s long)
Arabic, take 2 (11.8 s to make, 5.0 s long)
Habibi-TTS UAE
Arabic, take 1 (18.7 s to make, 5.0 s long)
Arabic, take 2 (11.6 s to make, 5.0 s long)
Chatterbox Multilingual
Arabic, take 1 (71.3 s to make, 5.0 s long)
Arabic, take 2 (16.0 s to make, 4.9 s long)
English, take 1 (16.1 s to make, 4.9 s long)
English, take 2 (16.2 s to make, 5.0 s long)
Fish Audio S2 Pro
Arabic, take 1 (76.3 s to make, 4.5 s long)
Arabic, take 2 (33.1 s to make, 4.5 s long)
English, take 1 (32.1 s to make, 4.2 s long)
English, take 2 (32.5 s to make, 4.3 s long)
OmniVoice
Arabic, take 1 (11.2 s to make, 4.5 s long)
Arabic, take 2 (9.3 s to make, 4.6 s long)
English, take 1 (9.7 s to make, 4.7 s long)
English, take 2 (10.0 s to make, 4.7 s long)
Yaddi, the grandfather
علّي صوتج يا بنتي، لا تستحين.
Sing up, my girl. Don't be shy.
Reference voice (OmniVoice design)
English, take 1 (9.4 s to make, 1.9 s long)
English, take 2 (9.5 s to make, 2.0 s long)
Audar-TTS V1 Turbo
Arabic, take 1 (12.3 s to make, 2.0 s long)
Arabic, take 2 (12.1 s to make, 2.1 s long)
English, take 1 (11.4 s to make, 1.9 s long)
English, take 2 (12.1 s to make, 1.9 s long)
Audar-TTS V1 Flash
Arabic, take 1 (16.8 s to make, 2.0 s long)
Arabic, take 2 (15.1 s to make, 2.1 s long)
English, take 1 (14.3 s to make, 1.7 s long)
English, take 2 (14.0 s to make, 1.9 s long)
Habibi-TTS Unified (UAE dialect tag)
Arabic, take 1 (11.4 s to make, 2.4 s long)
Arabic, take 2 (11.7 s to make, 2.4 s long)
Habibi-TTS UAE
Arabic, take 1 (12.1 s to make, 2.4 s long)
Arabic, take 2 (11.5 s to make, 2.4 s long)
Chatterbox Multilingual
Arabic, take 1 (14.8 s to make, 3.0 s long)
Arabic, take 2 (14.8 s to make, 2.9 s long)
English, take 1 (15.0 s to make, 2.7 s long)
English, take 2 (14.6 s to make, 2.1 s long)
Fish Audio S2 Pro
Arabic, take 1 (23.9 s to make, 2.2 s long)
Arabic, take 2 (23.1 s to make, 2.0 s long)
English, take 1 (22.2 s to make, 1.7 s long)
English, take 2 (21.0 s to make, 1.7 s long)
OmniVoice
Arabic, take 1 (9.7 s to make, 2.5 s long)
Arabic, take 2 (9.7 s to make, 2.3 s long)
English, take 1 (9.3 s to make, 2.0 s long)
English, take 2 (9.7 s to make, 2.0 s long)
qwen3.5-TTS-Emirati
Arabic, take 1 (34.4 s to make, 3.1 s long)
Arabic, take 2 (14.1 s to make, 3.0 s long)
English, take 1 (13.7 s to make, 2.7 s long)
English, take 2 (12.9 s to make, 2.6 s long)
Salem, 9
أنا ما بطلع يا يدّه. كبرت على حق الليلة. بقعد ويا يدّي.
I'm not going, Yadda. I'm too grown-up for Hag Al Laila. I'll stay with Yaddi.
Reference voice (OmniVoice design)
English, take 1 (9.3 s to make, 4.6 s long)
English, take 2 (9.9 s to make, 4.6 s long)
Audar-TTS V1 Turbo
Arabic, take 1 (12.4 s to make, 3.8 s long)
Arabic, take 2 (12.3 s to make, 4.1 s long)
English, take 1 (12.7 s to make, 4.6 s long)
English, take 2 (12.9 s to make, 4.6 s long)
Audar-TTS V1 Flash
Arabic, take 1 (18.0 s to make, 4.3 s long)
Arabic, take 2 (16.9 s to make, 4.3 s long)
English, take 1 (17.4 s to make, 4.6 s long)
English, take 2 (15.6 s to make, 4.6 s long)
Habibi-TTS Unified (UAE dialect tag)
Arabic, take 1 (11.4 s to make, 5.0 s long)
Arabic, take 2 (11.4 s to make, 5.0 s long)
Habibi-TTS UAE
Arabic, take 1 (11.5 s to make, 5.0 s long)
Arabic, take 2 (11.3 s to make, 5.0 s long)
Chatterbox Multilingual
Arabic, take 1 (16.1 s to make, 5.1 s long)
Arabic, take 2 (15.7 s to make, 4.9 s long)
English, take 1 (15.7 s to make, 4.6 s long)
English, take 2 (16.8 s to make, 4.5 s long)
Fish Audio S2 Pro
Arabic, take 1 (32.9 s to make, 4.7 s long)
Arabic, take 2 (33.3 s to make, 4.6 s long)
English, take 1 (32.3 s to make, 4.2 s long)
English, take 2 (32.6 s to make, 4.3 s long)
OmniVoice
Arabic, take 1 (9.9 s to make, 4.6 s long)
Arabic, take 2 (9.9 s to make, 4.7 s long)
English, take 1 (10.0 s to make, 4.8 s long)
English, take 2 (9.8 s to make, 4.8 s long)
Noora, 7
بس أنا أستحي أغنّي بروحي.
But I'm too shy to sing by myself.
Reference voice (OmniVoice design)
English, take 1 (9.8 s to make, 2.2 s long)
English, take 2 (9.6 s to make, 2.2 s long)
Audar-TTS V1 Turbo
Arabic, take 1 (12.1 s to make, 1.9 s long)
Arabic, take 2 (11.9 s to make, 2.2 s long)
English, take 1 (12.6 s to make, 2.2 s long)
English, take 2 (12.0 s to make, 2.1 s long)
Audar-TTS V1 Flash
Arabic, take 1 (15.8 s to make, 1.9 s long)
Arabic, take 2 (15.1 s to make, 2.1 s long)
English, take 1 (13.6 s to make, 2.1 s long)
English, take 2 (14.5 s to make, 2.1 s long)
Habibi-TTS Unified (UAE dialect tag)
Arabic, take 1 (11.6 s to make, 2.4 s long)
Arabic, take 2 (11.7 s to make, 2.4 s long)
Habibi-TTS UAE
Arabic, take 1 (11.7 s to make, 2.4 s long)
Arabic, take 2 (11.2 s to make, 2.4 s long)
Chatterbox Multilingual
Arabic, take 1 (14.7 s to make, 2.4 s long)
Arabic, take 2 (14.2 s to make, 2.2 s long)
English, take 1 (14.7 s to make, 2.4 s long)
English, take 2 (13.5 s to make, 2.2 s long)
Fish Audio S2 Pro
Arabic, take 1 (22.4 s to make, 1.8 s long)
Arabic, take 2 (22.7 s to make, 1.9 s long)
English, take 1 (23.0 s to make, 1.9 s long)
English, take 2 (23.1 s to make, 1.9 s long)
OmniVoice
Arabic, take 1 (10.0 s to make, 2.5 s long)
Arabic, take 2 (9.4 s to make, 2.0 s long)
English, take 1 (9.9 s to make, 2.2 s long)
English, take 2 (10.0 s to make, 2.1 s long)


