Signed-off-by: Yueqian Lin <linyueqian@outlook.com> Signed-off-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com> Co-authored-by: Hongsheng Liu <liuhongsheng4@huawei.com>
MOSS-TTS-Nano
Model checkpoint
| Model | Description |
|---|---|
OpenMOSS-Team/MOSS-TTS-Nano |
0.1B AR LM + MOSS-Audio-Tokenizer-Nano codec, 48 kHz stereo, ZH/EN/JA |
Gradio Demo
An interactive Gradio demo is available with multilingual voice presets, custom voice cloning, and streaming support.
# Option 1: Launch server + Gradio together
./run_gradio_demo.sh
# Option 2: If server is already running
python gradio_demo.py --api-base http://localhost:8091
Then open http://localhost:7860 in your browser.
Features:
- 15 built-in voice presets (6 ZH · 4 EN · 5 JA)
- Custom voice cloning from uploaded reference audio
- Streaming mode (progressive PCM playback)
Launch the Server
vllm serve OpenMOSS-Team/MOSS-TTS-Nano --omni --port 8091
The deploy config at vllm_omni/deploy/moss_tts_nano.yaml auto-loads; no
--stage-configs-path, --trust-remote-code, or --enforce-eager flags
are needed.
Or use the convenience script:
./run_server.sh
Send TTS Request
Using curl
# Built-in voice preset
curl -X POST http://localhost:8091/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"input": "你好,这是语音合成测试。",
"voice": "Junhao",
"response_format": "wav"
}' --output output.wav
# English preset
curl -X POST http://localhost:8091/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"input": "Hello, this is MOSS-TTS-Nano.",
"voice": "Ava",
"response_format": "wav"
}' --output output_en.wav
Custom Voice Cloning
Provide a reference audio (base64 data URL) and its transcript:
REF_AUDIO=$(base64 -w 0 /path/to/reference.wav)
curl -X POST http://localhost:8091/v1/audio/speech \
-H "Content-Type: application/json" \
-d "{
\"input\": \"Hello, this is a cloned voice.\",
\"voice\": \"Junhao\",
\"ref_audio\": \"data:audio/wav;base64,${REF_AUDIO}\",
\"ref_text\": \"Exact transcript of the reference audio.\"
}" --output cloned.wav
Using Python
import httpx
response = httpx.post(
"http://localhost:8091/v1/audio/speech",
json={
"input": "你好,这是语音合成测试。",
"voice": "Junhao",
"response_format": "wav",
},
timeout=300.0,
)
with open("output.wav", "wb") as f:
f.write(response.content)
Streaming
curl -X POST http://localhost:8091/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"input": "Hello, streaming output from MOSS-TTS-Nano.",
"voice": "Ava",
"stream": true,
"response_format": "pcm"
}' --no-buffer | play -t raw -r 48000 -e signed -b 16 -c 2 -
Note: MOSS-TTS-Nano outputs at 48 kHz stereo (2-channel).
API Parameters
MOSS-TTS-Nano uses the standard /v1/audio/speech endpoint.
| Parameter | Type | Default | Description |
|---|---|---|---|
input |
string | required | Text to synthesize (ZH / EN / JA) |
voice |
string | "Junhao" |
Built-in voice name (see table below) |
response_format |
string | "wav" |
Audio format: wav, mp3, flac, pcm |
ref_audio |
string | null | Base64 data URL for custom voice cloning |
ref_text |
string | null | Transcript of reference audio (required when ref_audio is set) |
stream |
bool | false | Stream raw PCM chunks |
max_new_tokens |
int | 4096 | Maximum tokens to generate |
Built-in Voice Presets
| Voice | Language | Description |
|---|---|---|
Junhao |
ZH | Male, standard Mandarin |
Zhiming |
ZH | Male |
Weiguo |
ZH | Male |
Xiaoyu |
ZH | Female |
Yuewen |
ZH | Female |
Lingyu |
ZH | Female |
Ava |
EN | Female, American English |
Bella |
EN | Female |
Adam |
EN | Male |
Nathan |
EN | Male |
Sakura |
JA | Female |
Yui |
JA | Female |
Aoi |
JA | Female |
Hina |
JA | Female |
Mei |
JA | Female |
Troubleshooting
libnvrtc.so.13: cannot open shared object file: torchaudio 2.10+ defaults to torchcodec which requires NVRTC. vLLM-Omni patches this automatically at model load time to use soundfile instead.- Connection refused: Ensure the server is running on the correct port.
- Flashinfer version mismatch: Set
FLASHINFER_DISABLE_VERSION_CHECK=1if you see version warnings. - Out of memory: The default
gpu_memory_utilization=0.3is conservative. Increase it in the stage config if you have more VRAM available.