Chatterbox LatAm — regular MLX 8-bit
Regular affine MLX Q8, group size 64. This is not the HQ variant.
Converted directly from the verified source-precision MLX baseline of ResembleAI/Chatterbox-Multilingual-es-mx-latam, not by requantizing an already quantized model. The separate HQ release remains unchanged.
Apple Silicon inference
Use the included generate_fixed.py helper with the pinned
MLX-Audio runtime and an authorized reference voice. It preserves the
original Q8/G64 weights, applies the official V3 final-vocoder activation
convention, checks the model/tokenizer hashes, and validates the resulting
audio signal.
python generate_fixed.py --ref-audio ./reference.wav \
--text '¡Hola! ¿Cómo estás? El niño vio un pingüino y sonrió.' \
--output ./speech.wav
The exact model was tested on Apple Metal with nine Spanish synthesis
cases (three texts, three seeds): all passed the decoder-limit signal
checks. Aggregate RTF was 0.624 in this local test. Human
naturalness, accent and speaker-similarity scores remain unqualified.
The generic mlx_audio.tts.generate command is not the
recommended path for this pinned runtime.
IMPORTANT — V3 vocoder saturation correction (Mac verified)
Use generate_fixed.py for speech. The original generic MLX-Audio
Chatterbox V3 vocoder has a final-activation mismatch: it uses LeakyReLU
negative slope 0.1 before conv_post, whereas the official ResembleAI
V3 decoder uses the default 0.01 at that location. Intermediate slopes
remain 0.1. This mismatch caused actual clipping, not merely loudness.
On Apple Metal, the original output pinned 13.87% of samples at the
decoder's ±0.99 hard limit. A controlled test with identical decoder
inputs reduced 10.15% → 0% hard-limit samples by correcting only that
final slope, with no post-gain, normalization or weight changes.
Nine additional Spanish generations (3 texts × 3 seeds) passed with
zero hard-limit samples. Aggregate measured RTF was 0.624 (68.2 s of
audio generated in 42.53 s, including conditioning). See
v3_saturation_fix_report.json.
The model weights have NOT changed. This repository includes a tested
source-guarded, process-local correction. A generic
mlx_audio.tts.generate call or the older run_regular_mlx8.py
generation path can still produce saturated audio until the
underlying runtime is fixed. Do not try to repair clipped speech by
turning the volume down. The old Mac installer's strict GPU
quantized-versus-dense matrix tolerance also remains an independent
unresolved check; do not mistake this vocoder fix for full kernel parity.
Recommended generation (Apple Silicon)
Install the dependencies from requirements-mac.txt in an isolated
native arm64 environment. Then:
python generate_fixed.py \
--ref-audio ./reference.wav \
--text '¡Hola! ¿Cómo estás? El niño vio un pingüino y sonrió.' \
--output ./latam-mlx8-corrected.wav
This command verifies the original Q8/G64 model, pinned external speech tokenizer, and the exact audited MLX-Audio vocoder source. It applies the correction only within the generation process and refuses to export audio if the output is silent or at least 0.1% of samples hit the hard limit. It does not modify installed libraries or source weights. Use a clean, authorized mono reference recording. No reference audio or generated WAVs are included in the repository.
Limitations: The measured saturation is resolved on these tests, but human listening, speaker similarity, pronunciation and original PyTorch/MLX end-to-end equivalence are not certified.
Exact precision policy
| Setting | This regular release | Separate HQ release |
|---|---|---|
| Bits | 8 | 8 |
| Group size | 64 | 32 |
| Quantized T3 attention/MLP matrices | 210 | 182 |
| Exempt first/last transformer blocks | None | First two and last two |
| Weight-error gates deciding layer exemptions | None | Enabled |
| Weight-file bytes | 1,264,130,033 | 1,511,588,177 |
This release uses the upstream quantize_t3_backbone(..., bits=8, group_size=64) at MLX-Audio commit dad2087f790dfe96b07d5aac1405db4b578b411f. All 210 T3 attention/MLP matrices are quantized. Voice encoder, embeddings, output heads, normalization, conditioning, S3Gen V3 decoder and vocoder keep their original converted source precision. There is no global FP16/BF16 cast, FP8 conversion, or additional activation/KV-cache quantization.
The model weight file is 1.264 GB (1,264,130,033 bytes): 53.37% smaller than the source-precision MLX baseline and 16.37% smaller than HQ. This is a weight-file measurement, not peak inference memory. The speech tokenizer is a separate approximately 495 MB dependency, pinned below.
Tests actually performed
Conversion and validation ran on Windows 11 / Ubuntu WSL2 with real MLX CPU kernels. The following checks passed:
- Exact saved/reloaded tensor shapes, dtypes and values; all non-backbone weights exactly preserved.
- All 210 packed matrices exactly match the direct upstream MLX quantizer.
- Q8 group-64 packing and quantized matrix multiplication checks.
- Full-model loading, pinned speech-tokenizer loading and checksum validation.
- A real, short unconditioned transformer forward producing finite logits with shape
[1, 8, 8194].
The weight-domain diagnostic maxima are 0.56867% whole-matrix relative error and 0.93624% output-row relative error. No reconstruction-error-based layer exemptions were used. These percentages are not perceived audio quality loss.
Now tested on native Mac Metal: speech generation and decoder saturation checks passed using the corrected helper. Still unqualified: human listening, pronunciation, speaker similarity, original PyTorch/MLX audio equivalence, and the separate strict Metal matmul parity check. Successful conversion and a transformer forward are not a speech-quality certificate. See windows_runtime_smoke.json, precision_report.json and conversion_manifest.json for measured evidence.
Download and test on an Apple Silicon Mac
Download this entire repository with the Hugging Face CLI:
hf download groxaxo/Chatterbox-Multilingual-es-mx-latam-MLX-8bit --local-dir ./Chatterbox-LatAm-MLX8-Regular
cd ./Chatterbox-LatAm-MLX8-Regular
bash ./Install-and-Test-Mac.command
The installer requires native arm64 Python 3.10 or newer and uses the isolated environment ~/.venvs/chatterbox-latam-mlx8-regular. It installs the pinned runtime, verifies all published file checksums, loads the model and speech tokenizer, and performs native Metal packing, matmul and transformer checks. It does not install a server or change autostart settings. No Mac install is claimed until that script has actually succeeded on the target Mac.
Alternatively, set up the environment explicitly:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-mac.txt
python run_regular_mlx8.py --require-metal --smoke-forward --report mac-metal-test.json
Generate Spanish speech
python ./generate_fixed.py \
--ref-audio ./reference.wav \
--text '¡Hola! ¿Cómo estás? El niño vio un pingüino y sonrió.' \
--output ./regular_mlx8.wav
Use an authorized, clean mono reference recording. The helper uses lang_code=es, verifies hashes, preserves the checkpoint's V3 NFKD,fullcase preprocessing and writes native-rate float WAV output. Preserve accents, combining marks and case. No reference recordings are published.
The standard mlx_audio.tts.generate loader can read these root-level weights and config, but may fetch a mutable speech-tokenizer revision. Use generate_fixed.py for the pinned, checksum-verified and saturation-corrected path.
Speech-tokenizer dependency
The helper first accepts a local speech-tokenizer/ folder when its contents match speech_tokenizer.lock.json; otherwise it downloads only model.safetensors and config.json from mlx-community/S3TokenizerV2 at revision e0c9886f0e1c35ae85b1f27277416fb19fc72bec. Both files must match their recorded SHA-256 hashes. This repository does not redistribute the speech-tokenizer weights and does not silently use its latest branch revision. Internet access is needed on the first uncached load.
Provenance, reproduction and license
Original Spanish model revision: 27e595bf2fe7be0533ca299d9afafcde08b7cca7. MLX-Audio revision: dad2087f790dfe96b07d5aac1405db4b578b411f. Every source asset and the unquantized input hash are recorded in the conversion manifest. The model SHA-256 is 35c2653a76fd5ba5f1643ae641638a20eb18e115a4b810999e05000044e50a79.
convert_regular_mlx8.py and convert_windows_hq.py provide conversion logic. Reproduction requires the original audited baseline bundle (--bundle PATH); these scripts are not needed for inference. The original source-precision baseline and HQ candidate remain unchanged on the conversion machine.
Original ResembleAI MIT notice is preserved in LICENSE; see NOTICE.md. No credentials, private environment files, reference audio or full-precision baseline weights are included. Respect reference-voice consent and applicable usage rights.