canto-tts
Cantonese Hong Kong Text-to-Speech · CPU-first · Apache-2.0
An open-source Cantonese (Hong Kong) text-to-speech SDK. Runs on CPU via ONNX Runtime — no GPU required. Fine-tuned from MOSS-TTS-Nano (0.1 B params, GPT-2 backbone, Apache-2.0, by OpenMOSS).
Published — CER 11.82% / tone accuracy 84.22% / code-switch CER 13.87% on a 100-sentence gate set (N=5 repeat eval). Weights on HuggingFace. Single default voice only — no voice cloning, no voice selection (yet).
Install
pip install canto-tts
Quickstart
from canto_tts import CantoTTS
tts = CantoTTS() # auto-downloads typangaa/canto-tts-nano from HuggingFace on first use
tts.synthesize("多謝晒,今日天氣幾好。", "hello.wav")
print("Saved to hello.wav")
# English code-switching works too
tts.synthesize("我哋一齊去 IFC food court 食飯。", "codeswitching.wav")
Weights auto-download from HuggingFace and cache via the Hub (~/.cache/huggingface/hub/).
Quality Modes (opt-in)
Two opt-in quality= modes trade extra compute for a more reliable draw, without touching the model:
tts.synthesize(text, "out.wav", quality="duration_filter", max_attempts=3) # no extra deps
tts.synthesize(text, "out.wav", quality="best_of_n", best_of_n=4) # needs canto-tts[quality]
quality="best_of_n" reranks N draws by ASR character-error-rate; pass asr_backend="sensevoice" (needs canto-tts[quality-sensevoice]) for ~7x faster reranking at a small accuracy cost. Full writeup: GitHub README.
Limitations
| Quality | CER 11.82% / tone accuracy 84.22% / code-switch CER 13.87% (N=5 repeat, 100-sentence gate set). |
| Voice | Single default voice. No voice cloning, no voice selection (yet). |
| Language | Cantonese (Hong Kong) + English code-switching only. No Mandarin. |
| Training data | Privately sourced — not released (copyright), regardless of weight status. |
| Weights | ✅ Published — huggingface.co/typangaa/canto-tts-nano. |
Model & License
- Base model: MOSS-TTS-Nano by OpenMOSS
- Weights: published at huggingface.co/typangaa/canto-tts-nano
- License: Apache-2.0 (inherited from MOSS-TTS-Nano)
Full Documentation
Full README, CLI docs, Docker self-hosting, and deployment guide: https://github.com/typangaa/canto-tts
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file canto_tts-0.1.1.tar.gz.
File metadata
- Download URL: canto_tts-0.1.1.tar.gz
- Upload date:
- Size: 55.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
144a78c721f484d5fd6b49b79a1dadbefa8df2204e1fafadbac32e351d0730cf
|
|
| MD5 |
5b6a697cde30ca4825622f6b94ea4ae5
|
|
| BLAKE2b-256 |
f540194ee90eff0153580e89444bc094da3dabc70a52721f77cb19b123624fec
|
Provenance
The following attestation bundles were made for canto_tts-0.1.1.tar.gz:
Publisher:
publish.yml on typangaa/canto-tts
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
canto_tts-0.1.1.tar.gz -
Subject digest:
144a78c721f484d5fd6b49b79a1dadbefa8df2204e1fafadbac32e351d0730cf - Sigstore transparency entry: 2269165400
- Sigstore integration time:
-
Permalink:
typangaa/canto-tts@4b195ea02f91994e63dacff87d92a5c99de51b3a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/typangaa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b195ea02f91994e63dacff87d92a5c99de51b3a -
Trigger Event:
push
-
Statement type:
File details
Details for the file canto_tts-0.1.1-py3-none-any.whl.
File metadata
- Download URL: canto_tts-0.1.1-py3-none-any.whl
- Upload date:
- Size: 55.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae78f3f3f1cf91bbfca211af8b67f969261c966417ba62efdd0aeb1bfe65f0df
|
|
| MD5 |
690a3b32f06bc73f4ccf156fb70b1d86
|
|
| BLAKE2b-256 |
c40bd8f0aaa340d95701fbb9263c6c05eb07bec1db310baab2bcbd10652b496f
|
Provenance
The following attestation bundles were made for canto_tts-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on typangaa/canto-tts
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
canto_tts-0.1.1-py3-none-any.whl -
Subject digest:
ae78f3f3f1cf91bbfca211af8b67f969261c966417ba62efdd0aeb1bfe65f0df - Sigstore transparency entry: 2269165440
- Sigstore integration time:
-
Permalink:
typangaa/canto-tts@4b195ea02f91994e63dacff87d92a5c99de51b3a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/typangaa
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b195ea02f91994e63dacff87d92a5c99de51b3a -
Trigger Event:
push
-
Statement type: