OmniVoice โ€” Azerbaijani

Azerbaijani text-to-speech model fine-tuned from k2-fsa/OmniVoice (Qwen3-0.6B backbone + Higgs Audio V2 codec, 24 kHz output). Supports zero-shot voice cloning from a short reference clip as well as generation without any reference audio.

Installation

pip install omnivoice soundfile

Usage

Load the model

import soundfile as sf
import torch
from omnivoice import OmniVoice

device = "cuda:0" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device != "cpu" else torch.float32

model = OmniVoice.from_pretrained(
    "LocalDoc/omnivoice-azerbaijani",
    device_map=device,
    dtype=dtype,
)

Runs on GPU (fp16) or CPU (fp32); CPU inference works but is noticeably slower.

1. With a reference voice (voice cloning)

Provide a clean 5โ€“15 s reference recording and its exact transcript. The model reproduces the speaker's timbre and speaking style.

audio = model.generate(
    text="Salam, sizษ™ necษ™ kรถmษ™k edษ™ bilษ™rษ™m?",
    ref_audio="ref.wav",
    ref_text="Referans sษ™sin dษ™qiq mษ™tni.",
    language="az",
    num_step=32,
)
sf.write("cloned.wav", audio[0], 24000)

If you synthesize many sentences with the same voice, build the prompt once and reuse it:

prompt = model.create_voice_clone_prompt(
    ref_audio="ref.wav",
    ref_text="Referans sษ™sin dษ™qiq mษ™tni.",
)

sentences = [
    "SifariลŸiniz qษ™bul olundu.",
    "Kartฤฑnฤฑz sabah hazฤฑr olacaq.",
]
audios = model.generate(
    text=sentences,
    voice_clone_prompt=prompt,
    language="az",
    num_step=32,
)
for i, a in enumerate(audios):
    sf.write(f"cloned_{i}.wav", a, 24000)

2. Without a reference voice

Auto voice โ€” pass only the text; the model picks a voice itself:

audio = model.generate(
    text="Bu gรผn hava gรผnษ™ลŸli olacaq.",
    language="az",
    num_step=32,
)
sf.write("auto.wav", audio[0], 24000)

Voice design โ€” describe the desired voice with instruct (comma-separated attributes such as male / female, young adult / middle-aged / elderly, low pitch / high pitch, whisper):

audio = model.generate(
    text="Bu gรผn hava gรผnษ™ลŸli olacaq.",
    instruct="female, young adult, moderate pitch",
    language="az",
    num_step=32,
)
sf.write("designed.wav", audio[0], 24000)

Voice design comes from the base OmniVoice model; for a stable, consistent voice across many utterances, voice cloning from a reference is recommended.

Tips

  • Write numbers, dates and abbreviations as words: the model expects normalized text (e.g. iyirmi beลŸ instead of 25).
  • num_step trades speed for quality (32 is a good default; 16 is faster).
  • Use speed= (e.g. 0.9, 1.1) or duration= (seconds) to control pacing.

Limitations

  • Numbers, dates and abbreviations must be written out as words.
  • Voice cloning quality depends on the reference: use clean 5โ€“15 s audio with an exact transcript.
  • Without a reference, the voice may vary from call to call.

License

The base OmniVoice weights are released under CC BY-NC 4.0, so this fine-tune is non-commercial.

Downloads last month
77
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 LocalDoc/omnivoice-azerbaijani

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