Instructions to use zehan1/X2Streaming-TTS-1.7B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- TensorRT
How to use zehan1/X2Streaming-TTS-1.7B with TensorRT:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
X2Streaming-TTS-1.7B is a Qwen3-TTS 12 Hz CustomVoice model with one built-in
Mandarin voice, robot_service_v1, fine-tuned by X Square Robot from
Qwen3-TTS-12Hz-1.7B-Base.
It is the checkpoint served by the
Qwen3TTS-Streaming engine in
X Square Robot's spoken-dialogue stack and the checkpoint the
X2Streaming-TTS method and the
X2-NativeCursor
progress observer are released against.
The files are in the standard Qwen3-TTS Hugging Face layout, so the checkpoint loads
with the qwen_tts Python package for offline synthesis and exports unchanged through
the Qwen3TTS-Streaming pipeline for token-level streaming on TensorRT.
Model details
| Architecture | Qwen3TTSForConditionalGeneration, 1.7B Talker + Code Predictor, 12 Hz multi-codebook speech tokenizer, Code2Wav decoder |
| Base model | Qwen/Qwen3-TTS-12Hz-1.7B-Base |
| Model type | custom_voice (built-in speaker table) |
| Speaker | robot_service_v1 (speaker id 3000), a Mandarin service-assistant voice |
| Languages | Mandarin Chinese (primary), English (secondary) |
| Output | 24 kHz mono waveform |
| Precision | bfloat16 weights |
| Release version | cont7e3-f2b8ed5 (MODEL_VERSION file; the engine reports it in its version diagnostics) |
| License | Apache-2.0 |
Files
| File | Size | SHA-256 |
|---|---|---|
model.safetensors |
3.83 GB | 666b32d4b73e861d39aad1495d95b6fa5dacad186c42d00ff39d52297cf67966 |
config.json |
4.5 KB | c9bb0eedce066142902c7c219585189acb559d66cca956f08ca8731581a437c3 |
generation_config.json |
245 B | f1b90b4513f3b34c62851049e2492d7b4c5940daf1276f89c82b8ef04127f3aa |
preprocessor_config.json |
127 B | efdde1022ea9d76928bf7a9cd53139138f5ba2e466e837f08f6105ab1af1c119 |
tokenizer_config.json |
7.3 KB | dc3c31c3bdaedd5016382bb3cbe07323026775ad51f5a4fb564505992ae4a670 |
vocab.json |
2.78 MB | ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910 |
merges.txt |
1.67 MB | 599bab54075088774b1733fde865d5bd747cbcc7a547c5bc12610e874e26f5e3 |
MODEL_VERSION |
15 B | 46a822304a74dcb49ce29ed087590c042ea59d57737882394c7d456c3649ef14 |
speech_tokenizer/model.safetensors |
0.68 GB | 836b7b357f5ea43e889936a3709af68dfe3751881acefe4ecf0dbd30ba571258 |
speech_tokenizer/config.json |
2.3 KB | ee65bb901c876664ab8707c487157aa1a6ee57c65969b28fb5ec9dc211e68167 |
speech_tokenizer/configuration.json |
76 B | 6bc26d64eb5024b4d1dab5a52371958b429256d6c9d59787f1f5294a54e0cebd |
speech_tokenizer/preprocessor_config.json |
234 B | fcb3805e597e786d4067706e602f6688524640f8d3396790e2e09b5942fcbdfb |
SHA256SUMS in the repository lists the same digests in sha256sum format.
Quick start
Download
pip install -U "huggingface_hub[cli]"
huggingface-cli download zehan1/X2Streaming-TTS-1.7B \
--local-dir ./weights/X2Streaming-TTS-1.7B
Offline synthesis with qwen_tts
Install the official package from QwenLM/Qwen3-TTS,
then call generate_custom_voice with the built-in speaker:
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
model = Qwen3TTSModel.from_pretrained(
"./weights/X2Streaming-TTS-1.7B",
device_map="cuda:0",
dtype=torch.bfloat16,
)
print(model.get_supported_speakers()) # ['robot_service_v1']
wavs, sr = model.generate_custom_voice(
text="您好,我是服务助手,今天的室外温度是二十三摄氏度。",
language="Chinese",
speaker="robot_service_v1",
)
sf.write("output.wav", wavs[0], sr)
generation_config.json carries the sampling defaults used in production:
temperature 0.9, top_k 50, top_p 1.0, repetition_penalty 1.05.
Token-level streaming with Qwen3TTS-Streaming
The engine's autorun pipeline exports the checkpoint to ONNX, builds the TensorRT
engines and starts the service. The custom-1.7b variant reads its weights from
workspace/models/Qwen3-TTS-12Hz-1.7B-CustomVoice, so place (or symlink) the
downloaded directory there and skip the official download:
git clone --recursive https://github.com/X-Square-Robot/Qwen3TTS-Streaming.git
cd Qwen3TTS-Streaming
mkdir -p workspace/models
ln -s /path/to/weights/X2Streaming-TTS-1.7B workspace/models/Qwen3-TTS-12Hz-1.7B-CustomVoice
SKIP_MODELS=1 bash scripts/bash/autorun.sh all -m custom-1.7b --model-release-version cont7e3-f2b8ed5
Once the service is up, GET /v1/capabilities lists the exported speaker and the
supported tasks; the Python and browser SDKs, the native WebSocket protocol and the
OpenAI Realtime-compatible gateway are documented in the engine's
user guide
and deployment guide.
With the X2Streaming-TTS method
X2Streaming-TTS adds causal
commitment and causal speech-state inheritance on top of the engine through two hook
patches. Its README walks through applying the patches and running
scripts/run_checkpoint_e2e.py against this checkpoint.
With the X2-NativeCursor progress observer
X2-NativeCursor-Qwen3TTS-12Hz
is an 8.2 MB observer head that reads this model's codebook-0 tokens inside the engine
and publishes a reading cursor into the source text. Its model card explains how to
enable it (text_progress.estimator: native).
Training summary
The voice was obtained by fine-tuning Qwen3-TTS-12Hz-1.7B-Base in two stages on an internal synthetic Mandarin corpus for a single service-assistant speaker:
| Stage | Data | Epochs | Learning rate | Batch | Precision |
|---|---|---|---|---|---|
| 1 | 493 sentence-level utterances from an internal synthetic Mandarin corpus | 8 | 2e-6 | 8 | bf16 |
| 2 (this release) | the same 493 utterances, continued from stage 1 | 4 | 4e-7 | 8 | bf16 |
The speech tokenizer (speech_tokenizer/) is the official Qwen3-TTS-Tokenizer-12Hz,
included unchanged so that the directory is self-contained.
Intended use and limitations
- Intended use. Mandarin spoken-dialogue and service-assistant applications that need low first-audio latency, in particular token-level streaming from an upstream language model through Qwen3TTS-Streaming.
- Single voice. The checkpoint contains one speaker. Instruction-based style
control (
instruct) is supported by the architecture but was not a training target for this voice. - English. English text is synthesized, with lower naturalness than Mandarin.
- Streaming caveats. Token-level streaming can still produce hallucinated, repeated or dropped words on some inputs; the rate depends on the text and the segmentation policy. The engine's known limitations and the X2Streaming-TTS paper describe the failure modes and the mitigations (causal commitment, health-gated state inheritance).
- Numbers, dates and units. Read the text through a text normalizer before synthesis; the X2Streaming-TTS release includes the Chinese normalizer used in the paper. Some date, time and unit formats are misread when passed raw.
- Evaluation. The streaming evaluation protocol and results for the method are in the paper.
Citation
@article{wen2026x2streamingtts,
title = {X2Streaming-TTS: Causal Token-Level Text-to-Speech from Streaming Text with Speech-State Inheritance},
author = {Wen, Rime and Liu, Zehan and Qin, Shawn and Shi, Lights and Gan, Roy and Wang, Hao and Wang, Qian},
journal = {arXiv preprint arXiv:2608.18661},
year = {2026},
}
License
The weights are released under the Apache License 2.0, Copyright (c) 2026 XSquareRobot. They derive from Qwen3-TTS-12Hz-1.7B-Base and include the Qwen3-TTS-Tokenizer-12Hz, both released by the Qwen team under Apache-2.0; their notices apply to the corresponding components.
中文简介
X2Streaming-TTS-1.7B 是 X Square Robot 基于 Qwen3-TTS-12Hz-1.7B-Base 微调的
CustomVoice 模型,内置一个中文服务助手音色 robot_service_v1。它是 Qwen3TTS-Streaming
引擎在线服务所用的 checkpoint,也是 X2Streaming-TTS 方法与 X2-NativeCursor 进度观察器
发布时所对应的权重。文件采用 Qwen3-TTS 的标准 Hugging Face 布局:用 qwen_tts 包可以
离线合成,交给 Qwen3TTS-Streaming 的 autorun 流水线即可导出 TensorRT 做 token 级流式
合成。合成前请先做文本正则化(数字、日期、单位)。许可为 Apache-2.0。
- Downloads last month
- -