This is inclusionAI/Ming-3.0-tts-0.5B converted for mlx-audio with mlx_audio.convert. The weights are 8-bit affine quantization (group size 64), including the audio VAE; on identical latents the 8-bit VAE decodes at 31 dB SNR against bf16.
Ming-3.0-tts-0.5B is a dense, Qwen2.5-0.5B-based speech model from inclusionAI. It supports:
zero-shot voice cloning;
built-in voices;
freeform and voice-design instructions;
emotion, speed, pitch and volume control;
14 inline paralinguistic tags;
Chinese, English, German, Spanish, French, Korean and Japanese, plus Sichuanese and Cantonese.
Ming-3.0 needs mlx-audio 0.6.1 or later, which includes the prompt-contract fix from mlx-audio #1047. mlx-audio 0.6.0 and earlier load the model but say the wrong words.
# Text to speech
mlx_audio.tts.generate --model mlx-community/Ming-3.0-tts-0.5B-8bit \
--text "The evening wind blew in from the mountain pass, and the distant clouds slowly turned gold."
# Voice cloning: pass the reference clip and its exact transcript
mlx_audio.tts.generate --model mlx-community/Ming-3.0-tts-0.5B-8bit \
--text "I never thought a little machine could sound this much like me." \
--ref_audio reference.wav --ref_text "Exact transcript of reference.wav."
# Built-in voice
mlx_audio.tts.generate --model mlx-community/Ming-3.0-tts-0.5B-8bit \
--text "Good evening, and welcome to the late news." --voice UK_Charlotte
# Freeform instruction
mlx_audio.tts.generate --model mlx-community/Ming-3.0-tts-0.5B-8bit \
--text "The old radio crackled softly as the storm moved across the valley." \
--instruct "Speak in a warm, intimate storytelling voice, with a gentle pace and a hint of nostalgia." \
--use_zero_spk_emb
# German, Spanish, French, Korean or Japanese
mlx_audio.tts.generate --model mlx-community/Ming-3.0-tts-0.5B-8bit \
--text "Am Wochenende haben wir im kleinen Café am Bahnhof einen Kuchen gegessen." --lang_code de
from mlx_audio.tts.models.bailingmm.bailingmm import ming3_instruction
from mlx_audio.tts.utils import load_model
model = load_model("mlx-community/Ming-3.0-tts-0.5B-8bit")
result = next(model.generate(
text="[Sigh] The rain still hasn't stopped. [Cough] I guess we'll have to move the party indoors.",
))
happy = next(model.generate(
text="所有测试都顺利通过了,我们终于可以把这个好消息告诉大家!",
instruct=ming3_instruction(emotion="高兴"),
ref_audio="reference.wav",
ref_text="Exact transcript of reference.wav.",
))
Each clip was transcribed with whisper-large-v3-turbo. Across English, Chinese, paralinguistic tags, Chinese and English cloning, freeform, German and a 30-second three-fragment paragraph, with three seeds each, 24 of 24 clips were correct.
Speaker embeddings. The CAM++ speaker embedding the reference uses for cloning and for the emotion, attribute and dialect tasks is not extracted yet. Cloning works from the reference audio and transcript alone.
Text normalization. The reference's text normalization is not ported, so write numbers out as words.
Stopping. The stop head occasionally fails to fire, leaving trailing low noise. Re-run with another seed if that happens.