CoolFace
Modelpublic

cstr/qwen3-tts-1.7b-customvoice-GGUF

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
7likes2.7kdownloads
Model Card

Qwen3-TTS-12Hz-1.7B-CustomVoice — GGUF (ggml-quantised)

GGUF / ggml conversion of `Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice` for use with [CrispStrobe/CrispASR](https://github.com/CrispStrobe/CrispASR).

The 1.7B sibling of `cstr/qwen3-tts-0.6b-customvoice-GGUF`. Same fixed-speaker pattern (9 baked speakers, no ECAPA, no reference WAV), but on the 1.7B talker — hidden=2048, head_dim=128, with a small_to_mtp_projection MLP that maps the 2048-d talker hidden state down to the 1024-d code predictor input space.

SpeakerLanguage / dialect
aiden (default)English (M)
dylanBeijing dialect (M, dialect_token=2074)
ericSichuan dialect (M, dialect_token=2062)
ono_annaEnglish (F)
ryanEnglish (M)
serenaEnglish (F)
soheeEnglish (F)
uncle_fuEnglish (M, older)
vivianEnglish (F)

Pair this with the codec at `cstr/qwen3-tts-tokenizer-12hz-GGUF` — the talker emits 16-codebook RVQ codes that the codec decoder renders to 24 kHz PCM.

Files

FileQuantSizeNotes
qwen3-tts-12hz-1.7b-customvoice-f16.ggufF163.84 GBReference quality
qwen3-tts-12hz-1.7b-customvoice-q8_0.ggufQ8_02.04 GBRecommended — ASR-roundtrip word-exact vs F16

The 0.6B-CustomVoice variant ships at `cstr/qwen3-tts-0.6b-customvoice-GGUF`. The 1.7B-Base (ICL voice clone) variant ships at `cstr/qwen3-tts-1.7b-base-GGUF`.

Quick start

bash
# 1. Build CrispASR
git clone https://github.com/CrispStrobe/CrispASR
cd CrispASR
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j --target crispasr

# 2. Pull the talker + the codec
huggingface-cli download cstr/qwen3-tts-1.7b-customvoice-GGUF qwen3-tts-12hz-1.7b-customvoice-q8_0.gguf --local-dir .
huggingface-cli download cstr/qwen3-tts-tokenizer-12hz-GGUF qwen3-tts-tokenizer-12hz.gguf --local-dir .

# 3. Synthesise — pick a speaker by name
./build/bin/crispasr --backend qwen3-tts-1.7b-customvoice \
    -m qwen3-tts-12hz-1.7b-customvoice-q8_0.gguf \
    --codec-model qwen3-tts-tokenizer-12hz.gguf \
    --voice ryan \
    --tts "Hello, this is the Ryan speaker on the 1.7B model." \
    --tts-output ryan.wav

For auto-download simply pass -m auto:

bash
./build/bin/crispasr --backend qwen3-tts-1.7b-customvoice -m auto \
    --voice vivian \
    --tts "Auto-download fetches both files." \
    --tts-output out.wav

Quality verification

ASR roundtrip via `cstr/parakeet-tdt-0.6b-v3-GGUF`:

VariantSpeakerOutput (verbatim)
Q8_0ryan"Hello, this is the Ryan speaker."
F16vivian"This is a longer prompt to verify the 1.7B CustomVoice path through the talker."

Both roundtrips are exact-match on a long prompt (the regression test for the small_to_mtp_projection per-step fix in commit 2cc7aeb).

Architecture

ComponentDetails
Talker LMQwen3 (28 layers, 2048 hidden, 16 heads, 8 KV heads, head_dim=128)
Output head16 codebooks × 2048 (RVQ) — emits codes for the codec
small_to_mtp_projection2048-d → 1024-d MLP (input bridge to code predictor) — applied per-step at decode (steps 1..14, fix in 2cc7aeb)
Code predictor5L Qwen3 (1024 hidden) + 15 separate codecembedding/lmhead pairs (top-k=50, temp=0.9)
CodecQwen3-TTS-Tokenizer-12Hz (separate GGUF, 12.5 fps RVQ)
Audio24 kHz mono float32 PCM

CustomVoice 1.7B uses the same fixed-speaker contract as 0.6B-CV: talker.get_input_embeddings()(spk_id) retrieves a row from the codec embedding table directly. The 2048-d hidden state then gets projected down to 1024-d via small_to_mtp_projection before each code predictor step.

CrispASR backend integration

FlagPurpose
--backend qwen3-tts-1.7b-customvoiceSelects the 1.7B CustomVoice runtime path
--voice <name>Picks a fixed speaker by name (default: first speaker, aiden)
--tts "..."Text to synthesise
--codec-model PATHQwen3-TTS-Tokenizer-12Hz GGUF
--tts-output PATHOutput WAV (24 kHz mono)

The runtime branches on qwen3tts.tts_model_type and on the GGUF talker hiddendim (`spkenc_dim`) so the same backend object handles 0.6B/1.7B Base/CustomVoice/VoiceDesign automatically.

Conversion

bash
python models/convert-qwen3-tts-to-gguf.py \
    --input Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice \
    --output qwen3-tts-12hz-1.7b-customvoice-f16.gguf \
    --outtype f16

build/bin/crispasr-quantize qwen3-tts-12hz-1.7b-customvoice-f16.gguf \
    qwen3-tts-12hz-1.7b-customvoice-q8_0.gguf q8_0

Attribution

License

Apache 2.0 — both the upstream talker and codec, and the GGUF conversion.

Provenance and EU AI Act Art. 53 note

  • —Upstream model: Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice — published by Qwen.
  • —Upstream licence: apache-2.0. This repository redistributes under the same terms; it grants no rights the upstream licence does not.
  • —What was done here: format conversion and/or quantisation only (GGUF/GGML). No training, no fine-tuning, no merging, no distillation, no change to architecture, vocabulary or capability. Only the numeric representation of the upstream weights differs.
  • —Training data: documented — where it is documented at all — by the upstream provider; see the upstream model card. No training data was used, added or selected by this repository. No training-content summary was found on the upstream model card at the time of writing; that documentation gap is upstream's and is not filled here.
  • —Provider status: under Regulation (EU) 2024/1689 the upstream authors remain the provider of this model. Converting the serialisation format does not make this repository the provider of a new general-purpose AI model, and no such claim is made. Questions about training content, copyright policy or model capability belong upstream.