alt.freeweights.speech / MOSS-TTS-Local-Transformer-v1.5
From: OpenMOSS-Team <huggingface.co/OpenMOSS-Team>Newsgroups: alt.freeweights.speechSubject:

MOSS-TTS-Local-Transformer-v1.5

Date: 2026-11-15Commit: be7766aSigned: 2DC28CC7B26A283B ✓

Text to speech model with 4.6B parameters. Safetensors weights, 9.12 GB in all. Published by OpenMOSS-Team under Apache-2.0.

4.6B params9.12GBMOSS-TTS-Local-Transformer-v1.5safetensorspermissive
FactsParams4.6BSize9.12 GBFormatssafetensorsTasktext to speechLicenseApache-2.0From sourcepermissive
$ fw get OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
# manifest sha256 b8091485a7ca… · 9.12 GB · 18 files
$ fw verify ./MOSS-TTS-Local-Transformer-v1.5 OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
From sourceHosted (signed)OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5Last check: 2026-11-15 02:32 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Works with

Overview

Size
9.12 GB
Weights
9.10 GB (safetensors)
Parameters
4.6B
Formats
safetensors
Task
text to speech
License
Apache-2.0 (permissive)
Files
18, each with a sha256
Publisher
OpenMOSS-Team
Added
2026-11-15
Section
alt.freeweights.speech
Lineage

Original release from the publisher.

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:32 UTCpassed

Model card

From the publisher at commit be7766a. Shown as plain text with links; images open at the publisher.

MOSS-TTS Family#

&nbsp;&nbsp;&nbsp;&nbsp; Image: image

https://github.com/OpenMOSS/MOSS-TTS/tree/main https://huggingface.co/OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5 https://modelscope.cn/collections/OpenMOSS-Team/MOSS-TTS https://mosi.cn/#models

https://arxiv.org/abs/2603.18090 https://studio.mosi.cn https://studio.mosi.cn/docs/moss-tts https://x.com/Open_MOSS https://discord.gg/fvm5TaWjU3

MOSS-TTS-Local-Transformer-v1.5#

MOSS-TTS-Local-Transformer-v1.5 is continued from MOSS-TTS-Local-Transformer-v1.0. It preserves the main 1.0 capabilities, including zero-shot voice cloning, long-form speech generation, token-level duration control, Pinyin/IPA pronunciation control, multilingual synthesis, and code-switching. For the full 1.0 feature walkthrough, input schema, and evaluation tables, please refer to the MOSS-TTS-Local-Transformer-v1.0 README.

Compared with MOSS-TTS-Local-Transformer-v1.0, v1.5 focuses on the following improvements:

  • Higher-fidelity stereo audio modeling: v1.5 uses MOSS-Audio-Tokenizer-v2 as the audio tokenizer, supporting native 48 kHz stereo input and output for richer spatial detail and more natural perceived audio quality. Since the codec output is stereo, save the [channels, samples] tensor returned by processor.decode(...) directly.
  • Stronger multilingual synthesis with language tags: when the language field is omitted, v1.5 may improve some languages and regress slightly on others compared with 1.0. When the language is specified, v1.5 is stronger than 1.0 on almost all supported languages. Set the tag when building the user message, for example processor.build_user_message(text=text_fr, language="French").
  • More stable voice cloning: v1.5 improves speaker similarity and reduces cloning variance, making repeated generations more consistent.
  • Better long-reference, short-text cloning: v1.5 handles scenarios where the reference audio is much longer than the target text more reliably than 1.0.
  • More stable punctuation-following prosody: v1.5 follows punctuation-driven pauses more closely, especially in long sentences.
  • Explicit pause control: v1.5 supports inline pause markers such as "[pause 3.2s]". For example, 我今天学习了一首中国的古诗,它的名字是[pause 3.2s]静夜思! inserts an explicit 3.2s pause before 静夜思.

Supported Languages#

MOSS-TTS Local Transformer v1.5 supports 31 languages. It keeps the 20 languages supported by MOSS-TTS-Local-Transformer-v1.0 and extends multilingual continued training to additional languages including Cantonese, Dutch, Finnish, Hindi, Macedonian, Malay, Romanian, Swahili, Tagalog, Thai, and Vietnamese.

LanguageCodeFlagLanguageCodeFlagLanguageCodeFlag
Chinesezh🇨🇳Cantoneseyue🇭🇰Englishen🇺🇸
Arabicar🇸🇦Czechcs🇨🇿Danishda🇩🇰
Dutchnl🇳🇱Finnishfi🇫🇮Frenchfr🇫🇷
Germande🇩🇪Greekel🇬🇷Hebrewhe🇮🇱
Hindihi🇮🇳Hungarianhu🇭🇺Italianit🇮🇹
Japaneseja🇯🇵Koreanko🇰🇷Macedonianmk🇲🇰
Malayms🇲🇾Persian (Farsi)fa🇮🇷Polishpl🇵🇱
Portuguesept🇵🇹Romanianro🇷🇴Russianru🇷🇺
Spanishes🇪🇸Swahilisw🇹🇿Swedishsv🇸🇪
Tagalogtl🇵🇭Thaith🇹🇭Turkishtr🇹🇷
Vietnamesevi🇻🇳

Quick Start#

Environment Setup#

We recommend a clean, isolated Python environment with Transformers 5.0.0, or a recent Transformers version with Qwen3 support, to avoid dependency conflicts.

conda create -n moss-tts python=3.12 -y
conda activate moss-tts

Install all required dependencies:

git clone https://github.com/OpenMOSS/MOSS-TTS.git
cd MOSS-TTS
pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[torch-runtime]"
(Optional) Install FlashAttention 2#

For better speed and lower GPU memory usage, you can install FlashAttention 2 if your hardware supports it.

pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[flash-attn]" --no-build-isolation

If your machine has limited RAM and many CPU cores, you can cap build parallelism:

MAX_JOBS=4 pip install --extra-index-url https://download.pytorch.org/whl/cu128 -e ".[flash-attn]" --no-build-isolation

Notes:

  • Dependencies are managed in pyproject.toml, which currently pins torch==2.9.1+cu128 and torchaudio==2.9.1+cu128.
  • If FlashAttention 2 fails to build on your machine, you can skip it and use the default attention backend.
  • FlashAttention 2 is only available on supported GPUs and is typically used with torch.float16 or torch.bfloat16.
Basic Usage#

Tip: MOSS-TTS-Local-Transformer-v1.5 uses a fixed 12-codebook RVQ depth. Do not set n_vq_for_inference to a value different from config.n_vq.

MOSS-TTS-Local-Transformer-v1.5 provides the standard Hugging Face AutoProcessor and AutoModel interface. The examples below cover:

  1. Direct generation with language tags
  2. Voice cloning
  3. Duration control
  4. Explicit pause control with [pause X.Ys]
from pathlib import Path
from tqdm import tqdm
import importlib.util

import torch
import torchaudio
from transformers import AutoModel, AutoProcessor

# Disable the broken cuDNN SDPA backend on some CUDA/PyTorch combinations.
torch.backends.cuda.enable_cudnn_sdp(False)
# Keep these enabled as fallbacks.
torch.backends.cuda.enable_flash_sdp(True)
torch.backends.cuda.enable_mem_efficient_sdp(True)
torch.backends.cuda.enable_math_sdp(True)

pretrained_model_name_or_path = "OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5"
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.bfloat16 if device == "cuda" else torch.float32


def resolve_attn_implementation() -> str:
    # Prefer FlashAttention 2 when package + device conditions are met.
    if (
        device == "cuda"
        and importlib.util.find_spec("flash_attn") is not None
        and dtype in {torch.float16, torch.bfloat16}
    ):
        major, _ = torch.cuda.get_device_capability()
        if major >= 8:
            return "flash_attention_2"
    # CUDA fallback: use PyTorch SDPA kernels.
    if device == "cuda":
        return "sdpa"
    # CPU fallback.
    return "eager"


attn_implementation = resolve_attn_implementation()
print(f"[INFO] Using attn_implementation={attn_implementation}")

processor = AutoProcessor.from_pretrained(
    pretrained_model_name_or_path,
    trust_remote_code=True,
)
processor.audio_tokenizer = processor.audio_tokenizer.to(device)

text_zh = "亲爱的你,愿你的每一天都值得被记住,也值得被珍惜。"
text_en = "We stand on the threshold of the AI era, where intelligence becomes an extension of human creativity."
text_fr = "Bonjour, je voudrais essayer une voix francaise naturelle et stable."
text_pause = "我今天学习了一首中国的古诗,它的名字是[pause 3.2s]静夜思!"

# Use remote demo audio to avoid requiring local assets.
ref_audio_zh = "https://speech-demo.oss-cn-shanghai.aliyuncs.com/moss_tts_demo/tts_readme_demo/reference_zh.wav"
ref_audio_en = "https://speech-demo.oss-cn-shanghai.aliyuncs.com/moss_tts_demo/tts_readme_demo/reference_en.m4a"

conversations = [
    # Direct TTS. Language tags are recommended in v1.5 when the language is known.
    [processor.build_user_message(text=text_zh, language="Chinese")],
    [processor.build_user_message(text=text_en, language="English")],
    [processor.build_user_message(text=text_fr, language="French")],
    # Explicit pause control. Use [pause X.Ys], such as [pause 3.2s].
    [processor.build_user_message(text=text_pause, language="Chinese")],
    # Voice cloning with a reference audio.
    [processor.build_user_message(text=text_zh, reference=[ref_audio_zh], language="Chinese")],
    [processor.build_user_message(text=text_en, reference=[ref_audio_en], language="English")],
    # Duration control. At 12.5 frames per second, 125 frames is about 10 seconds.
    [processor.build_user_message(text=text_en, tokens=125, language="English")],
]

model = AutoModel.from_pretrained(
    pretrained_model_name_or_path,
    trust_remote_code=True,
    attn_implementation=attn_implementation,
    torch_dtype=dtype,
).to(device)
model.eval()

batch_size = 1
save_dir = Path("inference_root_moss_tts_local_v1_5")
save_dir.mkdir(exist_ok=True, parents=True)
sample_idx = 0

with torch.no_grad():
    for start in tqdm(range(0, len(conversations), batch_size)):
        batch_conversations = conversations[start : start + batch_size]
        batch = processor(batch_conversations, mode="generation")
        input_ids = batch["input_ids"].to(device)
        attention_mask = batch["attention_mask"].to(device)

        outputs = model.generate(
            input_ids=input_ids,
            attention_mask=attention_mask,
            max_new_tokens=4096,
            do_sample=True,
            audio_temperature=1.7,
            audio_top_p=0.8,
            audio_top_k=25,
            audio_repetition_penalty=1.0,
        )

        for message in processor.decode(outputs):
            if message is None:
                continue
            audio = message.audio_codes_list[0]
            out_path = save_dir / f"sample{sample_idx}.wav"
            sample_idx += 1
            # MOSS-TTS Local v1.5 codec returns stereo audio as [channels, samples].
            # Save the two-channel tensor directly.
            torchaudio.save(str(out_path), audio, processor.model_config.sampling_rate)

Generation Parameters#

ParameterRecommendedDescription
audio_temperature1.7Sampling temperature for audio RVQ layers.
audio_top_p0.8Nucleus sampling cutoff for audio RVQ layers.
audio_top_k25Top-k sampling cutoff for audio RVQ layers.
audio_repetition_penalty1.0Penalty for repeated acoustic token patterns.
n_vq_for_inference12Fixed by this release. Values other than config.n_vq are rejected.

