Views
No views yet
as2s — a CPU-only
Rust voice-clone TTS CLI.sivasub987/Qwen3-TTS-0.6B-ONNX-INT8) ship ONNX
graphs that work for the encoder/decoder side modules but break in
talker_decode — the autoregressive sampler never reaches EOS=2150
and emits noise + reference-leak audio.torch.onnx.export(..., dynamo=True) with a small set of monkey-patches
applied to the upstream transformers.MimiModel and Qwen3 talker code
(see NOTICE). The result has verified PyTorch parity for all 9
components (≤ 7e-5 max abs diff for floating outputs, 100% match for the
tokenizer encoder's integer codes) and verified end-to-end voice clone
(reaches EOS cleanly, generates natural Japanese audio).qwen3-tts-12hz-1.7b-base-onnx/
├── codec_embed_q.onnx 25 MB embedding lookup (talker codec head)
├── code_predictor_embed_q.onnx 251 MB code-group token embeddings
├── code_predictor_q.onnx + .data 449 MB multi-token-prediction head
├── speaker_encoder_q.onnx + .data 48 MB mel → speaker embedding
├── talker_prefill_q.onnx + .data 5.66 GB 28-layer transformer, no past KV
├── talker_decode_q.onnx + .data 5.66 GB 28-layer transformer, with past KV
├── text_project_q.onnx 1.28 GB text token → talker hidden
├── tokenizer12hz_decode_q.onnx + .data 456 MB Mimi codec → 24 kHz audio
├── tokenizer12hz_encode_q.onnx + .data 224 MB 24 kHz audio → Mimi codes
├── config.json Qwen3-TTS config
├── tokenizer_config.json
├── vocab.json
├── merges.txt
├── LICENSE Apache-2.0
├── NOTICE attribution + modification log
└── README.md this file<name>.onnx for the
graph, <name>.onnx.data for the weight tensors).as2s (the intended consumer)1as2s download # fetches this repo
2as2s voice add --id myvoice \
3 --reference reference.wav \
4 --reference-text "..." \
5 --i-have-consent
6as2s synth --voice myvoice --text "..." -o out.wavas2s-qwen3/src/clone/.past_key_<i> / past_value_<i> tensors instead
of HuggingFace's opaque DynamicCache.onnxruntime.quantization.quantize_dynamic)
on the talker introduces enough logit drift that the EOS token loses
its sampling weight at the natural sentence boundary, causing the model
to keep generating until max_steps is hit. Quantizing only the
peripheral models produces a 4 GB bundle but the same EOS issue
remains since the talker is the bottleneck.tools/export_onnx/
of the as2s repo. Requires PyTorch >= 2.11 and the upstream
Qwen3-TTS-JP Python package (see its README for environment setup).1$PYTHON tools/export_onnx/export.py --out-dir exports/qwen3-tts-onnx-fp32
2$PYTHON tools/export_onnx/validate.py --out-dir exports/qwen3-tts-onnx-fp32LICENSE and NOTICE for details and the full list of modifications.as2s CLI enforces this with a mandatory --i-have-consent flag at
voice registration time; downstream consumers of this ONNX bundle should
implement equivalent consent gating in their own pipelines.