Views
No views yet
moss_tts_delay architecture, 32-codebook audio @ 24 kHz),
specialised for expressive voice acting.laion/moss-tts-local-transformer-4.55b-voice-acting
(merged, off-the-shelf).| this model — 8B delay | 4.55B local transformer | |
|---|---|---|
| audio tokenizer | MOSS-Audio-Tokenizer (v1) — 24 kHz mono | MOSS-Audio-Tokenizer-v2 — 48 kHz |
| output | 24 kHz (optionally bandwidth-extended with Sidon) | native 48 kHz, use raw |
| strengths | larger capacity, broad multilingual coverage | higher audio bandwidth out of the box, smaller/faster, measured higher word accuracy on identical prompts (invWER 0.97 vs 0.83) |
generate interface, same input schema.| Base model | OpenMOSS-Team/MOSS-TTS-v1.5 |
| Architecture | moss_tts_delay (delay-pattern TTS LM) |
| Backbone | Qwen3-8B |
| Parameters | ~8B (full fine-tune, no adapters) |
| Audio codec | 32-codebook RVQ, 24 kHz — OpenMOSS-Team/MOSS-Audio-Tokenizer (v1, mono) |
| Precision | bfloat16 |
| License | Apache-2.0 |
build_user_message fields:instruction — how to say it: the emotion, character, or performance direction
(e.g. "Speak like a weary old sailor telling a ghost story, low and gravelly.").text — what to say: the words to be spoken.language — the language of text (e.g. "English", "German", "Chinese"). Set it whenever the language is known; it improves multilingual stability.reference — optional audio (a file path, URL, or waveform tensor) to clone a voice. Omit it to let the model invent a voice consistent with the instruction.1from transformers import AutoModel, AutoProcessor
2import torch, torchaudio
3
4# Recommended SDPA backend settings (the cuDNN SDPA path is broken for this model)
5torch.backends.cuda.enable_cudnn_sdp(False)
6torch.backends.cuda.enable_flash_sdp(True)
7torch.backends.cuda.enable_mem_efficient_sdp(True)
8torch.backends.cuda.enable_math_sdp(True)
9
10model_id = "laion/moss-tts-v1.5-8b-voice-acting"
11device, dtype = "cuda", torch.bfloat16
12
13processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
14processor.audio_tokenizer = processor.audio_tokenizer.to(device)
15
16model = AutoModel.from_pretrained(
17 model_id,
18 trust_remote_code=True,
19 dtype=dtype,
20 attn_implementation="sdpa", # or "flash_attention_2" if installed
21).to(device).eval()
22
23def synth(message, out_path):
24 batch = processor([[message]], mode="generation")
25 with torch.no_grad():
26 outputs = model.generate(
27 input_ids=batch["input_ids"].to(device),
28 attention_mask=batch["attention_mask"].to(device),
29 max_new_tokens=4096,
30 )
31 audio = processor.decode(outputs)[0].audio_codes_list[0]
32 torchaudio.save(out_path, audio.unsqueeze(0).cpu().float(),
33 processor.model_config.sampling_rate)
34
35# 1) Expressive delivery, model invents a voice (no reference)
36synth(processor.build_user_message(
37 instruction="Excited and breathless, like sharing amazing news with a best friend!",
38 text="You will not believe what just happened. We actually did it!",
39 language="English",
40), "invented_voice.wav")
41
42# 2) Voice cloning — clone the timbre/style of a reference clip
43synth(processor.build_user_message(
44 instruction="Calm, warm, reassuring bedtime-story narrator.",
45 text="Once upon a time, in a quiet little village, everyone slept soundly.",
46 language="English",
47 reference=["/path/to/reference.wav"],
48), "cloned_voice.wav")processor.decode(...) returns a list of messages; each carries the decoded waveform in
message.audio_codes_list[0] at processor.model_config.sampling_rate (24 kHz).Sampling settings. A grid search over temperature and audio repetition penalty (scored for intelligibility, quality, and genuineness on a held-out English + German set) gives good defaults of temperature 1.0, repetition penalty 1.1 with a reference clip, and temperature 0.8, repetition penalty 1.1 without a reference. SeeGENERATION_SETTINGS.mdfor the full results table and per-metric best configs.
instruction. Emotion, character, pacing, and vocal-burst /
performance cues (laughter, sighs, gasps, whispering, shouting) belong in instruction, not in text.ä ö ü, not ae/oe/ue)
and avoid ALL-CAPS, which the model tends to mispronounce. Reserve capitals for normal
sentence casing.!, ?, ., and ... meaningfully shape
intonation and pauses — lean on them instead of capitalisation.language whenever you know it; it stabilises multilingual synthesis.instruction field; vague or contradictory instructions can
produce inconsistent delivery. Iterate on wording.