Notes#

  • This repository uses Hugging Face remote code. Load it with trust_remote_code=True.
  • The MOSS-TTS-Local-Transformer-v1.5 codec is stereo. processor.decode(...) returns audio tensors shaped as [channels, samples], so save them directly with torchaudio.save(path, audio, sampling_rate).
  • Audio encoding and decoding use OpenMOSS-Team/MOSS-Audio-Tokenizer-v2.
  • The model configuration sets sampling_rate to 48000 and n_vq to 12.
  • If FlashAttention 2 is unavailable, the example falls back to SDPA on CUDA and eager attention on CPU.

SGLang Usage#

You can serve MOSS-TTS-Local-Transformer-v1.5 with SGLang-Omni, which exposes an OpenAI-compatible /v1/audio/speech API for reference-less synthesis, zero-shot voice cloning, streaming, duration control, and language/style hints.

See the MOSS-TTS-Local cookbook for installation, full API details, deployment config, benchmarking, and limitations.

Install and Serve#

Install sglang-omni by following the SGLang-Omni installation guide, then download and serve the model:

hf download OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5

sgl-omni serve \
  --model-path OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5 \
  --port 8000

A matching config file is available in SGLang-Omni at examples/configs/moss_tts_local.yaml.

Basic Speech#
curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"input": "SGLang-Omni is a great project!"}' \
  --output output.wav
Voice Cloning#

Provide a reference clip and its transcript for better speaker similarity. audio_path may be a local path readable by the server, an HTTP(S) URL, or a base64 data URI.

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "SGLang-Omni is a great project!",
    "references": [{
      "audio_path": "https://huggingface.co/datasets/zhaochenyang20/seed-tts-eval-mini/resolve/main/en/prompt-wavs/common_voice_en_10119832.wav"
    }]
  }' \
  --output output.wav

ref_audio and ref_text are accepted as shorthand for references[0].audio_path and references[0].text.

Streaming#

Set "stream": true, "response_format": "pcm", and "stream_format": "audio" to receive raw 48 kHz PCM chunks. Pipe the stream through ffmpeg to write a playable WAV file:

curl -N -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Get the trust fund to the bank early.",
    "ref_audio": "https://huggingface.co/datasets/zhaochenyang20/seed-tts-eval-mini/resolve/main/en/prompt-wavs/common_voice_en_10119832.wav",
    "stream": true,
    "response_format": "pcm",
    "stream_format": "audio"
  }' \
  | ffmpeg -f s16le -ar 48000 -ac 1 -i pipe:0 output_stream.wav
Duration, Markup, and Language#

Duration can be guided with an inline ${token:N} prefix or with token_count / duration_tokens. Inline markup such as [pause 0.5s], Pinyin, and IPA is passed through unchanged. Use language to hint the target language and instructions for free-form style guidance.

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "input": "${token:150}今天天气不错 [pause 0.5s] 就该出去晒晒太阳。",
    "ref_audio": "https://huggingface.co/datasets/zhaochenyang20/seed-tts-eval-mini/resolve/main/en/prompt-wavs/common_voice_en_10119832.wav",
    "language": "Chinese"
  }' \
  --output output_markup.wav

More Usage#

MOSS-TTS-Local-Transformer-v1.5 is API-compatible with MOSS-TTS-Local-Transformer-v1.0. For continuation with prefix audio, detailed UserMessage and AssistantMessage fields, generation hyperparameters, Pinyin/IPA preprocessing examples, and evaluation results, see the MOSS-TTS-Local-Transformer-v1.0.

Citation#

If you use this model, please cite the MOSS-TTS Technical Report.

Files

