Instructions to use OpenVoiceOS/phoonnx-outetts with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- OuteTTS
How to use OpenVoiceOS/phoonnx-outetts with OuteTTS:
- Notebooks
- Google Colab
- Kaggle
File size: 6,002 Bytes
4523596 e33bbc1 4523596 e33bbc1 4523596 05d04ab e33bbc1 05d04ab e33bbc1 05d04ab 4523596 05d04ab 4523596 e33bbc1 4523596 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | ---
license: other
license_name: mixed-see-below
language: [en, ar, zh, nl, fr, de, it, ja, ko, lt, ru, es, pt, be, bn, ka, hu, lv, fa, pl, sw, ta, uk]
pipeline_tag: text-to-speech
library_name: phoonnx
tags: [tts, onnx, outetts, dac, phoonnx]
---
# phoonnx OuteTTS 1.0 mirror
ONNX artifacts for the [OuteTTS 1.0](https://github.com/edwko/OuteTTS) family, laid out
for the `outetts` engine in [phoonnx](https://github.com/OpenVoiceOS/phoonnx).
All models are **redistributed unchanged** from the official OuteAI and IBM Research
repositories. This mirror adds no weights of its own; it only guarantees a stable file
layout and stable URLs for phoonnx voice entries.
## Contents
| Path | Source | License |
|---|---|---|
| `0.6B/model.onnx` (+ `model.onnx_data`), `0.6B/tokenizer.json` | [OuteAI/OuteTTS-1.0-0.6B-ONNX](https://huggingface.co/OuteAI/OuteTTS-1.0-0.6B-ONNX) | Apache-2.0 |
| `1B/model.onnx` (+ `model.onnx_data`) | **re-exported by phoonnx** from [OuteAI/Llama-OuteTTS-1.0-1B](https://huggingface.co/OuteAI/Llama-OuteTTS-1.0-1B) - see below | **CC-BY-NC-SA-4.0 (non-commercial)** |
| `1B/tokenizer.json` | [OuteAI/Llama-OuteTTS-1.0-1B-ONNX](https://huggingface.co/OuteAI/Llama-OuteTTS-1.0-1B-ONNX) | **CC-BY-NC-SA-4.0 (non-commercial)** |
| `dac/decoder_model.onnx`, `dac/encoder_model.onnx`, `dac/config.json` | [OuteAI/DAC-speech-v1.0-ONNX](https://huggingface.co/OuteAI/DAC-speech-v1.0-ONNX) (weights: [ibm-research/DAC.speech.v1.0](https://huggingface.co/ibm-research/DAC.speech.v1.0)) | CDLA-Permissive-2.0 |
| `speakers/en-female-1-neutral.json` | the `outetts` Python package (`version/v3/default_speakers`) | Apache-2.0 |
The two model sizes carry **different licenses**. The 0.6B is Apache-2.0 and covers 14
languages; phoonnx resolves those 14 to it. The 1B is CC-BY-NC-SA-4.0 - **not licensed
for commercial use** - and is here because it is the only member of the family that
covers Arabic, Belarusian, Bengali, Lithuanian, Persian, Portuguese, Swahili, Tamil and
Ukrainian. Check the 1B license before you deploy it.
Model authorship and all research credit belong to **OuteAI**. The audio codec is
DAC.speech.v1.0 by **IBM Research**.
## Languages
- **0.6B (Apache-2.0), 14 trained languages:** English, Chinese, Dutch, French,
Georgian, German, Hungarian, Italian, Japanese, Korean, Latvian, Polish, Russian,
Spanish.
- **1B (CC-BY-NC-SA-4.0), 23 trained languages:** the 14 above plus Arabic, Belarusian,
Bengali, Lithuanian, Persian, Portuguese, Swahili, Tamil, Ukrainian.
## Numeric parity
Every export in this mirror was checked against the upstream torch weights on a fixed
1843-token prompt (greedy, 64 decode steps, CPU float32).
| Export | max abs logit diff | greedy agreement | shipped |
|---|---|---|---|
| 0.6B `model.onnx` (fp32) | 3.8e-05 | 64/64 | **yes** |
| 0.6B `model_fp16.onnx` | 0.036 | 63/64 | no |
| 0.6B `model_quantized` / `uint8` | 5.7 | 62/64 | no |
| 0.6B `model_bnb4` / `int8` / `q4` / `q4f16` | 3.9 - 5.9 | 32-34/64 | no |
| 1B `model.onnx` - OuteAI's (fp32) | 12 | 61/64 | no, see below |
| 1B `model.onnx` - this repo's re-export (fp32) | **1.78e-05** | **64/64** | **yes** |
The 0.6B float32 export reproduces its torch weights exactly. Every quantized 0.6B export
changes greedy decoding, so none is a safe default.
### The official 1B ONNX export is broken; this one is not
`OuteAI/Llama-OuteTTS-1.0-1B-ONNX` **does not reproduce its own torch weights**, even in
float32. On the prompt above its last-position logits are off by 12, the logit
correlation is **0.48**, prefill argmax agrees on only 1580 of 1843 positions, and greedy
decoding diverges from `OuteAI/Llama-OuteTTS-1.0-1B`. The error is already present on a
32-token prompt (0.08 max diff) and never closes (correlation 0.96-0.98 at 512-2048
tokens), so it is a property of the export, not of long-context accumulation. The 0.6B
export on the same prompt differs by 3.8e-05. Every quantized 1B export inherits the
defect and adds to it.
The `1B/model.onnx` in **this** repository is therefore **not** OuteAI's file. It was
re-exported from the torch checkpoint with
[`scripts/conversion/outetts/export_outetts_onnx.py`](https://github.com/TigreGotico/phoonnx/blob/dev/scripts/conversion/outetts/export_outetts_onnx.py)
and verified the same way: **max abs logit diff 1.78e-05, mean 3.74e-06, logit
correlation 1.00000000, greedy 64/64**, and 64/64 again under the windowed repetition
penalty OuteTTS actually samples with. The same script reproduces the 0.6B to 1.6e-05,
which is how it is checked against a graph already known to be good.
One difference to know about: the re-exported graph returns `logits` shaped `[1, 1, V]` -
the final row only - where OuteAI's exports return every position. Any consumer that
reads the last row, as transformers.js and phoonnx both do, works with either.
## Use it from phoonnx
```python
from phoonnx.model_manager import TTSModelManager
manager = TTSModelManager()
manager.merge_default_voices()
voice = manager.voices["outetts/0.6B/en"].load()
for chunk in voice.synthesize("Hello from OuteTTS running in phoonnx."):
... # chunk.audio_float_array, 24 kHz mono
```
Voice ids run `outetts/0.6B/<lang>` for the 14 languages the 0.6B was trained on and
`outetts/1B/<lang>` for the nine only the 1B covers (ar, be, bn, fa, lt, pt, sw, ta, uk).
Every one of them resolves to this repository. The engine drives the
LM with a KV cache, then decodes the two DAC codebooks to a waveform.
## How it works
The LM emits interleaved `<|c1_N|><|c2_N|>` tokens. `dac/decoder_model.onnx` takes
`audio_codes[1, 2, T]` and returns `audio_values[1, 1, T * 512]` at 24 kHz.
A speaker profile (`speakers/*.json`) is an in-context audio prompt: a transcript whose
words each carry a duration, three prosody buckets and their DAC codes.
## Ethical use
OuteAIs guidance applies unchanged: do not clone a voice without the speakers explicit
permission, and do not use this model to impersonate or to produce deceptive content.
|