Zyphra-ZONOS2 / README.md
lucasnewman's picture
Upload README.md
3ad1bd8 verified
|
Raw
History Blame Contribute Delete
3.42 kB
---
license: apache-2.0
base_model:
- Zyphra/ZONOS2
library_name: mlx-audio
tags:
- mlx
- text-to-speech
- voice-cloning
---
# ZONOS2
ZONOS2 is Zyphra's autoregressive text-to-speech model with multi-codebook audio
generation, 44.1 kHz DAC decode, and speaker conditioning from reference audio.
**Original model:** [Zyphra/ZONOS2](https://huggingface.co/Zyphra/ZONOS2)
## Supported Repositories
| Repository | Format | Notes |
|------------|--------|-------|
| `mlx-community/Zyphra-ZONOS2` | BF16 | Official MLX conversion for `mlx-audio` |
## Installation
`pip install mlx-audio`
## Usage
Python API:
```python
from mlx_audio.audio_io import write as audio_write
from mlx_audio.tts import load
model = load("mlx-community/Zyphra-ZONOS2", lazy=True)
result = next(model.generate(
text="Hello, this is ZONOS two running locally with MLX audio.",
max_tokens=220,
))
audio_write("zonos2.wav", result.audio, result.sample_rate)
```
## Voice Cloning
Pass a short reference clip with `ref_audio`. Clean speech-only clips work best.
```python
result = next(model.generate(
text="This text will be spoken with the reference speaker.",
ref_audio="speaker.wav",
max_tokens=220,
))
```
You can also compute the speaker embedding once and reuse it from the Python
API:
```python
speaker = model.extract_speaker_embedding("speaker.wav")
result = next(model.generate(
text="This reuses a precomputed speaker embedding.",
speaker_embedding=speaker,
max_tokens=220,
))
```
## CLI
```bash
python -m mlx_audio.tts.generate \
--model mlx-community/Zyphra-ZONOS2 \
--text "Hello, this is ZONOS two running with MLX audio." \
--output_path outputs \
--file_prefix zonos2
```
Voice cloning:
```bash
python -m mlx_audio.tts.generate \
--model mlx-community/Zyphra-ZONOS2 \
--text "This text will use the voice from the reference clip." \
--ref_audio speaker.wav \
--output_path outputs \
--file_prefix zonos2_clone
```
## Generation Parameters
| Parameter | Default | Description |
|-----------|---------|-------------|
| `ref_audio` | `None` | Reference audio path or array for voice cloning |
| `speaker_embedding` | `None` | Precomputed 2048-D speaker embedding, Python API only |
| `max_tokens` | 1024 | Maximum number of audio token frames |
| `temperature` | 1.15 | Sampling temperature |
| `top_k` | 106 | Top-k sampling filter |
| `top_p` | 0.0 | Nucleus sampling filter, disabled at 0 |
| `min_p` | 0.18 | Minimum-probability sampling filter |
| `repetition_penalty` | 1.2 | Repetition penalty applied to recent audio tokens |
| `seed` | `None` | Seed for deterministic sampling |
| `text_normalization` | `True` | English text normalization toggle, Python API only |
## Notes
- Output audio is mono 44.1 kHz.
- DAC dependency: [mlx-community/descript-audio-codec-44khz](https://huggingface.co/mlx-community/descript-audio-codec-44khz)
- Speaker encoder: [marksverdhei/Qwen3-Voice-Embedding-12Hz-1.7B](https://huggingface.co/marksverdhei/Qwen3-Voice-Embedding-12Hz-1.7B)
- Reference-audio speaker extraction uses the bundled speaker encoder.
- English text normalization handles common written forms; unsupported languages
fall back to raw UTF-8 byte prompting.
- Streaming is not implemented yet. Use non-streaming generation.
## License
See the [Zyphra/ZONOS2 model card](https://huggingface.co/Zyphra/ZONOS2) for
upstream license and usage details.