CoolFace
Modelpublic

OpenVoiceOS/phoonnx-qwen3-tts

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes21downloads
Model Card

phoonnx-qwen3-tts

ONNX export of Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice for phoonnx. The weights, the architecture and the nine timbres are the work of the Alibaba Qwen team; this repository only holds the graphs in ONNX form, converted with the script in scripts/conversion/qwen3tts/.

Graphs

FileWhat it does
talker.onnx28-layer talker, one KV-cached step per 80 ms frame
text_embed.onnxtext ids to projected text hidden states
codec_embed.onnxtalker codec ids to hidden states
code_predictor_prefill.onnxtalker hidden plus code group 0, gives group 1
code_predictor_step.onnxcode group n gives code group n+1
sub_codec_embed.onnxcode-group token to its group's embedding
codec_decoder.onnx16 code groups per frame to 24 kHz audio
tokenizer.jsonthe model's own Qwen2 subword BPE

All graphs are float32, opset 17 (18 for the codec decoder).

Parity

Checked against the upstream PyTorch model on CPU with greedy decoding:

MeasurementResult
Prompt embeddings, max abs diff2.4e-07
Talker prefill logits, max abs diff2.3e-05
Talker decode logits, max abs diff5.0e-05
Greedy token agreement, 52 frames x 16 groups100 % (832/832)
Codec decoder waveform, max abs diff9.9e-07

Voices

Nine timbres: vivian, serena, uncle_fu, dylan (Beijing), eric (Sichuan), ryan, aiden, ono_anna, sohee. Ten languages: Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian.

Use

python
from phoonnx.model_manager import TTSModelManager

manager = TTSModelManager()
manager.merge_default_voices()
voice = manager.voices["qwen3tts/ryan/en"].load()
for chunk in voice.synthesize("The quick brown fox jumps over the lazy dog."):
    ...  # chunk.audio_float_array

Licence

Apache-2.0, the licence of the original model. Cite the Qwen3-TTS technical report (arXiv 2601.15621) when you use these weights.