--- license: apache-2.0 language: - ar pipeline_tag: text-to-speech library_name: omnivoice base_model: oddadmix/lahgtna-omnivoice-v2 tags: - text-to-speech - tts - arabic - egyptian-arabic - arz - omnivoice - voice-cloning - multi-speaker --- # Lahgtna-OmniVoice Egyptian โ€” **v3** (multi-voice, non-diacritized) Multi-voice **Egyptian-Arabic (`arz`)** TTS. v3 continues from v2 on **raw, non-diacritized text** to fix pronunciation problems caused by MSA diacritics on Egyptian colloquial. It speaks two trained voices (Eqkawkab + Noselleel) and clones any reference voice zero-shot. **Recommended model for a multi-voice product** โ€” best multi-voice intelligibility, best on numbers, and lowest latency (no diacritizer at inference). ## ๐Ÿ‘ช Model family | | repo | voices | text | notes | |---|---|---|---|---| | base | [lahgtna-omnivoice-v2](https://huggingface.co/oddadmix/lahgtna-omnivoice-v2) | โ€” | diacritized | upstream | | v1 | [egyptian](https://huggingface.co/ehabnegm/lahgtna-omnivoice-egyptian) | 1 | diacritized | best CER, single voice | | v2 | [egyptian-v2](https://huggingface.co/ehabnegm/lahgtna-omnivoice-egyptian-v2) | 2 | diacritized | multi-voice | | **v3** โ† you are here | [egyptian-v3](https://huggingface.co/ehabnegm/lahgtna-omnivoice-egyptian-v3) | 2 | **raw** | **recommended** | | ๐ŸŽ›๏ธ Compare GUI | [Space](https://huggingface.co/spaces/ehabnegm/lahgtna-egyptian-tts-compare) | โ€” | โ€” | 4-model A/B | | ๐Ÿ“š Data | [eqkawkab](https://huggingface.co/datasets/ehabnegm/eqkawkab-egyptian-tts) ยท [noselleel](https://huggingface.co/datasets/ehabnegm/noselleel-egyptian-tts) | โ€” | โ€” | ~34h | ## Usage โ€” feed RAW Egyptian text (no diacritics) ```python import torch, soundfile as sf from omnivoice.models.omnivoice import OmniVoice m = OmniVoice.from_pretrained("ehabnegm/lahgtna-omnivoice-egyptian-v3", device_map="cuda", dtype=torch.float16) audio = m.generate(text="ุฃู‡ู„ุงู‹ ุจุญุถุฑุชูƒุŒ ู…ุนุงูƒ ุฎุฏู…ุฉ ุงู„ุนู…ู„ุงุกุŒ ู…ู…ูƒู† ุฃุณุงุนุฏูƒ ุฅุฒุงูŠุŸ", language="arz", ref_audio="voice.wav", ref_text="ู†ุต ุงู„ูƒู„ูŠุจ ุงู„ู…ุฑุฌุนูŠ") sf.write("out.wav", audio[0], 24000) ``` Verbalize numbers (e.g. `ูขูฅ โ†’ ุฎู…ุณุฉ ูˆุนุดุฑูŠู†`) and **strip/transliterate English words** before synthesis (v3 attempts untrained English otherwise). ## โ–ถ๏ธ Run on Colab Free GPU, step-by-step: **[COLAB.md](./COLAB.md)** ยท runnable notebook: **[lahgtna_colab.ipynb](./lahgtna_colab.ipynb)** (open it in Colab โ†’ Runtime โ†’ T4 GPU). Log in with a HF read token (repo is private). ## Training Combined **~34 h, 10,828 clips** (Eqkawkab ~8h + Noselleel ~26h), **raw + orthography-normalized** text. Continued from v2 `checkpoint-8000`, 5,000 steps, SDPA, bf16, 1ร— L4. ## Benchmark (ASR round-trip CER, 13 pure-Arabic sentences โ€” lower = clearer) | model | CER โ†“ | | |---|---|---| | v1 | 0.056 | single-voice | | **v3** | **0.063** | **best multi-voice** | | v2 | 0.102 | multi-voice, diac | | base | 0.109 | | **v3 beats v2 by ~38%** on pure-Arabic โ€” removing the wrong diacritics worked. Full benchmark + audio: [v2 repo `/benchmark`](https://huggingface.co/ehabnegm/lahgtna-omnivoice-egyptian-v2/tree/main/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`. Audio: [`long300/`](https://huggingface.co/ehabnegm/lahgtna-omnivoice-egyptian-v2/tree/main/long300). ## Limitations & responsible use Code-switched English is not trained (strip/transliterate it). 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. ## Latency โ€” time-to-first-chunk (streaming, raw text) Dropping the diacritizer makes v3 **~250 ms faster than v2** at every setting: | num_step | TTFC | |---|---| | 32 | 1.82 s | | 16 | 0.96 s | | **8 (recommended)** | **0.54 s** | | 4 (fastest) | **0.32 s** |