Qwen3 Models

July 31, 2026 ยท View on GitHub

This page covers Qwen3 TTS, Qwen3 ASR, and Qwen3 forced alignment. These are separate model packages with different inputs: Base TTS clones from audio, VoiceDesign uses an instruction, CustomVoice uses packaged speakers, ASR transcribes audio, and the aligner requires an exact transcript.

Qwen3 TTS Base

Qwen3 TTS Base is the voice-clone TTS path. It needs reference audio and can use the reference transcript when available.

FieldValue
Familyqwen3_tts
Model directorymodels/Qwen3-TTS-12Hz-1.7B-Base
Tasktts
Modesoffline
Voice inputReference WAV through --voice-ref
TranscriptOptional --reference-text
audiocpp_cli --task tts --family qwen3_tts --model models/Qwen3-TTS-12Hz-1.7B-Base --backend cuda --text "Hello from Qwen3 TTS." --voice-ref assets/resources/b.wav --reference-text "Some call me nature. Others call me Mother Nature. I've been here for over 4.5 billion years. 22,500 times longer than you." --out out.wav
OptionValuesDefaultMeaning
--texttextrequiredText to synthesize.
--voice-refWAV pathrequiredVoice clone reference audio.
--reference-texttextempty stringTranscript for reference audio.
--languagelanguage codeempty stringText language hint.
--text-chunk-sizeinteger chars8192Long-form text chunk size.
--max-tokensinteger8192Maximum generated speech tokens per chunk.

Qwen3 TTS VoiceDesign

Qwen3 VoiceDesign creates a voice from an instruction. It does not require a speaker reference WAV.

FieldValue
Familyqwen3_tts
Model directorymodels/Qwen3-TTS-12Hz-1.7B-VoiceDesign
Taskvdes
Modesoffline
Voice inputInstruction text through --instruct
Reference audioNot required
audiocpp_cli --task vdes --family qwen3_tts --model models/Qwen3-TTS-12Hz-1.7B-VoiceDesign --backend cuda --text "Hello from a designed voice." --instruct "A warm adult narrator" --out out.wav
OptionValuesDefaultMeaning
--texttextrequiredText to synthesize.
--instructtextrequiredVoice design instruction.
--languagelanguage codeempty stringText language hint.
--text-chunk-sizeinteger chars8192Long-form text chunk size.
--max-tokensinteger8192Maximum generated speech tokens per chunk.

Qwen3 TTS CustomVoice

Qwen3 CustomVoice uses speaker ids packaged with the model. The CLI passes the speaker name with --speaker; examples use Vivian and Ryan.

FieldValue
Familyqwen3_tts
Model directorymodels/Qwen3-TTS-12Hz-1.7B-CustomVoice
Tasktts
Modesoffline
Voice inputBuilt-in speaker id through --speaker
Style controlOptional instruction through --instruct
External voice WAVNot used by this path
audiocpp_cli --task tts --family qwen3_tts --model models/Qwen3-TTS-12Hz-1.7B-CustomVoice --backend cuda --text "Hello from a custom voice." --speaker Vivian --instruct "Very happy." --out out.wav
OptionValuesDefaultMeaning
--texttextrequiredText to synthesize.
--speakerpackaged speaker namerequiredBuilt-in speaker id, such as Vivian or Ryan.
--instructtextempty stringStyle or emotion instruction.
--languagelanguage codeempty stringText language hint.
--text-chunk-sizeinteger chars8192Long-form text chunk size.
--max-tokensinteger8192Maximum generated speech tokens per chunk.

Qwen3 TTS Sampling

These sampling controls are shared by the Qwen3 TTS Base, VoiceDesign, and CustomVoice paths.

OptionValuesDefaultMeaning
--do-sampletrue, falsetrueEnable sampling.
--temperaturefloat0.9Main talker temperature.
--top-kinteger50Main talker top-k.
--top-pfloat1.0Main talker top-p.
--repetition-penaltyfloat1.05Main talker repetition penalty.
`--request-option subtalker_do_sample=truefalse`booltrue
--request-option subtalker_temperature=<float>float0.9Subtalker temperature.
--request-option subtalker_top_k=<n>integer50Subtalker top-k.
--request-option subtalker_top_p=<float>float1.0Subtalker top-p.
--seedintegerrandom if omittedSampling seed.

Qwen3 ASR

Qwen3 ASR transcribes speech audio. Word timestamps are produced by running the recognized transcript through Qwen3 Forced Aligner, so --words-out requires the forced aligner model path. Long audio is split inside the model session before ASR inference; word timestamps are shifted back onto the original audio timeline.

Streaming mode accepts live audio chunks and emits buffered transcript deltas. Timestamp output remains offline-only because word alignment runs after the full transcript is known.

audio_chunk_mode=auto is the default. For transcript-only ASR, Qwen3 ASR uses fixed chunks. When word timestamps are requested, it uses bundled Silero VAD internally to choose speech-aware chunks before running ASR and alignment.

FieldValue
Familyqwen3_asr
Model directorymodels/Qwen3-ASR-0.6B or models/Qwen3-ASR-1.7B-hf
Taskasr
Modesoffline, streaming
InputSpeech WAV through --audio
OutputText to stdout or --text-out; optional word JSON through --words-out with a forced aligner
audiocpp_cli --task asr --family qwen3_asr --model models/Qwen3-ASR-0.6B --backend cuda --audio speech_16k.wav --text "" --text-out transcript.txt
audiocpp_cli --task asr --mode streaming --family qwen3_asr --model models/Qwen3-ASR-0.6B --backend cuda --audio speech_16k.wav --text "" --request-option audio_chunk_seconds=5 --text-out transcript.txt

The native Hugging Face Transformers layout of Qwen/Qwen3-ASR-1.7B-hf is also accepted directly. It uses processor_config.json, tokenizer.json, and the model.audio_tower / model.language_model tensor namespaces; no model conversion is required:

audiocpp_cli --task asr --family qwen3_asr --model models/Qwen3-ASR-1.7B-hf --backend cuda --audio speech_16k.wav --text "" --text-out transcript.txt

GGUF checkpoints

Qwen3 ASR, Qwen3 Forced Aligner, and Qwen3 TTS accept audio.cpp-native GGUF checkpoints. By default the converter embeds JSON, tokenizer, processor, and chat template sidecars found beside the input checkpoint. Qwen3 ASR can therefore be distributed and loaded as a standalone model.gguf:

audiocpp_gguf \
  --input models/Qwen3-ASR-1.7B-hf/model.safetensors \
  --output models/Qwen3-ASR-1.7B-hf/model.gguf \
  --type q8_0

On Windows:

audiocpp_gguf.exe --input models\Qwen3-ASR-1.7B-hf\model.safetensors --output models\Qwen3-ASR-1.7B-hf\model.gguf --type q8_0

The forced aligner uses the same standalone layout:

audiocpp_gguf.exe --input models\Qwen3-ForcedAligner-0.6B\model.safetensors --output models\Qwen3-ForcedAligner-0.6B-Q8_0\model.gguf --type q8_0

Pass the resulting GGUF file or its containing directory to qwen3_asr.forced_aligner_model_path; no external sidecars are required.

Sidecar embedding is recursive and binary-safe, so nested tokenizer assets are portable too. Pass --no-sidecars to produce the older tensor-only layout. The converter supports f16, q8_0, q2_k, q3_k, q4_k, q5_k, and q6_k. It quantizes eligible projection matrices but keeps embedding/codebook lookup tables in F16 and leaves shapes that cannot use the selected block format unquantized. This mixed layout works across more ggml backends than blindly quantizing every 2-D tensor. Qwen loaders prefer model.gguf when both formats are present. Use --overwrite to replace an existing output.

For Qwen3 TTS, convert the main model.safetensors and the separate speech_tokenizer/model.safetensors independently, placing each output beside its source as model.gguf.

Quantization can reduce the reliability of Qwen3 ASR automatic language detection even when transcription quality remains good with a language hint. For known-language audio, pass --language explicitly; use f16 when maximum parity with the original checkpoint is more important than file size.

