You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

Log in or Sign Up to review the conditions and access this model content.

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.

AI Hub Senegal

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-formatted metadata.txt transcript 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, ExponentialLR decay (γ=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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for AIHubSN/Kiriku-Pulaar-TTS