Configuration Parsing Warning:Invalid JSON for config file config.json
YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Model Card: PulaarTTS
Model Details
| Name | pulaarTTS |
| Architecture | VITS (Conditional Variational Autoencoder with adversarial learning) |
| Framework | Coqui TTS |
| Task | Text-to-Speech (TTS) synthesis |
| Language | pulaar (ff) |
| Sample rate | 22,050 Hz |
| Checkpoint size | ~952 MB (model.pth) |
| Files | model.pth (weights), config.json (architecture + training config) |
| Vocabulary | 93 grapheme characters (Latin alphabet + pulaar/French diacritics: à, é, ë, ñ, etc.) — no phonemizer, trained directly on graphemes |
The model is a single-speaker acoustic model + vocoder trained end-to-end (VITS jointly learns the text-to-spectrogram and spectrogram-to-waveform steps, so no separate vocoder is needed at inference time).
Intended Use
Synthesize spoken pulaar audio from raw pulaar text for the Speech Studio backend.
Not intended for: languages other than pulaar, multi-speaker synthesis, or real-time/streaming use cases (inference generates a full .wav file per request).
How to Use
Install dependency
pip install transformers==4.46.3 TTS==0.19.0
Download Weights From HF
from huggingface_hub import snapshot_download
snapshot_download(repo_id="AIHubSN/Kiriku-Pulaar-TTS", local_dir="checkpoints")
Generate Speech with Coqui TTS
from TTS.utils.synthesizer import Synthesizer
synthesizer = Synthesizer(
tts_checkpoint="checkpoints/model.pth",
tts_config_path="checkpoints/config.json",
)
wav = synthesizer.tts(text="Aliw ina jiira kodde, moɗi tan, ɗeɗɗii.")
synthesizer.save_wav(wav, "output.wav")
Training Data
- Dataset:
pulaar_dataset/with a Coqui-formattedmetadata.txttranscript file (path/text pairs). - Audio preprocessing: silence trimmed at 45 dB, 22,050 Hz sample rate, 80 mel bins, no pitch/energy conditioning.
- No phonemizer used — trained on raw graphemes with cleaner disabled (
text_cleaner: null), so text is passed through largely as-is (after lower-casing/number conversion at inference time). - Dataset size, number of speakers/hours, and licensing are not recorded in
config.json— fill this in if known before distributing the card externally.
Training Procedure
- Base config: single-speaker VITS (
use_speaker_embedding: false,num_speakers: 0) - Epochs: up to 2000 (checkpoints saved every 12,000 steps, best-3 kept)
- Batch size: 32
- Optimizer: AdamW (β=[0.8, 0.99], eps=1e-9, weight_decay=0.01)
- Learning rates: generator/discriminator both start at 2e-4,
ExponentialLRdecay (γ=0.999875/epoch) - Loss weights: mel=45.0, KL=1.0, discriminator/generator/feature/duration=1.0
- Restored from checkpoint
TTS_MODELING/pulaarTTS-May-31-2026_04+35PM-.../best_model_2017892.pth(~2M training steps)
Evaluation
No quantitative metrics (MOS, MCD, WER, etc.) are recorded alongside the checkpoint. Qualitative test sentences used during training (for manual listening checks):
- "ko ɗuum waɗi ɓe kuccini bonanndeeji maɓɓe ko he sektoraaji jogiiɗi nguurndam leydi ndi ɗi"
- "Hayso tawii ko Makki Sal heddoraa he hoore laamu leydi Senegaal natti heewde ne"
- "ko wayno isinaaji ndiyam e jeyngol kam e jeereeji"
If you need a documented quality bar, run these (or a held-out eval set) through the model and record MOS/CMOS results here.
Limitations & Risks
- Low-resource language: Pulaar TTS training data is comparatively small/scarce versus high-resource languages; expect more artifacts, mispronunciations on out-of-distribution text, and weaker prosody on long or rare sentences.
- Single speaker, single style: no control over speaker identity, emotion, or speaking rate beyond VITS's built-in
length_scale/noise parameters. - Grapheme-based, no phonemizer: pronunciation of unseen character sequences (loanwords, typos, French-mixed text beyond digits) may be unreliable.
- No content filtering: the model will synthesize whatever text it's given; add moderation upstream if used in a user-facing product.
- Downloads last month
- 4