Older tensor-only GGUF files still require configuration, generation settings, processor files, and tokenizer files beside them and remain backward compatible. GGUF files produced for llama.cpp or whisper.cpp do not automatically work because those projects use architecture-specific tensor names and metadata.

With word timestamps:

audiocpp_cli --task asr --family qwen3_asr --model models/Qwen3-ASR-0.6B-GGUF/qwen3-asr-0.6b-q8_0.gguf --backend cuda --audio assets/resources/sample_16k.wav --language English --text "" --text-out transcript.txt --words-out words.json --session-option qwen3_asr.forced_aligner_model_path=models/Qwen3-ForcedAligner-0.6B-GGUF/qwen3-forced-aligner-0.6b-q8_0.gguf --session-option qwen3_asr.vad_model_path=assets/framework/models/silero_vad
OptionValuesDefaultMeaning
--audioWAV pathrequiredSpeech audio; use 16 kHz WAV for the examples.
--texttextempty stringContext prompt.
--languagelanguage codeempty stringRecognition language hint.
--max-tokensinteger512Maximum decode tokens.
--audio-chunk-secondsfloat seconds30, or 15 with --words-outTarget/max chunk length used before ASR inference.
--audio-chunk-modeauto, fixed, vad, noneautoLet the model choose, force fixed chunks, force internal VAD chunks, or disable model-side chunking.
--text-outTXT pathnot setTranscript output. The transcript is also printed to stdout.
--words-outJSON pathnot setWord timestamp output. Requires qwen3_asr.forced_aligner_model_path.
--session-option qwen3_asr.forced_aligner_model_path=<path>model directorynot setQwen3 Forced Aligner model used to generate word timestamps after ASR.
--session-option qwen3_asr.vad_model_path=<path>model directoryassets/framework/models/silero_vadOptional internal VAD model override for timestamp-safe chunking.

Qwen3 Forced Aligner

The forced aligner maps an exact transcript onto speech audio. It is not an ASR route: the transcript is required input. Standalone forced alignment does not chunk audio because exact transcript/audio chunk pairing cannot be inferred safely from a raw transcript. For long-audio timestamping, use Qwen3 ASR with --words-out and qwen3_asr.forced_aligner_model_path; ASR chunks the audio first, then aligns each recognized transcript to its matching audio chunk.

FieldValue
Familyqwen3_forced_aligner
GGUF modelmodels/Qwen3-ForcedAligner-0.6B-GGUF/qwen3-forced-aligner-0.6b-q8_0.gguf
Taskalign
Modesoffline
InputSpeech WAV plus exact transcript
OutputWord timestamp JSON through --words-out
audiocpp_cli --task align --family qwen3_forced_aligner --model models/Qwen3-ForcedAligner-0.6B-GGUF/qwen3-forced-aligner-0.6b-q8_0.gguf --backend cuda --audio assets/resources/sample_16k.wav --text "Some call me nature, others call me Mother Nature." --language English --words-out words.json
OptionValuesDefaultMeaning
--audioWAV pathrequiredSpeech audio; use 16 kHz WAV for the examples.
--textexact transcriptrequiredTranscript to align.
--languagelanguage coderequiredTranscript language.
--audio-chunk-modeauto, noneautoStandalone forced alignment runs one audio/transcript pair. fixed and vad are rejected because transcript chunk boundaries would be ambiguous.
--words-outJSON pathnot setWord timestamp output.

Weight Options

OptionValuesDefaultMeaning
`--session-option qwen3_tts.mem_saver=truefalse`boolfalse
--session-option qwen3_tts.voice_prompt_cache_slots=<n>integer1Voice-clone prompt cache slots. Set to 0 to disable prompt caching.
--session-option qwen3_tts.weight_type=<type>native, f32, f16, bf16, q8_0nativeTTS graph weight type.
--session-option qwen3_asr.weight_type=<type>native, f32, f16, bf16, q8_0nativeASR thinker weight type.
--session-option qwen3_forced_aligner.weight_type=<type>native, f32, f16, bf16, q8_0nativeAligner thinker weight type.