| --- |
| license: cc-by-nc-sa-4.0 |
| base_model: SparkAudio/Spark-TTS-0.5B |
| library_name: phoonnx |
| pipeline_tag: text-to-speech |
| tags: |
| - onnx |
| - text-to-speech |
| - phoonnx |
| - spark-tts |
| - bicodec |
| language: |
| - en |
| - zh |
| --- |
| |
| # Spark-TTS 0.5B — ONNX for phoonnx |
|
|
| ONNX weights for [Spark-TTS 0.5B](https://huggingface.co/SparkAudio/Spark-TTS-0.5B) |
| (SparkAudio), packaged for the [phoonnx](https://github.com/TigreGotico/phoonnx) |
| `sparktts` engine. |
|
|
| Spark-TTS is a decoder-only language model on a Qwen2.5-0.5B backbone. It does not |
| predict audio. It predicts **BiCodec** tokens, and BiCodec turns those tokens into a |
| waveform. BiCodec keeps two streams: 32 *global* tokens that carry the speaker, and one |
| *semantic* stream at 50 Hz that carries what is said. The language model reads the text |
| and the 32 global tokens, then writes the semantic stream. |
|
|
| ## Files |
|
|
| | File | Stage | Input | Output | |
| | :--- | :--- | :--- | :--- | |
| | `model.onnx` (+ `model.onnx_data`) | Qwen2 language model, KV-cached | `input_ids`, `attention_mask`, `position_ids`, `past_key_values.*` | `logits`, `present.*` | |
| | `bicodec_vocoder.onnx` | BiCodec decoder | `semantic_tokens` `[1,T]`, `global_tokens` `[1,1,32]` | waveform `[1,1,N]` at 16 kHz | |
| | `wav2vec2_model.onnx` | cloning front end | `wav` `[1,N]` at 16 kHz, zero-mean unit-variance | `feat` `[1,T,1024]` | |
| | `bicodec_encoder_quantizer.onnx` | cloning: semantic stream | `feat` `[1,T,1024]` | `semantic_tokens` `[1,T]` | |
| | `speaker_encoder_tokenizer.onnx` | cloning: speaker stream | `spec` `[1,513,T]` magnitude STFT | `global_tokens` `[1,1,32]` | |
| | `tokenizer.json` | the model's own subword BPE | | | |
| | `voices/*.json` | preset speakers: 32 global tokens each | | | |
|
|
| The short-time Fourier transform in front of the speaker encoder is **not** in the |
| graphs. ONNX has no complex dtype, so neither torch exporter can lower `torch.stft`. The |
| mel filterbank projection *is* inside `speaker_encoder_tokenizer.onnx`; a caller only has |
| to supply the magnitude spectrogram of `torchaudio.transforms.Spectrogram(n_fft=1024, |
| win_length=640, hop_length=320, power=1)`. |
| |
| ## Provenance |
| |
| * `model.onnx` is mirrored from |
| [Fhrozen/Spark-TTS-0.5B-ONNX](https://huggingface.co/Fhrozen/Spark-TTS-0.5B-ONNX), |
| verified against the SparkAudio torch weights (below). |
| * the four BiCodec / wav2vec2 graphs were exported from |
| [SparkAudio/Spark-TTS-0.5B](https://huggingface.co/SparkAudio/Spark-TTS-0.5B) |
| with opset 17. |
| * the preset voices were minted with Spark-TTS controllable-TTS mode |
| (gender, moderate pitch, moderate speed) and then frozen, so each voice is stable |
| across calls. |
| |
| ## Verified against the torch model |
| |
| | Stage | Metric | Result | |
| | :--- | :--- | :--- | |
| | Language model, prefill | max absolute logit difference | 1.3e-3 | |
| | Language model, 8 decode steps | max absolute logit difference | 6.6e-4 | |
| | Language model, 8 decode steps | greedy token agreement | 8/8 | |
| | Speaker tokenizer | token mismatches | 0/32 | |
| | Encoder + quantizer | token mismatches | 0/149 | |
| | BiCodec vocoder | max absolute waveform difference | 1.2e-6 | |
| | Magnitude STFT (NumPy vs torchaudio) | max absolute difference | 4.8e-7 | |
| | wav2vec2 features (real clip) | max relative difference | 1.8e-5 | |
| | wav2vec2 → quantizer, end to end | semantic token mismatches | 0/199 | |
| |
| The quantized language models published upstream (`model_q4`, `model_q4f16`, |
| `model_int8`) are **not** mirrored here. They diverge from the torch model by tens of |
| logits and disagree with greedy decoding, so they are not safe defaults. |
|
|
| ## License and attribution |
|
|
| Spark-TTS 0.5B is released by **SparkAudio** under |
| [CC-BY-NC-SA-4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/); the upstream code |
| is Apache-2.0. This repository redistributes converted weights under the same terms and |
| adds no license of its own. Cite the original work: |
|
|
| > Spark-TTS: An Efficient LLM-Based Text-to-Speech Model with Single-Stream Decoupled |
| > Speech Tokens — SparkAudio. https://github.com/SparkAudio/Spark-TTS |
|
|