Lahgtna-OmniVoice Egyptian — v2 (multi-voice, diacritized)
Multi-voice Egyptian-Arabic (arz) TTS, fine-tuned on a combined ~34 h, two-narrator
corpus. Speaks two trained voices (Eqkawkab + Noselleel) and clones any reference voice
zero-shot. This repo is the hub for the project — it also hosts the benchmark,
streaming interface, code, training guide, and sample sets.
For the best multi-voice pronunciation, see
v3 (non-diacritized) — it beats v2 by ~38% lower CER on pure-Arabic.
👪 Model family
What's in this repo
model.safetensors + config + tokenizer — the v2 model
benchmark/ — 4-way ASR-CER benchmark + 60 audio clips
STREAMING.md + samples_streaming/ — low-latency streaming (TTFC ~0.8s)
samples_v2_multivoice/, samples_v2_long/ — both-voice demos
TRAINING_GUIDE.md + code/ — full reproducible recipe + scripts
Usage
1import torch, soundfile as sf
2from omnivoice.models.omnivoice import OmniVoice
3m = OmniVoice.from_pretrained("ehabnegm/lahgtna-omnivoice-egyptian-v2", device_map="cuda", dtype=torch.float16)
4audio = m.generate(text="أهلاً بيك", language="arz", ref_audio="voice.wav", ref_text="نص المرجع")
5sf.write("out.wav", audio[0], 24000)
Training
~34 h / 10,828 clips (Eqkawkab + Noselleel), diacritized text. Continued from v1 checkpoint-6000,
8,000 steps, SDPA, bf16, 1× L4. Train loss 3.93 → 1.92.
Benchmark (ASR round-trip CER, 13 pure-Arabic sentences — lower = clearer)
| model | CER ↓ |
|---|
| v1 | 0.056 |
| v3 | 0.063 |
| v2 | 0.102 |
| base | 0.109 |
Full benchmark + audio in benchmark/. | |
321-word long-form stress test
A full Egyptian-Arabic article (~321 words, ~2:50) synthesized by each model, then transcribed
back with Whisper large-v3 (ASR round-trip CER — lower = stays on-text).
| model | audio | RTF | CER ↓ |
|---|
| v3 | 173 s | 0.25 | 0.21 — stays coherent ✅ |
| base | 170 s | 0.35 | 0.69 — drifts ⚠️ |
| v1 | 170 s | 0.35 | 0.71 — drifts ⚠️ |
| v2 | 170 s | 0.43 | 0.71 — drifts ⚠️ |
Finding: on paragraph-length input the diacritized models (base/v1/v2) lose coherence and
babble; v3 (non-diacritized) is the only version that stays on-text — decisive for long-form
and agent replies. Listen: base.wav, v1.wav, v2.wav, v3.wav.
Limitations & responsible use
CATT diacritics on heavy colloquial are approximate; code-switched English is not trained.
Audio derived from public YouTube channels (@Eqkawkab, @noselleel) — credit the creators, get
permission before commercial use, and don't use the voices to impersonate or mislead.