Text-to-Speech
Transformers
tts
voice-cloning
yoruba
hausa
igbo
pidgin
nigerian-english
african-languages
Instructions to use Axiveri/WazobiaVoice with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Axiveri/WazobiaVoice with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="Axiveri/WazobiaVoice")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("Axiveri/WazobiaVoice", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 34,318 Bytes
0c27695 8ca840d 0c27695 8ca840d 0c27695 e6f34cb 0c27695 8ca840d 0c27695 8ca840d 0c27695 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 | ---
library_name: transformers
license: other
license_name: axiveri-research-license
license_link: LICENSE.md
language:
- yo
- ha
- ig
- en
pipeline_tag: text-to-speech
base_model:
- ResembleAI/chatterbox
tags:
- text-to-speech
- tts
- voice-cloning
- yoruba
- hausa
- igbo
- pidgin
- nigerian-english
- african-languages
---
# WazobiaVoice

## Table of Contents
1. [Model Summary](#model-summary)
2. [Model Description](#model-description)
- [Architecture](#architecture)
- [How WazobiaVoice Compares](#how-wazobiavoice-compares)
3. [Inbuilt Voice Personas](#inbuilt-voice-personas)
4. [Speech Samples](#speech-samples)
- [Native Language Samples](#native-language-samples)
- [Cross-Lingual Voice Cloning](#cross-lingual-voice-cloning)
5. [How to Use](#how-to-use)
6. [Bias, Risks, and Limitations](#bias-risks-and-limitations)
- [The Yoruba Tonal Problem](#the-yoruba-tonal-problem)
- [Recommendations](#recommendations)
7. [Prohibited Uses](#prohibited-uses)
8. [License](#license)
9. [Training](#training)
10. [Ongoing Research: VITS for Yoruba](#ongoing-research-vits-for-yoruba)
11. [Future Improvements](#future-improvements)
12. [Citation](#citation)
13. [Credits & References](#credits--references)
<video controls width="600">
<source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/final_demo.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
*Demo video generated using [ememediaforge](https://github.com/Ememzyvisuals/ememediaforge), also authored by Emmanuel Ariyo (Ememzyvisuals).*
## Model Summary
WazobiaVoice is a multilingual text-to-speech (TTS) and voice cloning model covering **Yoruba, Hausa, Igbo, Nigerian Pidgin, and Nigerian English** — five languages, one model, one set of weights. **~2B parameters** across the T3 transformer backbone and S3Gen flow-matching vocoder combined (see [Architecture](#architecture)). It is built by extending [chatterbox](https://github.com/resemble-ai/chatterbox)'s multilingual architecture to support four languages and orthographies it was never originally designed for, including Yoruba's tonal diacritic system, which required expanding the model's grapheme vocabulary and patching its hardcoded language-support list at both training and inference time.
WazobiaVoice ships with **13 inbuilt voice personas** across all five languages — each individually sourced from real speakers, gender-verified against source metadata (not guessed), and quality-ranked before selection — plus full voice-cloning support from any reference audio clip.
Built by [Axiveri](https://huggingface.co/Axiveri), led by Emmanuel Ariyo, with a mission to bring genuinely open, commercially-usable AI voice infrastructure to African developers and startups — a space where the strongest existing results are locked behind non-commercial research licenses (see [Ongoing Research](#ongoing-research-vits-for-yoruba)).
## Model Description
### Architecture
Chatterbox's multilingual variant (`ChatterboxMultilingualTTS`) generates speech in two stages: a transformer backbone (**T3**) autoregressively predicts discrete speech tokens from input text, and a flow-matching-based generative vocoder (**S3Gen**) converts those tokens into a waveform. Flow-matching sits in the same generative-modeling family as diffusion — both learn to transform noise into structured output through an iterative process — and it's what gives chatterbox its voice-cloning capability: a short reference clip conditions the generation so the output waveform is shaped in that speaker's voice.
The base chatterbox architecture was pretrained on a fixed set of ~23 languages, none of which were Yoruba, Hausa, Igbo, or Nigerian Pidgin. Bringing WazobiaVoice's five target languages online required real engineering at multiple layers, not just a data swap:
- **Grapheme vocabulary expansion** — the tokenizer's character set had to be extended to properly represent Yoruba's tonal diacritics (underdots, tone marks) as distinct, meaningful characters rather than silently normalizing or dropping them.
- **Runtime language-whitelist patch** — the installed chatterbox package hardcodes a `SUPPORTED_LANGUAGES` dictionary that rejects any `language_id` outside its original ~23 languages at generation time, independent of what the underlying weights actually learned. WazobiaVoice's fork (see [How to Use](#how-to-use)) bakes this patch in directly so the model works out of the box.
- **Multi-source, license-audited data pipeline** — training data was assembled from a diverse collection of publicly available and properly licensed Nigerian-language speech sources, explicitly filtered to exclude anything with non-commercial restrictions, and engineered for genuine multi-speaker diversity per language rather than single-speaker bias.
- **One named exception to source-anonymity:** WazobiaVoice's Hausa data is meaningfully strengthened by **wazobia-tts-cc**, an original Axiveri-curated dataset of high-quality Hausa political, government, and civic-affairs speech sourced from established Hausa radio stations and podcasts — chosen specifically because everyday political and civic discourse is a demanding, high-value register for a production voice model to get right.
### How WazobiaVoice Compares
No two Nigerian-language TTS efforts have taken quite the same architectural path, and it's worth naming them directly rather than vaguely:
- **[YarnGPT](https://huggingface.co/saheedniyi/YarnGPT)** (SmolLM2-360M backbone + [WavTokenizer](https://github.com/jishengpeng/WavTokenizer)) takes the same broad approach as chatterbox — an LLM predicting discrete audio tokens — and, like WazobiaVoice, produces strong Nigerian-accented English but runs into the same category of tonal/pronunciation gaps on Yoruba. Its own model card is candid about this. The hosted commercial product at [yarngpt.ai](https://yarngpt.ai) produces near-perfect Yoruba output (independently verified) — a genuinely strong result — but the underlying open model still shows the gaps typical of this architecture family, suggesting the production version benefits from additional proprietary training, framework tuning, or backbone work not reflected in what's publicly released.
- **[MMS-TTS](https://huggingface.co/facebook/mms-tts)** (Meta) uses **VITS** — a mel-spectrogram and duration-predictor based architecture, fundamentally different from the token-autoregressive family above — and gets real, working Yoruba results because of it. This is strong evidence the architecture family matters here, not just data volume. The catch: Meta's MMS-TTS checkpoints are released under a non-commercial license, off-limits for production use by any startup or developer trying to build a real product.
WazobiaVoice's own Yoruba performance (see [The Yoruba Tonal Problem](#the-yoruba-tonal-problem)) shows this same architectural pattern — which is exactly why Axiveri has an active VITS-based research track underway, aimed at closing this gap without the non-commercial restriction. See [Ongoing Research](#ongoing-research-vits-for-yoruba).
## Inbuilt Voice Personas
Every persona below was individually sourced from real speaker audio, verified for gender against the source dataset's own metadata where available, and quality-ranked before selection — not synthesized or guessed.
| Persona | Language | Gender | Region | Traits | Best Use Case |
|---|---|---|---|---|---|
| Wura | Yoruba | Female | Lagos | Social, expressive | Social media content, conversational/casual content, entertainment |
| Bọlaji | Yoruba | Male | Ibadan | Neutral, basic | General narration, everyday announcements, informational content |
| Elder Deji | Yoruba | Male | — | Elderly, native Yoruba speaker | Storytelling, folklore/proverbs, cultural/heritage content, audiobooks |
| Ifé | Yoruba | Female | — | Teenage girl, news-style delivery | Youth-oriented news reading, educational content for younger audiences |
| Musa | Hausa | Male | Kano | Expressive, confident | Sports commentary, ads/promos, energetic announcements |
| Hauwa | Hausa | Female | Kaduna | Calm, professionally expressive | Customer service / IVR, professional narration |
| Emeka | Igbo | Male | Enugu | Bold, neutrally expressive | General narration, e-learning, corporate voice |
| Adaeze | Igbo | Female | Imo | Neutrally expressive | General narration, audiobooks, virtual assistant |
| Tunde | Nigerian Pidgin | Male | Lagos | Calm | Calm narration, wellness/meditation content |
| Ngozi | Nigerian Pidgin | Female | Port Harcourt | Competent, professional | Customer service, business communications |
| John | Nigerian Pidgin | Male | — | Teenage boy, expressive, confident, loud | Ads/promos, youth entertainment, games, energetic social content |
| James | Nigerian English | Male | Lagos Island | Professional | Corporate narration, business communications |
| Amara | Nigerian English | Female | Lagos Island | Calm, friendly, expressive | Friendly customer service, conversational assistant, onboarding content |
## Speech Samples
### Native Language Samples
<div style="margin-top: 20px;">
<table style="width: 100%; border-collapse: collapse;">
<thead>
<tr>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 15%;">Persona</th>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 45%;">Sample Text</th>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 40%;">Audio</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Wura (Yoruba, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Ọrẹ́ mi ti dé láti ìlú ẹ̀kọ́ ní òní, a sì ń sọ̀rọ̀ nípa bí a ṣe ń lọ sí ọjà...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/wura.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Bọlaji (Yoruba, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Ọrẹ́ mi ti dé láti ìlú ẹ̀kọ́ ní òní, a sì ń sọ̀rọ̀ nípa bí a ṣe ń lọ sí ọjà...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/bolaji.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Elder Deji (Yoruba, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Ọrẹ́ mi ti dé láti ìlú ẹ̀kọ́ ní òní, a sì ń sọ̀rọ̀ nípa bí a ṣe ń lọ sí ọjà...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/elder_deji.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ife (Yoruba, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Ọrẹ́ mi ti dé láti ìlú ẹ̀kọ́ ní òní, a sì ń sọ̀rọ̀ nípa bí a ṣe ń lọ sí ọjà...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ife.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Musa (Hausa, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Yau na tashi da safe na ci abincin safe sannan na fita zuwa kasuwa...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/musa.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Hauwa (Hausa, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Yau na tashi da safe na ci abincin safe sannan na fita zuwa kasuwa...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/hauwa.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Emeka (Igbo, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">N'ụtụtụ, m gara ahịa zụta ihe oriri dị ka akwụkwọ nri na azụ̀ ọhụrụ...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/emeka.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Adaeze (Igbo, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">N'ụtụtụ, m gara ahịa zụta ihe oriri dị ka akwụkwọ nri na azụ̀ ọhụrụ...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/adaeze.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Tunde (Pidgin, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">My guy don land from Abuja since morning, we dey gist about how we go reach market...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/tunde.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ngozi (Pidgin, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">My guy don land from Abuja since morning, we dey gist about how we go reach market...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ngozi.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">John (Pidgin, M, teen)</td>
<td style="border: 1px solid #ddd; padding: 8px;">My guy don land from Abuja since morning, we dey gist about how we go reach market...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/john.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">James (English, M)</td>
<td style="border: 1px solid #ddd; padding: 8px;">My friend arrived from Lagos this morning, and we've been chatting about going to the market...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/james.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Amara (English, F)</td>
<td style="border: 1px solid #ddd; padding: 8px;">My friend arrived from Lagos this morning, and we've been chatting about going to the market...</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/amara.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
</tbody>
</table>
</div>
*Each persona has 2 additional sample lines in [`model_card_samples/`](https://huggingface.co/Axiveri/WazobiaVoice/tree/main/model_card_samples) — this table shows one representative line per voice.*
### Cross-Lingual Voice Cloning
The same reference voice can speak **any** of the five supported languages — not just the one it was originally recorded in. Below, Ifé (a native Yoruba voice) and John (a native Pidgin voice) are shown speaking languages outside their own:
<div style="margin-top: 20px;">
<table style="width: 100%; border-collapse: collapse;">
<thead>
<tr>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 20%;">Voice (native language)</th>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 15%;">Speaking</th>
<th style="border: 1px solid #ddd; padding: 8px; text-align: left; width: 40%;">Audio</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ifé (native: Yoruba)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Hausa</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ife_ha.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ifé (native: Yoruba)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Igbo</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ife_ig.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ifé (native: Yoruba)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Nigerian Pidgin</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ife_pcm.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">Ifé (native: Yoruba)</td>
<td style="border: 1px solid #ddd; padding: 8px;">English</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/ife_en.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">John (native: Pidgin)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Yoruba</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/john_yo.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">John (native: Pidgin)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Hausa</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/john_ha.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">John (native: Pidgin)</td>
<td style="border: 1px solid #ddd; padding: 8px;">Igbo</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/john_ig.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
<tr>
<td style="border: 1px solid #ddd; padding: 8px;">John (native: Pidgin)</td>
<td style="border: 1px solid #ddd; padding: 8px;">English</td>
<td style="border: 1px solid #ddd; padding: 8px;"><audio controls style="width: 100%;"><source src="https://huggingface.co/Axiveri/WazobiaVoice/resolve/main/model_card_samples/john_en.wav" type="audio/wav">Your browser does not support the audio element.</audio></td>
</tr>
</tbody>
</table>
</div>
*Full cross-lingual set (24 samples) available in [`model_card_samples/`](https://huggingface.co/Axiveri/WazobiaVoice/tree/main/model_card_samples) and [`cross_lang_manifest.csv`](https://huggingface.co/Axiveri/WazobiaVoice/blob/main/cross_lang_manifest.csv).*
## How to Use
WazobiaVoice runs on **[wazobiavoice-TTS](https://github.com/Ememzyvisuals/wazobiavoice-TTS)**, a fork of chatterbox with the language-whitelist and grapheme-vocabulary patches described in [Architecture](#architecture) baked in directly — no manual patching needed.
### Install
```bash
git clone https://github.com/Ememzyvisuals/wazobiavoice-TTS.git
cd wazobiavoice-TTS
bash scripts/install.sh
```
The install is staged deliberately (a plain `pip install .` will fail on this stack — `deepfilternet` and `torchmetrics` send pip's resolver backtracking into incompatible years-old releases). `scripts/install.sh` handles the correct order: system Rust toolchain for `deepfilternet`'s extension, numpy/torch first, then the remaining audio libraries with the flags they actually need. Full reasoning is commented inline in the script itself.
**Requirements:** Python 3.10+, a CUDA GPU recommended (CPU works but is slow).
### Quickstart
```python
import torch
import torchaudio as ta
from wazobiavoice_tts.mtl_tts import WazobiaVoiceMultilingualTTS
device = "cuda" if torch.cuda.is_available() else "cpu"
model = WazobiaVoiceMultilingualTTS.from_pretrained(device)
wav = model.generate(
"My guy don land from Abuja since morning, we dey gist about how we go "
"reach market buy beans and fresh fish for evening chop.",
language_id="pcm",
audio_prompt_path="path/to/a_5_to_10_second_reference_clip.wav",
exaggeration=0.55,
cfg_weight=0.55,
)
ta.save("output.wav", wav, model.sr)
```
`language_id` accepts `yo` (Yoruba), `ha` (Hausa), `ig` (Igbo), `pcm` (Nigerian Pidgin), `en` (English) — plus the ~23 other languages inherited from the base multilingual model. `audio_prompt_path` is a short (5–10s) reference clip of the voice to clone; omit it to reuse whatever voice was last prepared via `model.prepare_conditionals(...)`.
**Full parameter list:**
```python
model.generate(
text, # str, required
language_id, # str, required — see SUPPORTED_LANGUAGES
audio_prompt_path=None, # str, path to reference audio for voice cloning
exaggeration=0.5, # float, emotion/expressiveness intensity
cfg_weight=0.5, # float, classifier-free guidance weight
temperature=0.8,
repetition_penalty=1.2,
min_p=0.05,
top_p=1.0,
)
```
**Listing supported languages:**
```python
from wazobiavoice_tts.mtl_tts import SUPPORTED_LANGUAGES
print(SUPPORTED_LANGUAGES)
# {'ar': 'Arabic', ..., 'yo': 'Yoruba', 'ha': 'Hausa', 'ig': 'Igbo', 'pcm': 'Nigerian Pidgin', 'en': 'English', ...}
```
**Loading from a local checkpoint instead of the Hub:**
```python
model = WazobiaVoiceMultilingualTTS.from_local("path/to/checkpoint_dir", device)
```
### Demo apps
```bash
python multilingual_app.py # Gradio web UI, multilingual
python gradio_tts_turbo_app.py # Gradio web UI, turbo model
python gradio_vc_app.py # Gradio web UI, voice conversion
```
Full repo, install script reasoning, and license/notice files: **[github.com/Ememzyvisuals/wazobiavoice-TTS](https://github.com/Ememzyvisuals/wazobiavoice-TTS)**
## Bias, Risks, and Limitations
WazobiaVoice's language coverage was built from the ground up rather than inherited, and quality is not uniform across the five supported languages:
- **Nigerian English, Igbo, and Hausa** perform strongly — clear pronunciation, correct accent, stable delivery.
- **Nigerian Pidgin** performs well, close to the English/Igbo/Hausa tier.
- **Yoruba** is the clear outlier. See [The Yoruba Tonal Problem](#the-yoruba-tonal-problem) below for a full technical breakdown — in short, the model pronounces words it saw well-represented in training reasonably well, but struggles with tonal diacritics and pronunciation on less-represented words and patterns.
The model may not capture the full range of regional accents within each language, and inbuilt persona voices reflect the specific speakers they were sourced from rather than every possible voice within a given region or demographic.
### The Yoruba Tonal Problem
This deserves a direct, technical explanation rather than a vague disclaimer, because it's the single most important limitation of this model.
Yoruba is a tonal language where pitch changes the *meaning* of a word, marked in text through diacritics (tone marks and underdots) that are not optional decoration — they're load-bearing. WazobiaVoice's underlying architecture (see [Architecture](#architecture)) generates speech through an autoregressive transformer predicting discrete tokens one at a time — the same broad approach used by [YarnGPT](https://huggingface.co/saheedniyi/YarnGPT). This was not a hypothesis we left untested: after the model's initial training, we ran a dedicated follow-up training pass using 36+ hours of high-diacritic-quality Yoruba audio, specifically targeting this weakness. Despite following the exact same training methodology that worked for the other four languages, quality did not improve — the model produced mispronunciations, unstable prosody, and in some cases outright hallucinated output. In short, the result did not come out as expected: throwing more hours of clean, well-diacritized Yoruba data at the problem did not translate into better Yoruba output, and in some cases made outputs less predictable rather than more. This is the main reason we don't treat "just fine-tune on more Yoruba data" as a real fix here — the data volume and quality were already there for this pass, and it still didn't move the needle.
This points to an architectural ceiling rather than a data problem: token-based autoregressive TTS appears to structurally struggle with representing tone the way Yoruba requires. This is consistent with what we observe in YarnGPT's own results, and with why architectures built specifically to solve this — like **VITS**, used by [MMS-TTS](https://huggingface.co/facebook/mms-tts) — get meaningfully better Yoruba results by design, not luck. We're acting on this finding directly — see [Ongoing Research](#ongoing-research-vits-for-yoruba).
### Recommendations
Users building on WazobiaVoice for Yoruba-language use cases should test thoroughly against their own target vocabulary before production use, and should not assume uniform quality across all Yoruba text the way they reasonably could for the model's other four languages. Feedback, real-world testing reports, and contributions of additional high-quality diacritic-marked Yoruba training data are welcomed.
## Prohibited Uses
In line with responsible AI practice, WazobiaVoice must not be used to:
- Clone or impersonate a real, identifiable individual's voice without that person's explicit, informed consent
- Generate speech for fraud, scams, impersonation, or deceptive purposes of any kind
- Produce political disinformation, fabricated statements attributed to real public figures, or election-related deception
- Generate hateful, harassing, or discriminatory content targeting any individual or group
- Generate any content sexualizing or otherwise harming minors
- Violate the license terms of any underlying dataset, architecture, or dependency this model is built on
This is not a hypothetical list — it reflects real decisions made during this model's development. A planned persona built from a real, identifiable public figure's voice was deliberately excluded during development specifically because informed consent wasn't in place, even though the underlying audio itself was otherwise usable.
## License
WazobiaVoice is released under a custom **Axiveri Research License** — free to use for **research and non-commercial purposes only**. Full terms are in [`LICENSE.md`](LICENSE.md).
WazobiaVoice was fine-tuned on Axiveri's own curated training data, and Axiveri retains the rights to license the model. **Any commercial use — including integrating the model into a SaaS product, application, or any tool that collects money from users in any way — requires contacting the developer first to obtain a separate commercial license.**
To request a commercial license, contact:
- Email: **ememzyvisuals@gmail.com**
This license covers the WazobiaVoice model weights and checkpoints in this repository. The underlying chatterbox architecture and the `wazobiavoice-TTS` inference code (see [How to Use](#how-to-use)) remain under their own respective licenses (MIT) — see [Credits & References](#credits--references).
## Training
WazobiaVoice was fine-tuned via LoRA on top of chatterbox's multilingual base, across **7 epochs**, on a diverse collection of publicly available and properly licensed Nigerian-language speech data — spanning multiple independent sources per language to ensure genuine multi-speaker diversity rather than single-speaker bias. Hausa training data is meaningfully strengthened by **wazobia-tts-cc**, an original Axiveri-curated dataset of high-quality political, government, and civic-affairs Hausa speech sourced from established Hausa radio stations and podcasts.
Training ran across multiple independent, interruptible cloud training sessions rather than one continuous run — the pipeline was built with automatic checkpoint-resume specifically so training could survive session interruptions and infrastructure limits without losing progress, picking back up exactly where it left off each time.
A dedicated Yoruba-focused continuation pass (see [The Yoruba Tonal Problem](#the-yoruba-tonal-problem)) used an additional 36+ hours of high-diacritic-quality Yoruba-only audio, isolated from the other four languages to concentrate the model's full capacity on Yoruba specifically.
## Ongoing Research: VITS for Yoruba
The architecture family underlying WazobiaVoice (and YarnGPT, and most public token-based Nigerian TTS efforts) has a real, demonstrated ceiling on Yoruba tonal accuracy. The architectures that *have* solved this — **VITS**, as used by Meta's [MMS-TTS](https://huggingface.co/facebook/mms-tts) — are released under non-commercial licenses, unusable for any real product or startup.
Axiveri is actively researching and training a **VITS-based Yoruba TTS model from scratch**, using only commercially-licensed data and open training code, with the explicit goal of closing this gap for African developers and startups without the non-commercial restriction blocking every other working solution to this problem. This work is ongoing.
**This research is compute-intensive and self-funded.** Individual sponsors, partnerships, and donations that would help bring this to completion faster are genuinely welcomed:
- Email: **axiveriltd@gmail.com**
- Twitter/X: **[@ememzyvisuals](https://twitter.com/ememzyvisuals)** / **[@Axiveri](https://twitter.com/Axiveri)**
## Future Improvements
- Resolve the Yoruba tonal accuracy gap via the VITS research track above
- Expand inbuilt persona coverage (additional regional accents, additional age ranges per language)
- Public inference API / hosted endpoint
- Expanded voice-cloning documentation and fine-tuning guides via the [GitHub fork](https://github.com/Ememzyvisuals/wazobiavoice-TTS)
## Citation
#### BibTeX:
```
@software{wazobiavoice2026,
author = {Ariyo, Emmanuel},
title = {WazobiaVoice: Nigerian Multilingual Text-to-Speech},
year = {2026},
url = {https://github.com/Ememzyvisuals/wazobiavoice-TTS},
note = {Built under Axiveri. Fine-tuned from Chatterbox (Resemble AI).}
}
```
#### APA:
```
Ariyo, E. (2026). WazobiaVoice: Nigerian Multilingual Text-to-Speech. Built under Axiveri. https://github.com/Ememzyvisuals/wazobiavoice-TTS
```
## Credits & References
- [chatterbox](https://github.com/resemble-ai/chatterbox) — Resemble AI, base multilingual architecture, MIT License
- [chatterbox-finetuning-multilingual](https://github.com/Ahmed-Ezzat20/chatterbox-finetuning-multilingual) — fine-tuning framework used for training
- [YarnGPT](https://huggingface.co/saheedniyi/YarnGPT) — Saheed Azeez, referenced throughout this card for architectural comparison
- [MMS-TTS](https://huggingface.co/facebook/mms-tts) — Meta, referenced for VITS architecture comparison
- [Ememzyvisuals/wazobiavoice-TTS](https://github.com/Ememzyvisuals/wazobiavoice-TTS) — patched fork for direct model usage, MIT License
- [Ememzyvisuals/ememediaforge](https://github.com/Ememzyvisuals/ememediaforge) — used to generate this model card's demo video
Built and maintained by **Emmanuel Ariyo (Ememzyvisuals)**, an independent Machine Learning and AI Engineer, under **Axiveri** — an initiative building the African AI models that African companies, startups, developers, and researchers can build on.
- GitHub: [Ememzyvisuals](https://github.com/Ememzyvisuals)
- Contact: <ememzyvisuals@gmail.com>
- Portfolio: [https://ememzyvisuals.vercel.app](https://ememzyvisuals.vercel.app)
|