Views
No views yet
| File | Size | Purpose |
|---|---|---|
moss_tts_prefill.onnx | 478 KB | global LM, full-context prefill |
moss_tts_decode_step.onnx | 489 KB | global LM, autoregressive single step (KV cache) |
moss_tts_local_fixed_sampled_frame.onnx | 744 KB | local LM with baked-in sampling (top-p / top-k / rep penalty) |
moss_tts_global_shared_int8.data | 111 MB | int8 weights shared by both prefill + decode_step |
moss_tts_local_fixed_sampled_frame_int8.data | 85 MB | int8 weights for the local sampler |
tokenizer.model | 471 KB | SentencePiece (unchanged from upstream) |
browser_poc_manifest.json | 503 KB | prompt templates + 18 builtin voices (preencoded RVQ codes) |
tts_browser_onnx_meta.json | 4 KB | I/O metadata (op names, KV layout) |
| Total | ~198 MB | (vs 640 MB upstream fp32 LM dir) |
| Metric | fp32 (upstream) | int8 (this) | Δ |
|---|---|---|---|
| Download | 640 MB (LM) | ~196 MB (LM) | −69 % |
| RTF on x86 4-thread CPU | 0.35 | 0.25 | −29 % |
| RTF on Snapdragon 8 Gen 3 | 0.60 | 0.36 | −40 % |
| Time-to-first-audio (S8G3, streaming) | n/a | 123 ms warm | new |
| Spectral envelope MAE vs fp32 | 0 dB (self) | ~2 dB above fp32 noise floor | acceptable |
1from onnxruntime import InferenceSession
2from huggingface_hub import snapshot_download
3
4# Download both repos (LM int8 + upstream codec fp32)
5lm_dir = snapshot_download("REALBITS/MOSS-TTS-Nano-100M-ONNX-int8")
6codec_dir = snapshot_download("OpenMOSS-Team/MOSS-Audio-Tokenizer-Nano-ONNX",
7 allow_patterns=["moss_audio_tokenizer_decode_*",
8 "*.json"])
9
10# Then drive prefill → loop {sampler → decode_step} → codec.decode_full
11# (or codec.decode_step for streaming) per the upstream onnx_tts_runtime.pyonnx_tts_runtime.py.
Point it at the two snapshot dirs (LM + codec) and synthesis runs unchanged.decode_step.onnx (49 named state tensors)onnxruntime.quantization.quantize_dynamic with
use_external_data_format=True, then a small post-processing step that
hashes the resulting .data files, identifies the byte-identical pair
(prefill + decode_step share the underlying global transformer weights),
keeps one copy as moss_tts_global_shared_int8.data, and rewrites both
graphs' external_data location attributes._dryrun/09_quantize_shared.py
in the parent project.browser_poc_manifest.json (preencoded RVQ codes)
or fetch the codec encoder from upstream and encode your own reference
audio to RVQ codes first.