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.

OmniVoice-BG

A Bulgarian text-to-speech model, fine-tuned from k2-fsa/OmniVoice on Bulgarian audiobook narration. It produces natural, native-sounding Bulgarian speech, removing the foreign accent that stock OmniVoice has on Bulgarian.

This is the fine-tuned model weights only. It is one of three orthogonal pillars of the full OmniVoice-BG system — the other two (a lexical stress front-end and deterministic fixed-voice cloning) live in the OmniVoice-BG codebase and are applied at serving time, not baked into the weights. For correctly-stressed, consistent narration you want all three together.

Why it exists

Stock OmniVoice can speak Bulgarian (it is among its 600+ languages), but for narration three things were wrong out of the box:

  1. A non-native "foreign" accent on the synthesized Bulgarian. → fixed by this fine-tuned model
  2. Wrong lexical stress (e.g. БУтона instead of буТОна). → fixed by the stress front-end (serving-side)
  3. A different voice every clip (voice design is non-deterministic). → fixed by deterministic fixed-voice cloning (serving-side)

Model details

  • Architecture: OmniVoice — a diffusion/mask-prediction language model that predicts Higgs Audio V2 codec tokens (8 codebooks @ 24 kHz). Backbone is Qwen/Qwen3-0.6B.
  • Base model: k2-fsa/OmniVoice (Apache-2.0)
  • Fine-tuned on: raditotev/bg-audiobooks-tts (Bulgarian audiobook narration)
  • Sample rate: 24 kHz mono
  • Size: ~2.3 GB (model.safetensors, float32)

Training configuration

Setting Value
init from k2-fsa/OmniVoice
steps 3000
learning rate 1e-5, cosine, 3% warmup
batch batch_tokens=1024, grad_accum=8
precision bf16 mixed
attention SDPA
weight decay 0.01
seed 42

Tuned to fine-tune on a single 16 GB GPU. See BG_FINETUNE_PLAN.md in the repo for the full pipeline (data prep → tokenize → train → A/B checkpoint selection).

Training metrics

Full TensorBoard logs are in tensorboard/ (rendered in the Metrics tab). Run summary over 3000 steps / 11 epochs:

  • train/loss: 4.44 (step 25) → 3.99 (step 3000), min 3.88
  • eval/loss: 4.07 (step 250) → 3.87 (step 2750, best) → 3.96 (step 3000)
  • grad_norm: stable ~2.0–2.5 throughout; throughput: ~1.3 steps/sec

The released weights are the step-2750 checkpoint — the lowest validation loss, selected by eval loss and confirmed by A/B listening (eval_bg_ab.py).

eval step 250 500 1000 1250 1750 2250 2750 3000
eval/loss 4.07 4.13 4.07 3.92 3.94 3.95 3.87 3.96

Usage

Install the package and run inference with this model as a drop-in replacement for stock OmniVoice:

pip install omnivoice

omnivoice-infer \
    --model preslaff/omnivoice-bg \
    --text "Натиснете бутона, за да започнете." \
    --ref_audio narrator.wav \
    --output out.wav

Or from Python:

from omnivoice import OmniVoice

model = OmniVoice.from_pretrained("preslaff/omnivoice-bg", train=False)
wav = model.generate(
    text="Натиснете бутона, за да започнете.",
    ref_audio="narrator.wav",   # fixed reference voice for consistent cloning
)

For best results, mark Bulgarian lexical stress before passing text to the model (combining vowel + U+0301), and use a fixed reference clip with seeded greedy decoding. The OmniVoice-BG server (omnivoice/cli/serve.py) does both automatically.

License & attribution

Apache-2.0. This is a derivative of OmniVoice by k2-fsa, also Apache-2.0. The base model and architecture are © Xiaomi Corp. Fine-tuned for Bulgarian narration as part of the TrainGen project.

Downloads last month
8
Safetensors
Model size
0.6B params
Tensor type
I64
·
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for preslaff/omnivoice-bg

Finetuned
Qwen/Qwen3-0.6B
Finetuned
k2-fsa/OmniVoice
Finetuned
(42)
this model

Dataset used to train preslaff/omnivoice-bg