Downloads · 30 days
14
23% of all-time downloads
Stilesterk2598/omnivoice-singing
omnivoice-singing is a text-to-speech model from Stilesterk2598. Use it when you need text read aloud. It is set up for transformers. The card lists the license as apache-2.0.
A finetune of k2-fsa/OmniVoice that adds:
Downloads · 30 days
14
23% of all-time downloads
All-time downloads
60
Public
Parameters
613M
3.3 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors3.3 GB · 100%
How the weights are stored.
F32613M · 100%
From the Hugging Face model README
A finetune of k2-fsa/OmniVoice that adds:
[singing] tag — sung speech / nursery-style melodic vocals[happy], [sad], [angry], [excited], [calm], [nervous], [whisper][singing] [happy] ... or [singing] [sad] ...Original OmniVoice capabilities (multilingual zero-shot TTS, voice cloning, voice design, 600+ languages) are preserved — the base speech head was protected during finetuning with a continuity mix of plain speech and singing.
This checkpoint is fully compatible with the upstream k2-fsa/OmniVoice code — same architecture (Qwen3-0.6B LM + HiggsAudioV2 audio tokenizer at 24 kHz), same inference API. Replace the model id:
from omnivoice.models.omnivoice import OmniVoice
model = OmniVoice.from_pretrained("ModelsLab/omnivoice-singing").to("cuda").eval()
# Normal speech (unchanged behavior)
audios = model.generate(
text="The quick brown fox jumps over the lazy dog.",
language="English",
)
# Singing
audios = model.generate(
text="[singing] Twinkle twinkle little star, how I wonder what you are.",
language="English",
)
# Emotional speech
audios = model.generate(
text="[happy] I just got the best news of my entire year!",
language="English",
)
# Combined
audios = model.generate(
text="[singing] [sad] Quiet rain falls on the stone, memories of days now gone.",
language="English",
)
import soundfile as sf
sf.write("out.wav", audios[0], model.sampling_rate)
CLI works the same way:
omnivoice-infer --model ModelsLab/omnivoice-singing \
--text "[happy] Hello there, how wonderful to see you today!" \
--language English \
--output out.wav
| Tag | Source data | Strength |
|---|---|---|
[singing] | GTSinger English (6,755 clips, ~8 h) | strong |
[happy] | CREMA-D + RAVDESS + Expresso (~2900 clips) | strong |
[sad] | CREMA-D + RAVDESS + Expresso (~2900 clips) | strong |
[angry] | CREMA-D + RAVDESS (~1500 clips) | strong |
[nervous] | CREMA-D fear + RAVDESS fearful (~1400 clips) | strong |
[whisper] | Expresso whisper (~1500 clips) | strong |
[calm] | RAVDESS calm (~190 clips) | weak — limited data |
[excited] | RAVDESS surprised (~190 clips) | weak — limited data |
Guidance scale of 3.0 (up from default 2.0) is recommended to make tag behavior more pronounced:
audios = model.generate(
text="[happy] Welcome!",
language="English",
guidance_scale=3.0,
)
ref_audio / ref_text args)instruct parameter (pitch / gender / age / accent attributes)speed / duration args)[laughter], [sigh], etc.)Two-stage finetune from k2-fsa/OmniVoice:
Stage 1 — Singing (2500 steps):
[singing] {lyrics})Stage 2 — Emotion (2500 steps, forked from singing/checkpoint-2500):
This published checkpoint is the final emotion step 2500, which subjectively produces the cleanest emotional tag behavior while preserving speech/singing quality.
[calm] and [excited] had only ~190 training samples each (only one dataset contributed) — behavior is weaker than the other emotion tags.Apache 2.0. Downstream users must also comply with the individual licenses of the training datasets: