Downloads · 30 days
0
Dvirile/chatterbox-turbo-lora
chatterbox-turbo-lora is a text-to-speech model from Dvirile. Use it when you need text read aloud. It is set up for onnx. The card lists the license as mit.
LoRA-aware ONNX export of the complete Chatterbox-Turbo TTS pipeline, quantized to q4f16 for on-device inference (Android / iOS via ORT).
Downloads · 30 days
0
Access
Public
Updated Jul 20, 2026
Repo size
1.9 GB
Likes
1
Public
Click a slice to open those files.
.onnx_data607 MB · 99%
From the Hugging Face model README
LoRA-aware ONNX export of the complete Chatterbox-Turbo TTS pipeline, quantized to q4f16 for on-device inference (Android / iOS via ORT).
The language_model subgraph is a custom fork that exposes 192 extra
input ports so a PEFT-trained LoRA adapter can be bound at runtime. The
other three subgraphs (speech_encoder, embed_tokens,
conditional_decoder) are byte-identical mirrors of the corresponding
files from ResembleAI/chatterbox-turbo-ONNX/onnx/, hosted here so an
on-device app has a single-repo source for the full pipeline.
v1.0.0 of the language-model subgraph had no LoRA input ports — adapter
weights could not be bound at runtime. v2.0.0 wraps every Conv1D
projection inside the transformer (attn.c_attn, attn.c_proj,
mlp.c_fc, mlp.c_proj) in a LoraConv1D that exposes two extra
input tensors per layer:
lora.layers.{N}.{attn_c_attn|attn_c_proj|mlp_c_fc|mlp_c_proj}.{A|B}
→ 24 layers × 4 projections × 2 tensors = 192 extra graph inputs.
At inference time the host runtime binds a PEFT-trained LoRA adapter
(rank, scaling baked in) to these inputs via the ONNX Runtime
OrtLoraAdapter API. Unbound inputs default to zero-sized initializers
so the graph still runs without any adapter loaded — the base voice
synthesizes as-is.
Four subgraphs, each a .onnx protobuf + a .onnx_data external weight
blob. Every .onnx file references its .onnx_data companion by
relative filename, so both files of a pair must be downloaded and kept
next to each other.
| File | Size | Purpose | Source |
|---|---|---|---|
speech_encoder_q4f16.onnx | ~1.2 MB | Extracts speaker embedding + audio tokens from a voiceprint clip | Mirrored from upstream |
speech_encoder_q4f16.onnx_data | ~169 MB | External weights | Mirrored from upstream |
embed_tokens_q4f16.onnx | ~2.5 KB | Token embedding lookup | Mirrored from upstream |
embed_tokens_q4f16.onnx_data | ~32 MB | External weights | Mirrored from upstream |
language_model_q4f16.onnx | ~0.8 MB | Autoregressive LM with LoRA input ports (see above) | Custom (v2.0.0) |
language_model_q4f16.onnx_data | ~222 MB | External weights | Custom (v2.0.0) |
conditional_decoder_q4f16.onnx | ~2.3 MB | Speech-token → waveform vocoder | Mirrored from upstream |
conditional_decoder_q4f16.onnx_data | ~155 MB | External weights | Mirrored from upstream |
Total: ~581 MB.
onnxruntime.quantization.MatMulNBitsQuantizerMatMul/Add nodes (kept fp32 so adapter weights can be hot-swapped
without retraining scales)language_model are first rewritten
from Gemm → MatMul + Add so they fall inside the quantizer's
coverage; without this step the file would stay at ~1.2 GB.Embedding tables (wte, wpe) remain fp32 because they are read via
Gather, not MatMul, and MatMulNBitsQuantizer does not touch them.
The three mirrored subgraphs (speech_encoder, embed_tokens,
conditional_decoder) use whatever quantization the upstream ResembleAI
build applied. They are bit-for-bit identical to
ResembleAI/chatterbox-turbo-ONNX/onnx/*_q4f16.onnx{,_data} — you can
verify with sha256 against the upstream repo.
MIT, inherited from the upstream Chatterbox project.