Instructions to use tc3oliver/TingMix-Desktop with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use tc3oliver/TingMix-Desktop with MLX:
# Download the model from the Hub pip install huggingface_hub[hf_xet] hf download tc3oliver/TingMix-Desktop --local-dir TingMix-Desktop
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Atomic Chat
TingMix-Desktop model packages
Converted, signed packages of TingMix-Large for the TingMix Desktop app (local speech recognition for Taiwanese Mandarin, English and Mandarin-English code-switching). Everything runs on the user's own machine; the app never sends audio anywhere.
Status: EXPERIMENTAL. The first package (macOS, Apple silicon, MLX) was checked on 8 synthetic text-to-speech clips and one real video. It is not a quality or safety guarantee. Read "Limitations" before relying on it.
What is in a package
A package is a folder holding the model files and one manifest.signed.json. The manifest lists every file with its size
and SHA-256, the immutable upstream revisions, the licence terms the user must accept, and an Ed25519 signature. The app
refuses a package whose manifest signature or any file hash does not match.
| Package | Backend | Precision | Status |
|---|---|---|---|
tingmix-large-mlx-fp32-r75071a1 |
MLX, macOS on Apple silicon | fp32 weights | EXPERIMENTAL |
tingmix-large-onnx-fp32-r75071a1 |
ONNX Runtime CPU, Windows x86-64 | fp32 graph; the other five files are the same as the MLX package | EXPERIMENTAL |
Files of tingmix-large-mlx-fp32-r75071a1 (the signed manifest is authoritative; this table is a convenience copy):
| File | Size (bytes) | SHA-256 |
|---|---|---|
tingmix-large-mlx-fp32.safetensors |
1,308,067,132 | 9737153e4631bc773481ec458f34f242cc7800ccc6ae6ea1c509d895181fc7ec |
config.json |
660 | eac5da8ce273202417906279698130b09c810111d75f82882ac323102ceb7431 |
tingmix.json |
412 | 5b818f0dcd7752539a449f49d834a684518e3feac006ceb929f8d6548d6beb6e |
units.json |
35,553 | dbc1aba97abeeae49dc7556531a2f670d4dc5f39705b54ca28e84b8de9187756 |
tokenizer_bpe.model |
245,401 | 959e7af76bb54482be709575e7ee3da49dce7f293f1e6e18cc99baaf2eeb0c7a |
lm/lmCN_cv_parl_ascend_ntuml.charlm.json.gz |
113,932,911 | c8251c39fd003df0527f074287acd5094f9da476c3bcd0a5eb86a5d6d9cc5a84 |
The last five files are byte-identical copies of the files of the same name in TingMix-Large at the revision below. Only the
.safetensors file is new.
Provenance
| Item | Source | Revision |
|---|---|---|
| Audio encoder (base weights) | google/embeddinggemma-2, audio tower only |
914f7f89142e33e77833254d9c9b90c3cef7303b |
| Reader, LoRA delta, vocabulary, language model | tc3oliver/TingMix-Large |
75071a1260fb21874f150df6ebd53716ac423f13 |
| Reference code the pipeline follows | tc3oliver/embed2asr, tc3oliver/tingmix (Apache-2.0) |
b58275785501c084610b1570f1a446a31da5f933, f44cbdbd2cd99598c99cf8d60da6cb41bb15d1db |
| Converter | experiments/macos/mlx/convert.py in the TingMix Desktop repository (source not yet published) |
commit 0b32104e54dfed0ba6ce4a6f70bf0fa8d78b87c5 |
This is a modified copy of the Google weights (LoRA merged, not further trained). From google/embeddinggemma-2 only the audio tower was kept (text and
vision towers dropped). The 96 LoRA pairs (rank 16, alpha 32, all 12 conformer layers) of TingMix-Large were merged into the
tower weights in fp32 (W' = W + 2.0 * B A), the convolution weights were transposed to MLX layouts, the reader's GRU weights were
repacked to the MLX gate layout, and everything was stored as fp32 in one safetensors file. No further training took place.
Conversion environment: MLX 0.32.4, transformers 5.19.0 (see NOTICE).
Model summary: audio tower about 304.8 M parameters (128-bin log-mel, convolutional subsampling, 12 conformer layers, 25 frames/s, 1536-dimensional features), GRU-CTC reader about 22.2 M parameters over 5,025 units (CJK characters plus 400 English BPE pieces), greedy CTC or CTC prefix beam search with a character 5-gram language model (alpha 0.35, beta 1.5, beam 16, the settings recommended by the TingMix-Large card). The model is offline (bidirectional, 29.5 s window); the app produces live captions by re-decoding the open speech segment.
Using the files outside the app
The package is laid out for the TingMix Desktop loader, not for transformers. tingmix-large-mlx-fp32.safetensors holds the
audio tower and reader weights as fp32 tensors in MLX layouts (see Provenance for the transposes); config.json and tingmix.json
give the architecture and decoding settings; units.json maps CTC output ids to characters and BPE pieces; the language model is a
gzipped JSON character 5-gram table. To run the model in Python, use the original
TingMix-Large release with its reference code instead.
Intended use
Local, on-device transcription of speech in Mandarin (Taiwan), English, and sentences that mix them, through the TingMix Desktop app. Not intended for: speaker identification, surveillance or covert recording, legal, medical or safety-critical transcripts without human review, or any use prohibited by the policy linked in "Licence and use restrictions".
How the Desktop app uses this repository
- The app fetches a signed catalog entry (or the user imports the folder by hand; an offline import is verified exactly like a download).
- It checks the Ed25519 signature with a public key built into the app, then every file's size and SHA-256. A mismatch, an unknown file, a truncated file or an older release (anti-rollback serial) is rejected.
- Before installing, it shows the licence terms listed in the manifest and records that the user accepted them.
- The verified package is activated atomically; the previous version is kept for rollback. Sessions then load from the local cache with no network.
- Nothing in a package is executed or unpickled: only safetensors, JSON, SentencePiece and gzip data files are accepted.
Limitations (measured and inherited)
Measured by the TingMix Desktop project:
- Parity, not accuracy. On 8 synthetic text-to-speech clips (Mandarin, English, mixed; 1.4 to 34.6 s) this package's greedy and beam+LM output equals the PyTorch CPU fp32 reference, text for text. That shows the conversion is faithful on those clips. It says nothing about real speakers; those clips are machine-generated speech.
- Real video, one clip. A 527 s zh-TW product-review video (informal speech, background music, English brand names) decoded through the app's file path gave a character error rate of about 0.32 against uploader subtitles (approximate reference), with beam+LM (0.32 greedy). Hypotheses were about 20 % shorter than the reference (deletions in fast speech) and brand names were mostly wrong; rare proper nouns can fail even when every character is in the vocabulary. The language model did not help on this clip, and segmentation was not the cause. This is one clip: do not read it as an expected CER, and treat the model as out of domain for consumer video with music until more is measured.
- Noise. With the app's original fixed-threshold voice detector, background noise produced spurious one-character captions and segments that never ended. The Desktop project has since built an adaptive detector and a confidence filter (measured on synthetic noise: speech coverage stays 1.0 down to 15 dB signal-to-noise ratio, falls to 0.85 to 0.94 at 10 dB, and nearly all speech is missed at 5 dB). A nearby second talker can still trigger captions.
- Speed and memory on an Apple M4 Max with MLX: about 64 ms warm decode for 7.5 s of audio with beam+LM; worker peak memory about 2.2 GiB. Other machines were not measured.
Inherited from TingMix-Large (as published by its author; not re-measured here): English accuracy is well behind Whisper large-v3; numbers are produced in spoken form only (no digits); error rates on the author's test sets were 12.26 % CER (Common Voice zh-TW), 17.41 to 17.86 % CER (Taiwan Parliament), 20.76 % MER (ASCEND code-switching), 19.88 % WER (FLEURS en), 7.89 % WER (LibriSpeech test-clean); ASCEND speakers are from Hong Kong and Parliament references are not verbatim.
Training data and licences of the data
TingMix-Large was trained on Common Voice zh-TW and English, Taiwan Parliament speech, LibriSpeech, VoxPopuli, AMI, FLEURS, People's Speech, ASCEND and the NTUML2021 train split; the language model was built from the transcripts of Common Voice, Parliament, ASCEND and NTUML2021 (test sentences removed). No training audio or transcripts are distributed here. These are the facts recorded from the upstream cards and dataset cards (2026-10-17); this repository does not resolve them:
| Data | Licence as published | Note |
|---|---|---|
| Common Voice zh-TW / en | CC0 | Speakers must not be identified |
| VoxPopuli | CC0 | Audio: (c) European Union, source: European Parliament |
| LibriSpeech | CC BY 4.0 | Panayotov et al., 2015 |
| AMI | CC BY 4.0 | Carletta et al. |
| FLEURS | CC BY 4.0 | Conneau et al., 2022 |
| People's Speech ("clean") | listed as CC BY; the dataset card lists CC BY and CC BY-SA variants | which variant was used is not documented |
| ASCEND | CC BY-SA 4.0 | Lovenia et al., LREC 2022. ShareAlike: the TingMix-Large author's own review reads this conservatively as possibly applying to derived weights and the language model |
| Taiwan Parliament speech | CC BY-NC 4.0 | NonCommercial. The TingMix-Large author's own review states that the weights and the Parliament-derived language model are likely non-commercial |
| NTUML2021 (train split) | no licence stated | upstream documents disagree on whether it was used for training; the published weights and language model include it |
Consequences for you. Because of the NonCommercial and ShareAlike items above, do not assume you may use these weights or the language model in a commercial product or relicense them differently. The TingMix Desktop project does not give legal advice and has made no determination on these points. Check the sources yourself before any commercial or redistributed use. This package is published to be used with the TingMix Desktop app.
Licence and use restrictions
- Files in this repository are made available under the Apache License 2.0 (
LICENSE), the licence the upstream Hub cards ofgoogle/embeddinggemma-2andtc3oliver/TingMix-Largedeclare, subject to the data notes above. The Apache terms require that you receive a copy of the licence (included), keep the notices inNOTICE, and mark changes: this package is a modified work, described under "Provenance". - The
google/embeddinggemma-2model card at the pinned revision says its licence is Apache 2.0 and adds: "Deployments must adhere to the Gemma Prohibited Use Policy." That policy is at https://ai.google.dev/gemma/prohibited_use_policy. You must not use this model for anything that policy prohibits. The package manifest makes the app show the licence terms and require the user's acceptance before installing. The page the Google card links as its licence, https://ai.google.dev/gemma/docs/gemma_4_license, served the Apache 2.0 text when it was checked on 2026-10-17 (it also displayed a notice that the documentation had moved); if Google publishes different terms for this model later, those terms govern, not this paragraph. - Google's original model and card: https://huggingface.co/google/embeddinggemma-2. This repository is not endorsed by Google.
- The TingMix Desktop code is separate and is licensed in its own repository.
Citation and credit
EmbeddingGemma 2 is by Google DeepMind. TingMix-Large and Embed2ASR are by tc3oliver. Please credit them, and the dataset authors above, when you use results from this package.
Quantized
Model tree for tc3oliver/TingMix-Desktop
Base model
google/embeddinggemma-2