uzbek-tts/narrator

Uzbek TTS · Chatterbox fine-tune

Uzbek text,
natural voice.

A text-to-speech model fine-tuned on ~10 hours of a single audiobook narrator. It splits long text into sentences on its own and keeps natural pauses and intonation. It can also borrow another voice from a ~10-second recording.

The audio in the main sample is raw model output, with no editing.

Main sample

0:00—
WAV

The highlighted word follows playback (approximate). Click any word to jump there.

of data
~10h
voices
1
sample rate
24kHz
samples
6
01

All samples

From a greeting to a dialogue — texts in different tones. Click a row to open it in the player above.

Keyboard
Space K
play / pause
J L
back / forward 5 seconds
N P
next / previous sample
V
switch voice
← →
1 second, when the waveform is focused
↑ ↓
move through the list
    02

    Results

    Every number can be checked: the texts and audio are on this page, and the evaluation script is in the repo. The evaluation is still small — 6 sentences, 105 words — so treat these numbers as a direction, not a final benchmark.

    Intelligibility — round-trip WER / CER

    Each sample was transcribed back with an Uzbek ASR model (rustam1221/uzbek-asr-gigaam, 220M + KenLM) and compared with the original text. Both sides are lowercased, apostrophes are canonicalized and punctuation is stripped.

    VoiceWordsWERCEROnly error
    Narrator1051.0%0.1%«esar» → «esa»
    Female voice1051.0%0.7%sentence-final «edim» swallowed

    Timbre similarity

    Cosine similarity from Chatterbox's own voice encoder (1.00 = the same voice). The female voice is cloned without retraining, from a ~12-second recording.

    Synthesisvs narrator referencevs female reference
    Narrator0.950.60
    Female voice0.620.94
    The two references0.63

    The narrator's timbre does not leak into the female voice: its similarity to the narrator (0.62) is at the level of two different people (0.63).

    Speaking rate and pitch

    AudioRate, chars/sF0 medianPitch range
    Narrator reference—102 Hz—
    Narrator synthesis14.0101 Hz7.2 st
    Female reference14.7251 Hz—
    Female synthesis16.8236 Hz7.6 st

    st — semitones, 10th–90th percentile range. The female voice speaks 14% faster than the original recording: the model learned the narrator's rhythm, and the cloned timbre speeds it up. This is the biggest open issue — slowing it down with cfg_weight 0.3 is being tested.

    03

    How it works

    Five steps from text to sound. Only the text model (T3) was retrained for Uzbek; everything else is stock Chatterbox.

    1. 1

      Normalization

      Text is cleaned, numbers and abbreviations are spelled out, punctuation is normalized.

    2. 2

      Chunking

      Long text is split into short chunks at sentence boundaries.

    3. 3

      T3 · text → tokens

      A Llama-based model turns each chunk into speech tokens. The narrator's voice is learned here, with LoRA.

    4. 4

      S3Gen · tokens → audio

      A 24 kHz waveform is generated from the tokens; the timbre comes from a reference recording.

    5. 5

      Post-processing

      Extra silence and breath tails are trimmed, and chunks are joined with natural pauses.

    04

    Data

    A ~12-hour audiobook read by one narrator was turned into a training set automatically — not a single transcript was written by hand.

    clips
    5,005
    hours
    10.07
    words
    65,731
    unique words
    16,954

    Preparation

    1. Segmentation. Silero VAD cuts the audio at sentence boundaries into 1.5–12 s clips, 24 kHz.
    2. Transcription. Each clip is transcribed, with punctuation, by an Uzbek ASR model (GigaAM 220M + KenLM).
    3. Filtering. Ads, clipped audio and clips with an implausible speaking rate are dropped.
    4. Split. 4,955 clips for training; 50 held out for evaluation and never seen in training.

    Rejected

    ReasonClips
    Ads or misrecognized42
    Clipping8
    Implausible rate5
    Total (of 5,060)55 · 1.1%

    Clip length

    • 0–2 s28
    • 2–4 s441
    • 4–6 s928
    • 6–8 s1,429
    • 8–10 s2,014
    • 10–12 s165

    Median 7.6 s, mean 7.2 s, about 13 words per clip.

    Because the transcripts also come from ASR, they contain errors — for example, the book's «teleekran» was often heard as «Telegram». The model may learn those errors too; hand-checked transcripts are a next step.

    05

    Training

    Only T3, the part that turns text into speech tokens, was retrained; the waveform generator (S3Gen) and the voice encoder are frozen upstream Chatterbox weights.

    Settings

    Base model
    ResembleAI Chatterbox (T3 + S3Gen + VE)
    Trained modules
    T3 only; S3Gen and VE frozen
    Method
    LoRA r=128, α=256 on attention and MLP layers; text embedding and output head fully trained
    Tokenizer
    Uzbek, 2,454 tokens
    Optimization
    lr 1e-4, effective batch 32, fp16
    Hardware
    Google Colab T4 (16 GB)
    Steps
    587 / 770 (5 epochs planned)
    Checkpoint
    step 400 (~2.6 epochs), LoRA merged into the weights

    Loss

    StepEpochLossLR
    1541.06.158.0e-5
    3082.05.236.0e-5
    400 · shipped2.6—4.8e-5
    587 · session ended3.8——

    LR decays linearly from 1e-4 to step 770. Loss was logged at the end of each epoch; no separate validation set was used during training.

    What we learned

    • 10 hours is enough for one voice. After 400 LoRA steps, the ASR model understands the output with a 1% word error rate.
    • Free GPUs are a constraint. The Colab session ended at step 587/770, and with Drive full the latest saved copy was step 400. These results come from a model that has not converged.
    • The data was transcribed by ASR. The automatic route is cheap — only 55 of 5,060 clips were dropped — but ASR errors end up in the text too.
    • Timbre transfers, rhythm doesn't. A 12-second recording gives the voice colour with 0.94 similarity, but pace and stress stay the narrator's.
    06

    Synthesis speed

    RTF is synthesis time divided by audio duration; above 1 means slower than real time. Measured while generating the 12 samples on this page.

    DeviceAudioSynthesisMean RTFBest
    Apple M4, 16 GB (MPS)95.9 s736 s7.7×2.7×
    CUDA GPUnot measured yet

    On a Mac the result depends heavily on memory pressure: the model takes ~5 GB, and next to another heavy app RTF drops to 20×. The service is meant to run on a CUDA server in production.

    07

    Using the API

    Synthesis runs through a queue: a request returns a job_id immediately, and every finished segment is downloaded as its own WAV. Write to us for an API key.

    08

    Files and versions

    Layout

    models/
    ├── t3_finetuned_merged.safetensors  2.0 GB  Uzbek T3, LoRA merged
    ├── s3gen.safetensors                1.0 GB  upstream Chatterbox
    ├── ve.safetensors                   5.4 MB  voice encoder
    ├── tokenizer.json                    72 KB  Uzbek, 2,454 tokens
    ├── conds.pt                         108 KB  default conditioning
    └── voices/                          reference recordings

    Weights are never downloaded at runtime — the service reads them from a local folder.

    Versions

    VersionWeightsStatus
    v0.1step 400, 2.6 epochscurrent · 2026-10-17
    v0.2full 770 stepsplanned
    09

    Limitations

    • The model was trained on the narrator only; the female voice is cloned without retraining and speaks 14% faster.
    • A short sentence-final word is sometimes swallowed (1 of 12 samples).
    • Numbers followed by a suffix (e.g. a time plus «da») are not yet read correctly.
    • Training did not finish (587 / 770 steps; step 400 is shipped).
    • Evaluation covers only 6 sentences so far; there is no large benchmark yet.
    10

    Next steps

    • Round-trip WER on the 50 held-out sentences.
    • Train to step 770 and compare.
    • Slow down the female voice (cfg_weight 0.3).
    • Fix normalization of numbers with suffixes.
    • Measure speed on a CUDA server.
    11

    Citation

    BibTeX
    @misc{uzbek_tts_narrator,
      title  = {Uzbek TTS: Chatterbox T3 LoRA fine-tune on a single narrator},
      author = {abbos2332},
      year   = {2026},
      url    = {https://huggingface.co/spaces/abbos2332/uzbek-tts-demo}
    }

    Contact

    Want to work with the model?

    Write about an API key, voicing your own text, or a partnership.