18 files · 9.12 GBWeights 9.10 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 18 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
README.md16.4 KBef63734dae2e6ac149a5c4fd75a916848abc1c8ef98fabc7dcb247d8ff4a3a04
__init__.py254 Bfa22d925207c64e6701f9c5f97c3e14a9bad4db5c37060c6e5f1362c02bc8040
added_tokens.json790 B39bb49db6acfb8e7510b1640f575bdc183f511d85c94ce3ee967f2a6195c4a8a
chat_template.jinja4.17 KBa55ee1b1660128b7098723e0abcd92caa0788061051c62d51cbe87d9cf1974d8
config.json10.0 KB826f81f163b1b557ad13f83c4f35008f4fee5a6cb6311b4316ff3dbb25149411
configuration_moss_tts.py7.16 KBab6debcb92032cb9dc91ae80aed77dbadd2e59848208baef2b062bd6def3f3be
gpt2_decoder.py30.9 KBf2e877104669f1e6c7cd34680f0da1a8a159e032123ee56b660b63929b6c8989
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors9.10 GB608f1ff64bc6caa9be836060fc7c78a15c4658c4a07b8d73c78d6f70d1b39c23
modeling_moss_tts.py26.4 KBb0a66211943ae580b087f3e71495fea2f455701a4f6c29b6d3562218f7668c5f
processing_moss_tts.py37.5 KB3fc5616b1ec3408162b7d859a7696725a40525313b20f9b31a06ee55c93bd7ad
processor_config.json210 Bdb574bfebad009e05193196a63a4eeecd353eeca177ccfff28b9379d595d88b7
qwen3_decoder.py25.5 KB100163bd7ecf31a59bafacc0b032ace9339edc992a3eb4cc80662502e04e46f0
special_tokens_map.json394 B02a153514db64e5378c53ef164c960409882649de6f4aac8f81f66218e7f8797
tokenizer.json11.4 MB06902d1fb775216338802205886a24bc715ccc606bd872a892e3d3c83ca1b9e2
tokenizer_config.json5.73 KBec2869dd4c9c7155b3460c291a6fb2b955e5068013ba7efbcaafd1c61e02abce
vocab.json2.78 MBca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
be7766a673 pinned now2026-11-15 02:32 UTC18 files · 9.12 GB

Use it

$ fw get OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
# manifest sha256 b8091485a7ca… · 9.12 GB · 18 files
$ fw verify ./MOSS-TTS-Local-Transformer-v1.5 OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5.json --dir ./MOSS-TTS-Local-Transformer-v1.5 $ python3 fw.py verify ./MOSS-TTS-Local-Transformer-v1.5 ./OpenMOSS-Team__MOSS-TTS-Local-Transformer-v1.5.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5 --revision be7766a6735b98bd793f7c79fb720b4d0f5d13b8 --local-dir ./MOSS-TTS-Local-Transformer-v1.5

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
ef63734dae2e6ac149a5c4fd75a916848abc1c8ef98fabc7dcb247d8ff4a3a04
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: OpenMOSS-Team <huggingface.co/OpenMOSS-Team>Newsgroups: alt.freeweights.speechSubject: MOSS-TTS-Local-Transformer-v1.5Date: 2026-11-15Commit: be7766aSigned: 2DC28CC7B26A283B ✓
Upstream
OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
Pinned commit
be7766a6735b98bd793f7c79fb720b4d0f5d13b8
Manifest
MOSS-TTS-Local-Transformer-v1.5.json · .minisig
Manifest sha256
b8091485a7ca8f25b1ba439e263a28a48847a35dec53e85c73f926be2ee663a0
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:32 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5.json $ curl -O https://freeweights.allternit.com/manifests/OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5.json.minisig $ minisign -Vm MOSS-TTS-Local-Transformer-v1.5.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

2 models in the catalog name this one as their parent.

Quantizations
2
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. MOSS-TTS-Local-Transformer-v1.5.json. Provenance. Takedown history: none.

Variants

2 quantized or adapter builds of MOSS-TTS-Local-Transformer-v1.5. Each has its own license check and page.

From: MIT <huggingface.co/MIT>Subject: ast-finetuned-audioset-10-10-0.4593
From: onnx-community <huggingface.co/onnx-community>Subject: ast-finetuned-audioset-10-10-0.4593-ONNX
From: Edge0 <huggingface.co/Edge0>Subject: Audio8-TTS-Preview-0.6b
From: Edge0 <huggingface.co/Edge0>Subject: Audio8-TTS-Realistic-Air
From: facebook <huggingface.co/facebook>Subject: audiobox-aesthetics
From: mlx-community <huggingface.co/mlx-community>Subject: chatterbox-4bit