Ming-3.0-tts-0.5B — MLX 8-bit
Converted locally from inclusionAI/Ming-3.0-tts-0.5B, revision 8d66b70a00f05ad183fa8a863b4ce609fc83cbc0, using the native dense implementation in MLX Audio 0.6.2. This is a new conversion of the original weights, not a re-upload of another quantized checkpoint.
Affine 8-bit, group size 64. Eligible layers in the Qwen backbone, audio VAE, flow-matching head, aggregator, speaker projection and stop head are quantized. 646 modules are quantized; 534 unquantized tensors were verified byte-for-byte against the BF16 export. Some tensors remain floating point. See quantization-audit.json for the exact module list.
Weight file: 1.573 GB, versus 2.959 GB BF16. Output sample rate: 44,100 Hz. MIT license, inherited from inclusionAI.
Install and run
conda create -n ming-mlx python=3.11 pip -y
conda activate ming-mlx
pip install "mlx-audio==0.6.2"
import mlx.core as mx
import numpy as np
from mlx_audio.tts.utils import load_model
from mlx_audio.audio_io import write
model = load_model("groxaxo/Ming-3.0-tts-0.5B-MLX-8bit", strict=True)
mx.random.seed(42)
result = next(model.generate(
text="Hello, this is the portable eight bit Ming speech model.",
voice="US_Emma", raw_text=True, max_tokens=200,
))
mx.eval(result.audio)
write("sample.wav", np.array(result.audio), result.sample_rate, format="wav")
Spanish reference conditioning:
result = next(model.generate(
text="Mañana voy a preparar café y revisar el proyecto con tranquilidad.",
lang_code="es", ref_audio="reference.wav",
ref_text="Exact transcript of reference.wav.",
raw_text=True, max_tokens=300,
# Optional: spk_emb=your_precomputed_192_value_embedding,
))
Reference recordings and speaker embeddings are user-supplied and are not included. MLX Audio's dense implementation does not automatically extract CAM++ embeddings; the bilingual validation supplied one computed separately with the original CAM++ ONNX encoder. Synthesis after that extraction used MLX without PyTorch or ONNX Runtime.
Local validation
Apple M5, 24 GiB unified memory, macOS 27.0.1. Five short reference-conditioned phrases per language, same text/reference/seed/settings across the two MLX precisions. One untimed warm-up before measurement.
| Precision | English RTF | Spanish RTF | Peak MLX allocation |
|---|---|---|---|
| MLX BF16 | 0.572 | 0.472 | 3.89 GB |
| MLX 8-bit | 0.372 | 0.363 | 2.19 GB |
RTF = total synthesis wall time / total generated audio duration; lower is faster, below 1 is faster than real time. Includes reference loading/encoding and output evaluation; excludes model loading, untimed warm-up, file encoding, ASR and network. Peak memory is MLX allocation, not process RSS or whole-machine usage. Short-clip measurements are not a universal performance claim.
- Both precisions: 10/10 clips stopped normally, finite/non-silent/unclipped output.
- Both precisions: 10/10 word sequences matched local Parakeet ASR after case, punctuation and accent-mark normalization. This is not a human listening score.
- Identical-latent audio decoder comparison: 33.27 dB SNR, correlation 0.999765, 4 seconds of decoded audio.
- Strict reload and built-in-voice synthesis passed from a relocated copy with an empty Hugging Face cache and Hub offline mode; neither PyTorch nor ONNX Runtime was imported.
Details: validation.json, provenance.json, quantization-audit.json, SHA256SUMS.
Limitations
Spanish intelligibility does not establish an Argentine accent. The listener found earlier original-runtime Spanish samples unnatural / Spain-like; this quantization is not established to improve accent or naturalness. Judge the generated voice yourself. Text normalization is not ported; write numbers, dates and units in words. The stop head may occasionally leave long tails on other prompts. Only the short bilingual sample set and numerical decoder check above were tested; no exhaustive perceptual or language evaluation was performed.
Upstream runtime and documentation: MLX Audio, inclusionAI Ming TTS.