Qwen3-TTS-12Hz-1.7B-CustomVoice GGUF for speech.cpp
These files run only in speech.cpp 0.7.0 or later, and the Q6_K, Q5_K and Q4_K files in 0.8.0 or later. Their layout is speech.cpp's own, so llama.cpp, LM Studio, Ollama and other programs that read GGUF cannot run them.
It holds Qwen's Qwen3-TTS 12Hz 1.7B CustomVoice and its codec's decoder in one file. It speaks ten languages with nine named speakers, follows an instruction of how to speak, and passes its audio a few frames at a time as it makes it, so that a player can start on the first chunk.
Use
Install speech.cpp (install), then:
speech tts qwen3-tts-1.7b --voice ono_anna --language ja -o out.wav "明日の東京は晴れです。"
speech tts qwen3-tts-1.7b:q4_k --voice ryan --instructions "Speak slowly and softly." -o out.wav "Good night."
speech serve qwen3-tts-1.7b --open
qwen3-tts-1.7b is the name speech.cpp gives this model; speech fetches the Q8_0 file from this repository the first time, and qwen3-tts-1.7b:q4_k or another type of the table below fetches that type instead. A path to a downloaded file works as well. The options, the worker and the HTTP API are in speech.cpp's documentation: Qwen3-TTS, command line and server.
Files
| File | Contents | Size | speech.cpp from | SHA-256 |
|---|---|---|---|---|
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q8_0.gguf (the file the name fetches) |
the talker, the code predictor, the text embedding and the tokenizer in Q8_0, and the 12Hz codec's decoder in F16 | 2.29 GB (2,287,780,352 bytes) | 0.7.0 | 1bc0ef69547c003507b6536639a6080c8856382f4d0963b15d4475528330592d |
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q6_K.gguf |
the talker, the code predictor, the text embedding and the tokenizer in Q6_K, and the 12Hz codec's decoder in F16 | 1.82 GB (1,823,619,584 bytes) | 0.8.0 | c4f49f4a1d2e15f5649a1e2f6af95e359f97088313a0c832a9d894f9aac44c51 |
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q5_K.gguf |
the talker, the code predictor, the text embedding and the tokenizer in Q5_K, and the 12Hz codec's decoder in F16 | 1.57 GB (1,569,079,808 bytes) | 0.8.0 | c75ace85fa79a897d2b0f6fa05aa9e5ffd6abb869e556f7cf66b35cf87ad12f1 |
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q4_K.gguf |
the talker, the code predictor, the text embedding and the tokenizer in Q4_K, and the 12Hz codec's decoder in F16 | 1.33 GB (1,329,512,960 bytes) | 0.8.0 | d643b25ffa11e7c9687aae50d21b5a47076c4f5642c5e6b957f101a98024cc74 |
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q8_0.gguf.json |
the output of speech info --json for the Q8_0 file |
3,184 bytes | 0f290f461cb17dd2f75465b8371e3c4dc74a37bb070e4cd97f1b89c4b0f63430 |
|
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q6_K.gguf.json |
the output of speech info --json for the Q6_K file |
3,184 bytes | c8e7f3fd4831c9e36611e9148703473b6064d810f76bf077d301dff56efd8c36 |
|
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q5_K.gguf.json |
the output of speech info --json for the Q5_K file |
3,184 bytes | fb21627feee6ae779e63867bc6ff9f6705b6d5f7850ba1f8d380cdbc1c7f2ad7 |
|
Qwen3-TTS-12Hz-1.7B-CustomVoice-Q4_K.gguf.json |
the output of speech info --json for the Q4_K file |
3,184 bytes | b11c3c8b70002e9f5e9410e67407cf56150f0ed8f3d0dcb40538d3a987c59fa8 |
On Vulkan, the Q5_K and Q4_K files need speech.cpp 0.8.4 or later: earlier releases compute them to no finite logit there. A request needs the GGUF file alone; the JSON file lets a program show the model or choose a file without downloading it.
Speakers and languages
| Speaker | Language | Gender | Description |
|---|---|---|---|
aiden |
en |
male | Sunny American male voice. |
dylan |
zh |
male | Youthful Beijing male voice. |
eric |
zh |
male | Lively Chengdu male voice. |
ono_anna |
ja |
female | Playful Japanese female voice. |
ryan |
en |
male | Dynamic male voice with rhythm. |
serena |
zh |
female | Warm, gentle young female voice. |
sohee |
ko |
female | Warm Korean female voice. |
uncle_fu |
zh |
male | Seasoned male voice, mellow timbre. |
vivian |
zh |
female | Bright young female voice. |
The model speaks de, en, es, fr, it, ja, ko, pt, ru and zh, and the language a request gives steers it.
Accuracy
Every stage is checked against the official implementation's tensors:
| Check | Result |
|---|---|
| Codec decoder, CPU, F32 | 114 dB SNR from the official decoder |
| Codec decoder in a synthesis's chunks against the whole utterance | 132 dB SNR in F32 on the CPU, 64 dB with a Q8_0 file on Metal |
| Talker and code predictor, F32, CPU and Metal | the official choice on every frame; greedy decoding gives the official frames |
| Tokenizer | the official tokens on 27 texts, and the official text of 1191 sequences of ids |
Each type, measured by speech-bench on 2026-10-12 on an Apple M5 with Metal, on the 20 sentences of speech-bench's prompts/speak-ja-JP.json spoken with seeds 1, 2 and 3 with the speaker ono_anna, and heard by Qwen3-ASR 1.7B in Q8_0: the CER over the 60 takes. The memory is the peak memory footprint of speech for one request. The CER of one type moves by a few points from seed to seed, so only a larger difference tells two types apart.
| Type | Size | Memory | CER as heard |
|---|---|---|---|
| Q8_0 | 2.29 GB | 2.44 GB | 6.25% |
| Q6_K | 1.82 GB | 1.98 GB | 4.42% |
| Q5_K | 1.57 GB | 1.72 GB | 6.02% |
| Q4_K | 1.33 GB | 1.48 GB | 7.19% |
Speed
speech-bench on 2026-10-08: the 20 sentences of its prompts/speak-ja-JP.json with the speaker ono_anna, one request at a time through the worker, Q8_0.
| Device | Median first audio | p90 first audio | Real-time factor |
|---|---|---|---|
| Apple M5, Metal | 0.060 s | 0.110 s | 0.42 |
| RTX 2080, Vulkan | 0.039 s | 0.052 s | 0.32 |
The first audio is the first chunk, and the 1.7B model begins its speech with 0.10 s of silence.
Source
Converted by speech.cpp's reference/qwen3-tts/convert.py 1.7b, whose environment pins the official code at QwenLM/Qwen3-TTS@022e286, from Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice at 0c0e3051f131929182e2c023b9537f8b1c68adfe, to F32, from which speech quantize --type <type> wrote each file. Every constant the C++ reads is in the file, from the checkpoint or, where it has none, from the official code.
The 0.6B model, which is faster and takes less memory, is qwen3-tts-0.6b in sakasegawa/Qwen3-TTS-12Hz-0.6B-CustomVoice-GGUF.
License
The weights are the Qwen team's, under the Apache License 2.0, as the official checkpoint is. See Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice for the model and its terms. These files change the format of the weights and quantize them; they do not retrain them.