A voice-cloning text-to-speech model for Najdi Arabic (Saudi Arabic), fully fine-tuned from SWivid/Habibi-TTS's on (Saudi) specialized checkpoint.
Given 5–8 seconds of a reference voice saying something in Arabic, this model generates new arbitrary Arabic text in that same voice, with Najdi-dialect prosody and pronunciation.
Model Details
Architecture
F5-TTS Diffusion Transformer (DiT), v1 Base configuration:
This is a full fine-tune (not LoRA) warm-started from
SWivid/Habibi-TTS/Specialized/SAU/model_200000.safetensors. That base
checkpoint was already trained on Arabic speech for 200,000 updates by SWivid;
this fine-tune runs an additional ~last updates on Najdi-specific data
on top of those weights. All ~335M parameters are trainable — no frozen layers,
no adapters.
Why full fine-tuning, not LoRA?
LoRA with low rank (r=8-16) on messy conditional generation tasks ends up
averaging noise and signal together in its low-rank update, producing
artifacts that weren't in either the base model or the training data. Full
fine-tuning has the capacity to properly partition the data distribution —
at the cost of not being able to toggle the adaptation on/off at inference.
Why flow matching / DiT for TTS?
F5-TTS uses flow matching (a diffusion-family method) rather than
autoregressive generation. Instead of generating audio token-by-token, it
denoises a full mel-spectrogram in 32 ODE steps. The DiT transformer
conditions on both the text and the masked reference audio — the same
architecture used for text-to-image diffusion, adapted for audio. See the
original F5-TTS paper.
Training
Data
Combined ~18.4 hours of Najdi and Saudi Arabic speech from five HuggingFace datasets, filtered to clips of 3–10 seconds in duration:
Total training clips: ~13,614
Total audio duration: ~18.4 hours
Sample rate: resampled to 24 kHz mono
1from huggingface_hub import hf_hub_download
2from f5_tts.model import DiT
3from f5_tts.infer.utils_infer import load_model, load_vocoder, preprocess_ref_audio_text
4from habibi_tts.infer.utils_infer import infer_process
5import torch, soundfile as sf
67# Download files8ckpt_path = hf_hub_download(repo_id="NAMAA-Space/NAMAA-Saudi-TTS-V2", filename="model_last.pt")9vocab_path = hf_hub_download(repo_id="NAMAA-Space/NAMAA-Saudi-TTS-V2", filename="vocab.txt")1011# Load model12V1_BASE_CFG =dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)13model = load_model(DiT, V1_BASE_CFG, ckpt_path, vocab_file=vocab_path, device="cuda")14model = model.to(torch.float32).eval()15vocoder = load_vocoder()1617# Voice clone18REF_AUDIO ="path/to/najdi_reference_clip.wav"# 5-8s of clean Najdi speech19REF_TEXT ="exact transcript of that clip"20ref_audio, ref_text = preprocess_ref_audio_text(REF_AUDIO, REF_TEXT)2122# Generate23wave, sr, _ = infer_process(24 ref_audio, ref_text,25"مرحبا، كيف حالك اليوم؟",# text to speak26 model, vocoder,27 nfe_step=32, speed=1.0,28)29sf.write("output.wav", wave, sr)
Or use the inference.py script included in this repo.
Reference clip guidelines
Quality of the generated output is dominated by quality of the reference clip.
Duration: 5–8 seconds. Less than 3s is too little prosody; more than 10s
costs VRAM with no quality gain.
Clean audio: no background music, no overlapping speakers, no heavy
room reverb. Clipped or noisy references produce clipped or noisy outputs.
Single speaker, full phrases: the reference should contain one person
speaking complete sentences, not isolated words.
Accurate transcript: REF_TEXT must be what's actually said in REF_AUDIO.
Even small drift here degrades the output.
Generation parameters
nfe_step=32 — diffusion ODE steps. 32 is the quality/speed sweet spot;
raise to 64 for marginal quality gain (2x slower), lower to 16 for
faster iteration.
speed=1.0 — speech speed multiplier. 0.8 for slower, 1.2 for faster.
Intended Use
Text-to-speech for Najdi Arabic content creation where you have a clean
reference clip of the target voice.
Research on Arabic dialect TTS.
Out-of-Scope / Limitations
Not a multi-dialect model. Fine-tuned on Najdi; will produce Najdi-flavored
output even for other Arabic dialect inputs. Use vanilla Habibi-TTS for
other dialects.
Voice clone requires reference audio. This is not a "read arbitrary
text in a fixed voice" model. Without a reference clip, there is no output.
Training data includes podcast audio. Some inherited background
characteristics (room tone, occasional distant music) may appear in
outputs, especially when reference clip is itself podcast-sourced.
Non-commercial. License is CC-BY-NC-SA-4.0 (inherited from the base
Habibi-TTS model). You may not use this for commercial purposes without
working out separate licensing with SWivid.
No safeguards against voice cloning misuse. Do not clone a person's
voice without their permission. Do not generate deceptive or impersonating
audio.
Evaluation
No formal evaluation metrics are reported. Subjective quality improvement
over vanilla Habibi-TTS SAU was observed for Najdi-accented prompts. A/B
testing against the base model is recommended for your specific use case.
Files
File
Description
model_last.pt
Model weights for inference (step last)
model_last.pt
Full training state (weights + optimizer) for resuming
vocab.txt
Character-level tokenizer vocab (2704 tokens)
config.json
Architecture hyperparameters
training_config.json
Training hyperparameters used
inference.py
Standalone inference script
Citation
If you use this model, please cite both this fine-tune and the base Habibi-TTS
work:
bibtex
1@misc{habibi-tts-najdi-ft,
2 author = {namaa community},
3 title = {Habibi-TTS Najdi Fine-Tuned},
4 year = {2026},
5 publisher = {Hugging Face},
6 howpublished = {\url{https://huggingface.co/NAMAA-Space/NAMAA-Saudi-TTS-V2}},
7}
89@misc{habibi-tts,
10 author = {SWivid},
11 title = {Habibi-TTS},
12 publisher = {Hugging Face},
13 howpublished = {\url{https://huggingface.co/SWivid/Habibi-TTS}},
14}
1516@article{f5tts,
17 title = {F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching},
18 author = {Chen, Yushen and others},
19 journal = {arXiv:2410.06885},
20 year = {2024},
21}