ming-tts-mnn
Zero-shot text-to-speech on the CPU, one command. This package runs Ming-3.0-tts-0.5B through MNN graphs converted from the released weights.
pip install ming-tts-mnn
ming-tts "傍晚的风从山口吹过来,远处的云慢慢染成了金色。" -o hello.wav
The first run downloads one precision tier (fp16 by default, ~2.9 GB including the shared assets) from HuggingFace and caches it; every later run is offline. The wheel itself is code only.
What you get
- 44.1 kHz output, Chinese and English, punctuation-aware sentence splitting.
- Zero-shot voice cloning: pass any 5–20 s wav plus its transcript.
- No GPU, no PyTorch, no ONNX Runtime — the whole model (LLM backbone, flow-matching head, aggregator, VAE encoder/decoder, CAM++ speaker encoder) runs on MNN.
-p |
size | what it is |
|---|---|---|
fp16 |
2.63 GB | the default; step-level difference from the fp32 original is below the original's own bf16 rounding |
int8 |
1.52 GB | about as close to the original as the original's own bf16 run is |
int4mix |
0.97 GB | int8 language model + 4-bit everywhere else; the smallest tier that stays stable on long text |
int4 |
0.77 GB | all 4-bit; smallest, but the language model's error floor shows up as repetition on long paragraphs |
int4 is shipped because it was asked for, not because it is the best trade: on a
three-sentence paragraph it can loop and produce 40 s of audio instead of 13 s. If
you want the small download, use int4mix.
Command line
# default voice: a bundled sample prompt (clones that speaker)
ming-tts "今天天气不错。" -o out.wav
# clone your own voice
ming-tts "今天天气不错。" --prompt-wav me.wav --prompt-text "这是我录音说的话。" -o out.wav
# no prompt at all: the model's own average voice
ming-tts "Hello from the other side." --no-prompt -o out.wav
# smallest download
ming-tts "今天天气不错。" -p int4mix
# download only, then run offline later
ming-tts --download-only -p int8
Useful flags: -l/--language (default: detected from the text), --cfg (2.0),
--seed (0), --threads (MNN's default), --max-length (characters per fragment,
50), --source modelscope, --model-dir (use an already downloaded tree).
Python
from ming_tts_mnn import MingTTSMNN
tts = MingTTSMNN.from_pretrained("int8") # downloads once, then cached
wav = tts.synthesize("傍晚的风从山口吹过来。") # float32, 44.1 kHz
wav, info = tts.synthesize("今天天气不错。", return_info=True)
# voice cloning
wav = tts.synthesize("Read this in my voice.",
prompt_wav="me.wav",
prompt_text="这是我录音说的话。")
MingTTSMNN(model_dir, precision=...) skips the download when you already have the
files (layout: assets/, tokenizer/, <precision>/*.mnn).
Speed
Measured on an Apple M5 Pro with 4 MNN threads: a 3–6 s Chinese sentence takes
1–2× its own duration (RTF 1.1–2.0), depending on how many autoregressive steps the
stop head decides on. The flow-matching head dominates; int8/int4 buy memory,
not much speed.
Files and cache
Weights come from
yunfengwang/Ming-3.0-tts-0.5B-MNN
(mirror: yunfeng/Ming-3.0-tts-0.5B-MNN on ModelScope). They live in the standard
HuggingFace cache (~/.cache/huggingface/hub), so HF_HOME and HF_HUB_CACHE work
as usual. Downloading int4 fetches only that tier plus the shared assets and
tokenizer.
The int4mix tier is a mix of the int8 and int4 files; ask for it by name and
both directories are fetched.
Notes
- The release stops an utterance when a learned stop head crosses 0.5. That decision is discrete and sensitive to accumulated rounding, so two runs that differ only in arithmetic can differ in length by a few tenths of a second — including the original's own fp32 vs bf16 runs.
--temperature 0(the default) still draws flow-matching noise; use--seedfor reproducible output.- 44.1 kHz mono, 16-bit wav. The model is MIT licensed; so is this port.
Links
- Converted weights: https://huggingface.co/yunfengwang/Ming-3.0-tts-0.5B-MNN
- Original model: https://huggingface.co/inclusionAI/Ming-3.0-tts-0.5B
Metadata
Release files for ming-tts-mnn 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ming_tts_mnn-0.1.0.tar.gz | 417.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ming_tts_mnn-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 835.7 kB
Release files / ming_tts_mnn-0.1.0.tar.gz
| Download URL | ming_tts_mnn-0.1.0.tar.gz |
|---|---|
| Size | 417.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2601218bada64358b1a19dab184f8f15c7c8706e5b318b99edbe560ceab51dbe
|
|
BLAKE2b-256 checksum How to use checksums |
5c419e408258cd81b8fdc004521f25c2bbd78e469cdfa39a13155e485b39d176
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ming_tts_mnn-0.1.0-py3-none-any.whl
| Download URL | ming_tts_mnn-0.1.0-py3-none-any.whl |
|---|---|
| Size | 418.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c05934296f6921b7babfd5352da6f907acf8c2aafa8e2e68f57e51c19c16457d
|
|
BLAKE2b-256 checksum How to use checksums |
2cd857de718c98f07efb512e02e6cd41f0496fed806201db973a41866c065ada
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for ming-tts-mnn 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.