MOSS-TTSD is a spoken dialogue generation model designed for expressive multi-speaker synthesis. It features long-context modeling, flexible speaker control, a
MOSS-TTSD is a spoken dialogue generation model designed for expressive multi-speaker synthesis. It features long-context modeling, flexible speaker control, a
Start here: Installation · Quick start · Try the demo · v1.0 model weights · Evaluation
MOSS-TTSD is the long-form dialogue specialist within our open-source MOSS‑TTS Family. While foundational models typically prioritize high-fidelity single-speaker synthesis, MOSS-TTSD is architected to bridge the gap between isolated audio samples and cohesive, continuous human interaction. The model represents a paradigm shift from "text-to-speech" to "script-to-conversation." By prioritizing the flow and emotional nuances of multi-party engagement, MOSS-TTSD transforms static dialogue scripts into dynamic, expressive oral performances. It is designed to serve as a robust backbone for creators and developers who require a seamless transition between distinct speaker personas without sacrificing narrative continuity. Whether it is capturing the spontaneous energy of a live talk show or the structured complexity of a multilingual drama, MOSS-TTSD provides the stability and expressive depth necessary for professional-grade, long-form content creation in an open-source framework.
Note: For MOSS-TTSD v0.7 (including end-to-end SGLang inference), please refer to the legacy v0.7 docs for detailed instructions.
MOSS-TTSD currently supports 20 languages:
| Language | Code | Flag | Language | Code | Flag | Language | Code | Flag |
|---|---|---|---|---|---|---|---|---|
| Chinese | zh | English | en | German | de | |||
| Spanish | es | French | fr | Japanese | ja | |||
| Italian | it | Hebrew | he | Korean | ko | |||
| Russian | ru | Persian (Farsi) | fa | Arabic | ar | |||
| Polish | pl | Portuguese | pt | Czech | cs | |||
| Danish | da | Swedish | sv | Hungarian | hu | |||
| Greek | el | Turkish | tr |
To run MOSS-TTSD, you need to install the required dependencies. You can use pip and conda to set up your environment.
conda create -n moss_ttsd python=3.12 -y && conda activate moss_ttsd
pip install -r requirements.txt
pip install flash-attnMOSS-TTSD uses a continuation workflow: provide reference audio for each speaker, their transcripts as a prefix, and the dialogue text to generate. The model continues in each speaker's identity.
…You can use the provided inference script for batch inference. The script automatically uses all visible GPUs. You can control GPU visibility via export CUDA_VISIBLE_DEVICES=<device_ids>.
python inference.py \
--model_path OpenMOSS-Team/MOSS-TTSD-v1.0 \
--codec_model_path OpenMOSS-Team/MOSS-Audio-Tokenizer \
--input_jsonl /path/to/input.jsonl \
--save_dir outputs \
--mode voice_clone_and_continuation \
--batch_size 1 \
--text_normalizeParameters:
--model_path: Path or HuggingFace model ID for MOSS-TTSD.--codec_model_path: Path or HuggingFace model ID for MOSS-Audio-Tokenizer.--input_jsonl: Path to the input JSONL file containing dialogue scripts and speaker prompts.--save_dir: Directory where the generated audio files will be saved.--mode: Inference mode. Choices: generation, continuation, voice_clone, voice_clone_and_continuation. We recommend using voice_clone_and_continuation for the best voice cloning experience.--batch_size: Number of samples per batch (default: 1).--max_new_tokens: Maximum number of new tokens to generate. Controls total generated audio length (1s ≈ 12.5 tokens).--temperature: Sampling temperature (default: 1.1).--top_p: Top-p sampling threshold (default: 0.9).--top_k: Top-k sampling threshold (default: 50).--repetition_penalty: Repetition penalty (default: 1.1).--text_normalize: Normalize input text (recommended to always enable).--sample_rate_normalize: Resample prompt audios to the lowest sample rate before encoding (recommended when using 2 or more speakers).The input JSONL file should contain one JSON object per line. MOSS-TTSD supports 1 to 5 speakers per dialogue. Use [S1]–[S5] tags in the text field and provide corresponding prompt_audio_speakerN / prompt_text_speakerN pairs for each speaker:
{
"base_path": "/path/to/audio/files",
"text": "[S1]Speaker 1 dialogue[S2]Speaker 2 dialogue[S3]...[S4]...[S5]...",
"prompt_audio_speaker1": "path/to/speaker1_audio.wav",
"prompt_text_speaker1": "Reference text for speaker 1 voice cloning",
"prompt_audio_speaker2": "path/to/speaker2_audio.wav",
"prompt_text_speaker2": "Reference text for speaker 2 voice cloning",
"...": "...",
"prompt_audio_speaker5": "path/to/speaker5_audio.wav",
"prompt_text_speaker5": "Reference text for speaker 5 voice cloning"
}MOSS-TTSD v1.0 supports running the fused MOSS-TTSD and MOSS-Audio-Tokenizer model with the deeply extended SGLang from OpenMOSS, enabling efficient inference for audio generation.
First, clone the SGLang branch compatible with MOSS-TTSD v1.0.
git clone https://github.com/OpenMOSS/sglang -b moss-ttsd-v1.0-with-catpython -m venv moss_ttsd_sglang
source moss_ttsd_sglang/bin/activate
pip install ./sglang/python[all]conda create -n moss_ttsd_sglang python=3.12
conda activate moss_ttsd_sglang
pip install ./sglang/python[all]Before starting the service, first download MOSS-TTSD-v1.0 and MOSS-Audio-Tokenizer.
git clone https://huggingface.co/OpenMOSS-Team/MOSS-TTSD-v1.0
git clone https://huggingface.co/OpenMOSS-Team/MOSS-Audio-TokenizerOr:
hf download OpenMOSS-Team/MOSS-TTSD-v1.0 --local-dir ./MOSS-TTSD-v1.0
hf download OpenMOSS-Team/MOSS-Audio-Tokenizer --local-dir ./MOSS-Audio-TokenizerAfter the download is complete, run the following command to fuse MOSS-TTSD v1.0 and MOSS-Audio-Tokenizer into a single-directory model that can be loaded by SGLang. After fusion, the model uses voice_clone_and_continuation inference mode by default:
python scripts/fuse_moss_tts_delay_with_codec.py \
--model-path <path-to-moss-ttsd-v1.0> \
--codec-model-path <path-to-moss-audio-tokenizer> \
--save-path <path-to-fused-model>Then start the inference server with:
sglang serve \
--model-path <path-to-fused-model> \
--delay-pattern \
--trust-remote-code \
--port 30000 --host 0.0.0.0The first service startup may take longer due to compilation. Once you see
The server is fired up and ready to roll!, the service is ready. The first request after startup may still trigger a lengthy compilation, which is expected behavior, so please be patient.
Tip: The end-to-end inference service may cause some VRAM fragmentation during runtime. If GPU memory is tight, we recommend using
--mem-fraction-staticwhen starting SGLang to reserve enough space for intermediate tensors.
The service API is compatible with the standard multimodal text-generation interface. The text field in the returned JSON contains the base64-encoded WAV audio.
The repository currently provides a minimal request example script:
python scripts/request_sglang_generation.pyThis script will:
http://localhost:30000/generate by defaultasset/reference_02_s1.wav and asset/reference_02_s2.wav in the repository as reference audiooutputs/output.wavIf you need to change the reference audio, input text, sampling parameters, or server URL, you can directly edit the corresponding constants in scripts/request_sglang_generation.py.
We introduce a robust evaluation framework leveraging MMS-FA for word-level alignment and utterance segmentation and wespeaker for embedding extraction to derive Speaker Attribution Accuracy (ACC) and Speaker Similarity (SIM). Please refer to TTSD-eval for the code and data.
| Model | ZH - SIM | ZH - ACC | ZH - WER | EN - SIM | EN - ACC | EN - WER |
|---|---|---|---|---|---|---|
| Comparison with Open-Source Models | ||||||
| MOSS-TTSD | 0.7949 | 0.9587 | 0.0485 | 0.7326 | 0.9626 | 0.0988 |
| MOSS-TTSD v0.7 | 0.7423 | 0.9391 | 0.0517 | 0.6743 | 0.9266 | 0.1612 |
| Vibevoice 7B | 0.7590 | 0.9222 | 0.0570 | 0.7140 | 0.9554 | 0.0946 |
| Vibevoice 1.5 B | 0.7415 | 0.8798 | 0.0818 | 0.6961 | 0.9353 | 0.1133 |
| FireRedTTS2 | 0.7383 | 0.9022 | 0.0768 |
No open issues yet, or sync has not completed.