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 to o' β€” the form used in training.
  • Write numbers as words. inference.py does 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
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for abbos2332/uzbek-tts

Adapter
(22)
this model