--- license: apache-2.0 library_name: mlx tags: - text-to-speech - voice-cloning - mlx - omnivoice pipeline_tag: text-to-speech --- # OmniVoice-MLX-int8 8-bit quantized [MLX](https://github.com/ml-explore/mlx) conversion of [k2-fsa/OmniVoice](https://github.com/k2-fsa/OmniVoice) — a single-stage, non-autoregressive discrete-diffusion text-to-speech model with a Qwen3 backbone and broad multilingual coverage (600+ languages). For Apple Silicon, via the `speech-swift` runtime. ## Contents | File | Precision | Size | |---|---|---| | `model.safetensors` | int8 backbone (group 64, 8-bit) | ~689 MB | | `audio_tokenizer/model.safetensors` | fp16 codec (Higgs-audio v2) | ~403 MB | | `tokenizer.json`, `config.json`, … | — | — | The diffusion backbone is quantized (it dominates latency — 32 forward passes per clip); the codec stays fp16 since it runs once and is already exact there. ## Why int8 The backbone is memory-bandwidth bound at these sequence lengths, so 8-bit weights cut latency with no audible loss. On an M5 Pro: **RTF ≈ 0.18** (≈ 5.5× faster than real-time), versus ≈ 0.25 at fp32, and the ASR roundtrip stays at **0% WER**. Precision tiers: | Variant | Backbone | Total | Use | |---|---|---|---| | `OmniVoice-MLX-fp16` | fp16 | ~1.5 GB | balanced | | **`OmniVoice-MLX-int8`** | **int8** | **~1.0 GB** | **fastest / smallest** | ## Usage Loaded by the `OmniVoiceTTS` module in `speech-swift`. The `quantization` block in `config.json` (`group_size: 64`, `bits: 8`) tells the loader to swap the Linear/Embedding layers to their quantized form before loading the weights. ## License Apache-2.0, following the upstream model.