Views
No views yet
Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign focused on expressive prompt following — emotion, pace, and affect controllability under free-form English voice descriptions. The model trades a small amount of intelligibility headroom for a substantially more expressive output: prompts that ask for sad, whispered, projected, sarcastic, bedtime-storyteller, etc. are noticeably closer to what the description asks for than the base model produces.speech_tokenizer/), the tokenizer, and all configs. No other HF repo needs to be downloaded at inference time.Qwen3TTSForConditionalGeneration model class with transformers):pip install qwen-tts transformers torch soundfile1from qwen_tts import Qwen3TTSModel
2import soundfile as sf
3
4wrap = Qwen3TTSModel.from_pretrained("macminix/qwen3_voice_design_t5")
5
6wavs, sr = wrap.generate_voice_design(
7 text="Come and look at this, you are not going to believe it.",
8 instruct="A male speaker delivers his happy speech at a moderate pace with standard energy.",
9 language="english",
10 temperature=0.9, top_k=50, top_p=1.0,
11 repetition_penalty=1.05, max_new_tokens=600,
12)
13sf.write("out.wav", wavs[0], sr)example_inference.py.instruct prompt formatinstruct field is free-form English describing the voice. The training distribution covers:A male speaker delivers his happy speech at a moderate pace with standard energy.
A female voice speaks softly with a sad tone, low energy, almost whispering.
An older male narrator reads a bedtime story slowly, with warmth.
A high-pitched announcer projects an exciting headline at a fast pace.inputs_embeds is built by the exact element-wise sum of text-track and codec-track embeddings used by Qwen3TTSForConditionalGeneration.generate's VoiceDesign path — including the 5-position English think-prefix on the codec track. This matches inference exactly, instead of approximating it with a chat-templated prompt + boundary switch.F.cross_entropy(logits[:, :-1], codec_0_labels[:, 1:], ignore_index=-100). The labels= argument is never passed into the wrapped forward, avoiding the double-shift that occurs when PEFT's wrapped CausalLMLoss adds its own internal shift on top of the collator's.2.0e-5, cosine schedule, with min_lr_ratio=0.2 so the late-training LR stays high enough to keep learning rather than plateauing.weight=0.0) when the Code Predictor isn't part of the LoRA scope — this combination is known to corrupt training.r=16, α=32, dropout=0.05 on the Talker's q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj projections only. The Code Predictor and audio codec are frozen end-to-end. Training data combines EARS (clean multi-speaker reads with style descriptors) and Expresso (high-quality expressive performances at 48 kHz, downsampled to 24 kHz to match the base's native rate). Captions are free-form natural-language prose, one canonical caption per clip — no templated descriptions.sad_male, sad_female, and fear_female prompts can render with the wrong-gender timbre. Root cause: the training corpora's emotion-axis coverage is concentrated on a handful of speakers, so strongly emotional descriptions act partially as speaker-identity cues. Mitigation in the prompt: lead with the gender ("A male speaker, sad and quiet, …") rather than the emotion.fear_male_normal_slow and similar prompts produce flatter prosody than the base. Trade-off accepted in exchange for the broader expressive lift.Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign): Apache 2.0.qwen-tts on PyPIylacombe/expresso