Instructions to use abbos2332/uzbek-tts with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Chatterbox
How to use abbos2332/uzbek-tts with Chatterbox:
# pip install chatterbox-tts import torchaudio as ta from chatterbox.tts import ChatterboxTTS model = ChatterboxTTS.from_pretrained(device="cuda") text = "Ezreal and Jinx teamed up with Ahri, Yasuo, and Teemo to take down the enemy's Nexus in an epic late-game pentakill." wav = model.generate(text) ta.save("test-1.wav", wav, model.sr) # If you want to synthesize with a different voice, specify the audio prompt AUDIO_PROMPT_PATH="YOUR_FILE.wav" wav = model.generate(text, audio_prompt_path=AUDIO_PROMPT_PATH) ta.save("test-2.wav", wav, model.sr) - Notebooks
- Google Colab
- Kaggle
Request access to Uzbek TTS (narrator)
This repository is publicly accessible, but you have to accept the conditions to access its files and content.
Access is reviewed and approved manually. The reference voices belong to real people and are shared with their permission. Free for evaluation and non-commercial research; commercial use requires a written agreement β contact abbosfayzullayev202@gmail.com.
Log in or Sign Up to review the conditions and access this model content.
Uzbek TTS β narrator (Chatterbox T3 fine-tune)
Uzbek text-to-speech built on Chatterbox. Only the T3 text-to-speech-token model was fine-tuned (LoRA, merged) on ~10 hours of a single audiobook narrator; S3Gen and the voice encoder are the frozen upstream weights.
Samples, evaluation and training details: https://huggingface.co/spaces/abbos2332/uzbek-tts-demo Commercial use and custom voices: abbosfayzullayev202@gmail.com
Access is gated with manual approval: request access above, then load the files with a Hugging Face token of the approved account.
Files
| File | Size | Role |
|---|---|---|
t3_finetuned_merged.safetensors |
2.0 GB | Uzbek T3, LoRA merged into the weights (v0.2, ~770 steps) |
s3gen.safetensors |
1.0 GB | Upstream speech-token-to-waveform generator (frozen) |
ve.safetensors |
5.4 MB | Upstream voice encoder (frozen) |
tokenizer.json |
72 KB | Uzbek BPE tokenizer, 2,454 tokens |
conds.pt |
108 KB | Default conditioning |
voices/narrator.wav |
9 s | Reference of the trained narrator voice |
voices/female.wav |
12 s | Reference for the cloned female voice |
inference.py |
β | Standalone loader and CLI |
Quick start
pip install chatterbox-tts==0.1.2 huggingface_hub
hf auth login # token of the account that was granted access
hf download abbos2332/uzbek-tts inference.py --local-dir .
python inference.py "Assalomu alaykum! Bugun sizga qiziqarli bir voqeani aytib beraman." -o out.wav
python inference.py --file story.txt -o story.wav # long text is split into sentences
python inference.py "Salom!" -o female.wav --voice female # cloned female voice
python inference.py "Salom!" -o mine.wav --voice my_ref.wav # any clean 10β20 s reference
From Python:
import torchaudio
from inference import UzbekTTS
tts = UzbekTTS.from_hub() # downloads once, then uses the local cache
wav, sr = tts.synthesize("Kitob o'qish odamni boyitadi.", voice="narrator")
torchaudio.save("out.wav", wav, sr)
ChatterboxTTS.from_pretrained / from_local will not load this model as-is: T3 here has a
2,454-token Uzbek vocabulary instead of the stock 704-token one, so it must be built with that
size before the weights are loaded. inference.py does exactly that and nothing else.
Parameters
| Argument | Default | Effect |
|---|---|---|
voice |
narrator |
narrator, female, or a path to a reference WAV |
cfg_weight |
0.5 (female: 0.3) |
Lower = slower, calmer delivery |
exaggeration |
0.5 | Higher = more expressive intonation |
temperature |
0.8 | Sampling randomness |
repetition_penalty |
2.0 | Guards against repeated or stuck tokens |
seed |
42 | Fixed for reproducible output; None for variety |
Input text
- Write in Uzbek Latin script.
oΚ»,oβ,o`are all mapped too'β the form used in training. - Write numbers as words.
inference.pydoes not expand digits; the API service below does, but numbers followed by a suffix (e.g.11 da) are not handled correctly yet. - Long text is split at sentence boundaries into chunks of up to 200 characters, joined with 0.25 s pauses.
- Memory: generation peaks well above the 5 GB of weights on Apple MPS; use a 16 GB+ machine with nothing else heavy running, or a CUDA GPU.
As a service
The same weights run behind an HTTP API (FastAPI, queue-based, one WAV per segment). It adds Uzbek number normalization, VAD-based silence trimming and per-voice presets.
curl -X POST $SERVER/v1/synthesize \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"voice": "chatterbox-default", "items": [{"id": "s1", "text": "Assalomu alaykum!"}]}'
# -> {"job_id": "...", "total": 1}
curl $SERVER/v1/jobs/$JOB_ID -H "Authorization: Bearer $KEY"
curl -o s1.wav $SERVER/v1/jobs/$JOB_ID/items/s1.wav -H "Authorization: Bearer $KEY"
Evaluation
Round-trip: synthesize, transcribe with rustam1221/uzbek-asr-gigaam (220M + KenLM), score against the input. Lowercased, apostrophes canonicalized, punctuation stripped.
Demo sentences β 6 sentences, 105 words per voice. One word is ~1 point of WER here, so the v0.1 β v0.2 difference below is within noise.
| Voice | Version | WER | CER | Similarity to own reference | Rate, chars/s |
|---|---|---|---|---|---|
| Narrator | v0.2 | 1.9% | 0.7% | 0.95 | 14.2 |
| Narrator | v0.1 | 1.0% | 0.1% | 0.95 | 14.0 |
| Female (cloned) | v0.2, cfg_weight 0.3 |
1.9% | 0.7% | 0.94 | 16.4 |
| Female (cloned) | v0.1, cfg_weight 0.5 |
1.0% | 0.7% | 0.94 | 16.8 |
Similarity is cosine similarity from the Chatterbox voice encoder; the two references score 0.63 against each other, and each voice scores ~0.61 against the other β no timbre leakage. The female reference itself speaks at 14.7 chars/s, so the cloned voice still runs ~12% fast.
Held-out sentences β a 50-sentence evaluation on clips never seen in training is in progress; this card will be updated with the result.
Speed on an Apple M4 (MPS, 16 GB), 12 demo clips: RTF 5.7Γ mean, 2.4Γ best. CUDA not measured yet.
Training
| v0.1 | v0.2 (this release) | |
|---|---|---|
| Start | upstream Chatterbox T3 | v0.1 weights (step 400) |
| Steps | 400 (of 587 run) | +370 β ~770 total, β5 epochs |
| Hardware | Google Colab T4, fp16 | Apple M4 (MPS), fp32, ~4 h 50 min |
| Batch | 4 Γ 8 accumulation = 32 | 2 Γ 16 accumulation = 32 |
| LR | 1e-4, linear decay | 4.8e-5 β 0, linear (continues the v0.1 schedule) |
| Loss, end of each epoch | 6.15 β 5.23 | 4.90 β 4.63 |
Both: LoRA r=128, Ξ±=256 on attention + MLP layers; text embedding and output head fully trained; LoRA merged into the weights. Data: 4,955 clips / ~10 h of one narrator at 24 kHz, transcribed automatically (Silero VAD + Uzbek ASR; 55 of 5,060 clips rejected), 50 clips held out.
Limitations
- Trained on one narrator. Cloned voices keep the narrator's rhythm; the female voice runs ~12% fast even at
cfg_weight 0.3. - Some words are pronounced less clearly in v0.2 β e.g. Β«oxiridaΒ» was misheard in both voices.
- Transcripts come from ASR and contain its errors; no hand-checked text yet.
- Output carries the upstream Chatterbox Perth watermark.
Use and consent
The reference voices belong to real people and are used with their permission. Do not use this model to imitate a person without their consent. Base model: Chatterbox by Resemble AI (MIT). These fine-tuned weights are not licensed for redistribution β contact the author for commercial use.
Citation
@misc{uzbek_tts_narrator,
title = {Uzbek TTS: Chatterbox T3 LoRA fine-tune on a single narrator},
author = {abbos2332},
year = {2026},
url = {https://huggingface.co/abbos2332/uzbek-tts}
}
- Downloads last month
- 2
Model tree for abbos2332/uzbek-tts
Base model
ResembleAI/chatterbox