Instructions to use laion/moss-1.5-roleplay-finetune with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use laion/moss-1.5-roleplay-finetune with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-to-speech", model="laion/moss-1.5-roleplay-finetune", trust_remote_code=True)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("laion/moss-1.5-roleplay-finetune", trust_remote_code=True, dtype="auto") - Notebooks
- Google Colab
- Kaggle
MOSS-TTS-Local v1.5 — Role-Play & Creature-Voice Fine-Tune
A full-parameter fine-tune of
OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5
(4.55 B params, 12-codebook RVQ @ 48 kHz) for detailed voice-direction following — tone, mood,
emotion, and exaggerated character / creature voices (Zombie, Gollum-style, Orc, Goblin, Dragon,
Troll, …) — in English and German (with French/Spanish coverage), using the DramaBox prompt style.
You tell the model what to say (text) and how to say it (instruction), and it performs it.
Two checkpoints in this repo
- root (
./) →creatures_p9— recommended. Best for role-play, character & creature voices, emotional direction. Creature performance sits at the ground-truth ceiling.roleplay_p8_clean/→roleplay_p8— the clean-audio model before the creature pass; slightly stronger neutral studio-English narration, no creature emphasis.
Results
Reference-free proxy metrics (higher = better) vs. ground-truth toplines. vc_prompt
(voiceclap-small) measures voice↔direction match
(reliable for English); vc_text
(voiceclap-transcriptions) measures
speech↔transcript match (the reliable signal for German/French/Spanish).
| Capability | This model (creatures_p9) |
Ground-truth topline |
|---|---|---|
Creature/fantasy voices (vc_prompt) |
0.203 | 0.209 |
English role-play direction (vc_prompt) |
0.226 | 0.217 |
German intelligibility (vc_text) |
~0.21 | ~0.22 |
| Runaway generations (>35 s) | 0 / 319 | — |
Creature directions are followed as well as the real creature recordings; English role-play is above the topline; German intelligibility is near-topline; runaway generations are eliminated.
Usage
import torch, torchaudio
from transformers import AutoModel, AutoProcessor
repo = "laion/moss-1.5-roleplay-finetune" # creatures_p9 (root)
# repo, subfolder = "laion/moss-1.5-roleplay-finetune", "roleplay_p8_clean" # alternative
processor = AutoProcessor.from_pretrained(repo, trust_remote_code=True,
codec_weight_dtype="fp32", codec_compute_dtype="bf16")
processor.audio_tokenizer = processor.audio_tokenizer.to("cuda")
model = AutoModel.from_pretrained(repo, trust_remote_code=True,
dtype=torch.bfloat16, attn_implementation="sdpa").to("cuda").eval()
# Split the prompt at the quote: "how to say it" -> instruction, "what to say" -> text
conversation = [[processor.build_user_message(
instruction="You are a wretched, obsessive creature, your voice a strangled, hissing whisper "
"torn between fawning desperation and sudden menace.",
text="My precious... yes, yes, we wants it, we needs it.",
language="English",
)]]
batch = processor(conversation, mode="generation")
out = model.generate(input_ids=batch["input_ids"].to("cuda"),
attention_mask=batch["attention_mask"].to("cuda"),
max_new_tokens=1000, do_sample=True,
audio_temperature=1.2, audio_top_p=1.0, audio_top_k=25)
audio = processor.decode(out)[0].audio_codes_list[0] # stereo [2, samples]
torchaudio.save("out.wav", audio.cpu().float(), processor.model_config.sampling_rate)
Prompting tip: always keep the spoken words in text and the performance direction in
instruction — that matches how the model was trained and gives the highest fidelity. Vivid
second-person directions ("You are a massive ancient dragon, your voice a subterranean rumble…")
work well for creatures.
Training
Full fine-tune (no LoRA) on 2× RTX 3090 via DeepSpeed ZeRO-3 with the optimizer offloaded to CPU.
- Peak LR 2e-5, constant schedule (no warmup/decay); AdamW β=(0.9, 0.95), wd 0.1, bf16.
- Global batch 32 (per-device 4 × grad-accum 4 × 2 GPUs), gradient checkpointing, loss weighting text:audio = 1:32 across the 12 RVQ heads.
creatures_p9= phase 8 (2 epochs from base on a clean-audio mix) then 1 further epoch continuing from it, adding creature + multilingual-emotional data while keeping the phase-8 data as an anchor against forgetting.
Training data
| Dataset | Rows | Language | Role |
|---|---|---|---|
| TTS-AGI/ears-dramabox | 11,616 | EN | Studio voice-direction anchor |
| TTS-AGI/emotional-voice-acting-subset-v0.7 | 4,208 | EN + some DE/ES/FR | Emotional acting (CC-BY-NC) |
| TTS-AGI/emolia-german-dramabox | 19,572 | DE | German coverage (top-20k by DNSMOS) |
| laion/character-voices | 2,134 ×5 | EN | Creature / fantasy voices |
| laion/gemini-2.5-pro-tts-voice-profiles | 9,438 | EN/DE/FR/ES | Emotional + vocal-burst breadth |
(An earlier multilingual dataset, TTS-AGI/annotated-audio-tts-training, was used in exploratory
phases but excluded from the final clean-audio model — in-the-wild audio was found to dilute
studio prompt-adherence.)
Full pipeline, experiment log, and ablations: https://github.com/laion (see the project repo).
License & intended use
Released under CC-BY-NC-4.0 (non-commercial): the base model is Apache-2.0, but part of the training data (emotional-voice-acting-subset) is CC-BY-NC-4.0, so this derivative inherits a non-commercial restriction. For research, prototyping, and creative/role-play use.
Limitations
vc_promptis only a reliable metric for English audio; German/French/Spanish are judged byvc_textplus human listening.- French/Spanish role-play were validated on multilingual sets, not a dedicated role-play benchmark.
- Neutral studio-English narration is marginally weaker than a narration-specialised checkpoint
(use
roleplay_p8_clean/if that is your priority).
- Downloads last month
- 40