alt.freeweights.speech / moss-tts-local-transformer-4.55b-voice-acting-v2
From: laion <huggingface.co/laion>Newsgroups: alt.freeweights.speechSubject:

moss-tts-local-transformer-4.55b-voice-acting-v2

Date: 2026-11-14Commit: 1aff170Signed: 2DC28CC7B26A283B ✓

Text to speech model with 4.1B parameters. Safetensors weights, 8.28 GB in all. Published by laion under Apache-2.0.

4.1B params8.28GBmoss-tts-local-transformer-4.55b-voice-acting-v2safetensorspermissive
FactsParams4.1BSize8.28 GBFormatssafetensorsTasktext to speechLicenseApache-2.0From sourcepermissive
$ fw get laion/moss-tts-local-transformer-4.55b-voice-acting-v2
# manifest sha256 1fff2c969024… · 8.28 GB · 19 files
$ fw verify ./moss-tts-local-transformer-4.55b-voice-acting-v2 laion/moss-tts-local-transformer-4.55b-voice-acting-v2
From sourceHosted (signed)laion/moss-tts-local-transformer-4.55b-voice-acting-v2Last check: 2026-11-14 21:34 UTC

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

Works with

Overview

Size
8.28 GB
Weights
8.26 GB (safetensors)
Parameters
4.1B
Formats
safetensors
Task
text to speech
License
Apache-2.0 (permissive)
Files
19, each with a sha256
Publisher
laion
Added
2026-11-14
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-14 21:34 UTCpassed

Model card

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

MOSS-TTS-Local 4.55B — Voice Acting v2 (48 kHz local transformer)#

An expressive voice-acting model: fantasy characters (orc / dragon / fairy / goblin), shouting, whispering, and vocal bursts (laughs, gasps, sighs, giggles, moans) driven by natural-language director instructions, in English and German.

Authors: Christoph Schuhmann and LAION.

What is new in v2#

This checkpoint is the latest and best in the line. It was obtained by taking the previous release — laion/moss-tts-local-transformer-4.55b-voice-acting — and running further supervised fine-tuning on additional synthetic voice-acting data. The extra data was self-generated with the model family and filtered with a Best-of-N reward (a lightweight VoiceCLAP-based genuineness + vocal-burst-blend + character reward that keeps only the strongest of many candidate takes per prompt), so the model learns from its own highest-quality performances — more consistent character delivery, more natural vocal bursts, and cleaner emotional range. It remains a full 4.55-billion-parameter local-transformer MOSS variant at 48 kHz and is a drop-in replacement for the previous release (same architecture, tokenizer, and prompt format).

Its sibling is the 8-billion-parameter delay-architecture model at 24 kHz: laion/moss-tts-v1.5-8b-voice-acting.

this model — 4.55B local transformer8B delay
architecturemoss_tts_local, 12-codebook RVQmoss_tts_delay, 32-codebook RVQ
audio tokenizerOpenMOSS-Team/MOSS-Audio-Tokenizer-v2 — 48 kHzOpenMOSS-Team/MOSS-Audio-Tokenizer — 24 kHz
outputnative 48 kHz (use raw — no post-processing needed)24 kHz (optionally band-width-extended with Sidon)
why pick ithigher audio bandwidth out of the box, fewer codebooks to predict per frame, smaller/faster (~0.87 s per 15 s clip at batch 64 on one A100)larger capacity

Off-the-shelf: this repository contains the fully merged weights (bf16). Load and generate; no adapter handling needed.

Further fine-tuning (v2)#

  • Additional data: a large corpus of synthetically generated, Best-of-N-filtered voice-acting performances, self-distilled from the model family — structured natural-language director instructions paired with spoken lines, covering fantasy characters, strong emotions, and vocal bursts (laughs, gasps, sighs, moans) in English and German. No third-party dataset names are disclosed.
  • Objective / filtering: candidates were ranked by a cheap automatic reward (VoiceCLAP-commercial embedding → genuineness + vocal-burst-blend + character probes) and only the top takes were kept, so the model is trained on its own strongest performances rather than raw generations.
  • Setup: 8×GPU DDP, fp32 master weights + 8-bit optimizer with bf16 compute (avoids the update-stagnation that pure-bf16 parameter fine-tuning suffers), gradient checkpointing, per-sample caption augmentation (randomly dropping the general voice description, the inline stage directions, or a fraction of the inline cues/pauses so the model learns to improvise them) and reference-audio dropout, linear LR schedule with warmup, channel-wise RVQ loss weighting. Released weights are the best checkpoint by cumulative genuineness + vocal-burst-blend on a held-out validation set.

Requirements#

pip install "transformers>=4.45" torch torchaudio safetensors huggingface_hub

The MOSS v2 audio codec (OpenMOSS-Team/MOSS-Audio-Tokenizer-v2) is pulled automatically. ~10 GB VRAM (bf16 + codec).

Prompt format — GENERAL: / SCRIPT: + plain text#

The model was trained on two fields per example:

  • instruction = the performance direction, written as two labelled blocks:
    • GENERAL: — the overall voice: age / gender / timbre / mood / delivery. For the most natural result, also state that it is a pristine, high-quality studio recording with no background noise and a genuine, spontaneous delivery ("like a real person in a real moment, not acted").
    • SCRIPT: — the spoken lines again, annotated in position with (delivery cues), vocal bursts such as (a soft laugh) / (gasp) / (sigh), and [pause] markers. The emotional arc can change line-by-line here — this is where you direct the performance.
  • text = just the plain spoken words — no cues, no brackets.

The words appear in both fields (plain in text, cue-annotated inside the SCRIPT block) — this is intentional and matches the training data. These two strings map directly onto generate(text=..., instruction=...) in the inference example below.

Exact template#
instruction =
GENERAL: <one or two sentences: voice / age / gender / timbre / mood / delivery arc; note "pristine high-quality studio recording, genuine and spontaneous">
SCRIPT:
(cue, cue, ...) first line of dialogue [pause] rest of the line
(cue, cue, ...) second line of dialogue
...

text =
<exactly the same spoken words, plain — no cues, no (), no []>
Example (an emotional arc: warm → shocked → furious)#
instruction =
GENERAL: A young man's voice — bright, warm and overjoyed, then it curdles into shocked disbelief and finally erupts into loud, aggressive, disgusted ranting. Completely natural and spontaneous, like a real person in a real moment, not acted. Pristine high-quality studio recording, no background noise.
SCRIPT:
(lighting up, warm, breathless with delight) Oh my god— hey! [pause] Is that really you?
(beaming, affectionate, a soft happy laugh) I can't believe it, look at you!
(the smile fading, confused, voice tightening) ...Wait. What is that?
(erupting, very loud, aggressive, furious and betrayed) You actually did it?! After everything I did for you?!
(ranting fast, seething, disgusted) God, it makes me sick. Get out of my sight.

text =
Oh my god— hey! Is that really you? I can't believe it, look at you! ...Wait. What is that? You actually did it?! After everything I did for you?! God, it makes me sick. Get out of my sight.

Tips: keep each (cue) short and place it right before the words it affects; put [pause] where you want a real beat; describe loud/aggressive/whispered etc. explicitly in the cue to push intensity. For a live, click-free streaming demo of this exact format, see laion/moss-voice-acting-playground.

Inference (complete)#

import torch, torchaudio
from transformers import AutoProcessor, AutoModel

REPO = "laion/moss-tts-local-transformer-4.55b-voice-acting-v2"
DEVICE = "cuda"

proc = AutoProcessor.from_pretrained(REPO, trust_remote_code=True,
                                     codec_path="OpenMOSS-Team/MOSS-Audio-Tokenizer-v2")
proc.audio_tokenizer = proc.audio_tokenizer.to(DEVICE).eval()
model = AutoModel.from_pretrained(REPO, trust_remote_code=True,
                                  dtype=torch.bfloat16,
                                  attn_implementation="sdpa").to(DEVICE).eval()

@torch.no_grad()
def generate(text, instruction, language="English", reference_codes=None, n=3):
    kw = dict(text=text, instruction=instruction, language=language)
    if reference_codes is not None:
        kw["reference"] = [torch.tensor(reference_codes, dtype=torch.long)]
    best = None
    for seed in range(n):
        torch.manual_seed(seed)
        batch = proc([[proc.build_user_message(**kw)]], mode="generation")
        out = model.generate(input_ids=batch["input_ids"].to(DEVICE),
                             attention_mask=batch["attention_mask"].to(DEVICE),
                             max_new_tokens=1200, do_sample=True,
                             audio_temperature=1.0, audio_top_p=0.95,
                             audio_top_k=25, audio_repetition_penalty=1.1)
        msg = proc.decode(out)[0]
        if not msg.audio_codes_list:
            continue
        wav = msg.audio_codes_list[0]                    # waveform @ 48 kHz
        if best is None or wav.shape[-1] > best.shape[-1]:
            best = wav
    return best

wav = generate(
    text="You dare enter my domain? Then you shall not leave alive!",
    instruction="As a mighty orc warrior with a deep, guttural, growling voice, "
                "bellow these words with brutal force.",
    language="English")
torchaudio.save("orc.wav", wav.cpu().float(), 48000)

Tips (measured on the model family): batch by repeating input_ids n× and calling generate once (batch 64 → ~0.87 s/clip on an A100); use SDPA (flash-attn 2.x is incompatible with this remote-code attention); without reference audio use audio_temperature=0.8; pass tokens ≈ words × 6 (12.5 Hz codec frames) via build_user_message to avoid rushed pacing. Generating N candidates and keeping the best (as in generate(..., n=...) above) is how the v2 training data itself was produced and is the recommended way to get top-quality takes.

Optional: clone a reference voice#

Pass 12-codebook MOSS codes of a reference clip to steer timbre; keep the instruction for the delivery (an empty instruction gives the highest speaker similarity):

ref_codes = proc.encode_audios_from_path(["my_reference.wav"], n_vq=12)[0]
wav = generate(text="...", instruction="", language="English", reference_codes=ref_codes)

⚡ Serving with SGLang-Omni (fast inference)#

For interactive or bulk dataset generation, serve this model with SGLang-Omni — an OpenAI-compatible speech server with continuous batching + CUDA graphs (measured on the model family at ~35× realtime for offline data-gen on 1× A100-80GB).

uv pip install sglang-omni soundfile
hf download laion/moss-tts-local-transformer-4.55b-voice-acting-v2

# NOTE the `env -u LD_LIBRARY_PATH` — without it the FIRST request SIGABRTs with
# `undefined symbol: cudnnGetLibConfig` (a leaked cuDNN path in the stage subprocess).
env -u LD_LIBRARY_PATH CUDA_VISIBLE_DEVICES=0 \
  sgl-omni serve \
    --model-path laion/moss-tts-local-transformer-4.55b-voice-acting-v2 \
    --config examples/configs/moss_tts_local.yaml --port 8000
curl -X POST http://localhost:8000/v1/audio/speech -H "Content-Type: application/json" \
  -d '{"input": "You dare enter my lair?!", "instructions": "A furious ancient dragon, low and booming."}' \
  --output dragon.wav

Notes#

  • The text_lm_head / audio_lm_heads "MISSING" note on load is benign weight-tying.
  • Same architecture, tokenizer and prompt format as the previous release — you can swap the repo id in existing code with no other changes.
  • License: Apache-2.0.

Previous version & background#

The v1 release, plus the full experiment write-up (temperature/best-of-N studies, reward variants, the character-archetype prompt studies and prompting playbook, fast-inference notes and audio demos), lives here: laion/moss-tts-local-transformer-4.55b-voice-acting · experiment overview · GitHub.

Files

19 files · 8.28 GBWeights 8.26 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 19 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
README.md12.0 KB8ea7b4ffad0e9f2169a066c266ee5da4bf493aa79359c3e9d0fd0b02983790d9
__init__.py254 Bfa22d925207c64e6701f9c5f97c3e14a9bad4db5c37060c6e5f1362c02bc8040
added_tokens.json790 B39bb49db6acfb8e7510b1640f575bdc183f511d85c94ce3ee967f2a6195c4a8a
chat_template.jinja4.17 KBa55ee1b1660128b7098723e0abcd92caa0788061051c62d51cbe87d9cf1974d8
config.json6.99 KB4c32ccf610315114d7ca5570662e62e9f5c41db36ad8bcc007dce8bfc9fa21f0
configuration_moss_tts.py7.16 KBab6debcb92032cb9dc91ae80aed77dbadd2e59848208baef2b062bd6def3f3be
generation_config.json95 B215f29f6b57440eb88eb67cf42a9899f4b9a3c1cc8553190a3cbb790ac34b4e2
gpt2_decoder.py30.9 KBf2e877104669f1e6c7cd34680f0da1a8a159e032123ee56b660b63929b6c8989
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors8.26 GBdec264542f015f59475c40f13f01ca6c25627eb518d52f7089a4d89874c5d3a4
modeling_moss_tts.py26.4 KBb0a66211943ae580b087f3e71495fea2f455701a4f6c29b6d3562218f7668c5f
processing_moss_tts.py37.5 KB059637b92e7eb9a67df531fe9578e9554d456195828b223eb81f21117c58e8f8
processor_config.json209 Bfac7289af2a37d988d708d813c92960e5e91c59d348c17b72c6aa6b86859f2b7
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
1aff170de5 pinned now manifest updated, same commit2026-11-14 21:34 UTC19 files · 8.28 GB
1aff170de52026-11-14 21:34 UTC19 files · 8.28 GB

Use it

$ fw get laion/moss-tts-local-transformer-4.55b-voice-acting-v2
# manifest sha256 1fff2c969024… · 8.28 GB · 19 files
$ fw verify ./moss-tts-local-transformer-4.55b-voice-acting-v2 laion/moss-tts-local-transformer-4.55b-voice-acting-v2
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/laion/moss-tts-local-transformer-4.55b-voice-acting-v2.json --dir ./moss-tts-local-transformer-4.55b-voice-acting-v2 $ python3 fw.py verify ./moss-tts-local-transformer-4.55b-voice-acting-v2 ./laion__moss-tts-local-transformer-4.55b-voice-acting-v2.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download laion/moss-tts-local-transformer-4.55b-voice-acting-v2 --revision 1aff170de525ea80ad916f89ce19b61fb2c1d25e --local-dir ./moss-tts-local-transformer-4.55b-voice-acting-v2

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-14
Text in
README.md
Text sha256
8ea7b4ffad0e9f2169a066c266ee5da4bf493aa79359c3e9d0fd0b02983790d9
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: laion <huggingface.co/laion>Newsgroups: alt.freeweights.speechSubject: moss-tts-local-transformer-4.55b-voice-acting-v2Date: 2026-11-14Commit: 1aff170Signed: 2DC28CC7B26A283B ✓
Upstream
laion/moss-tts-local-transformer-4.55b-voice-acting-v2
Pinned commit
1aff170de525ea80ad916f89ce19b61fb2c1d25e
Manifest
moss-tts-local-transformer-4.55b-voice-acting-v2.json · .minisig
Manifest sha256
1fff2c969024ca7da747113a8d58baf76b71c2cbde17a374f0b5ae8d05b945e5
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-14 21:34 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/laion/moss-tts-local-transformer-4.55b-voice-acting-v2.json $ curl -O https://freeweights.allternit.com/manifests/laion/moss-tts-local-transformer-4.55b-voice-acting-v2.json.minisig $ minisign -Vm moss-tts-local-transformer-4.55b-voice-acting-v2.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.

Fine-tunes
2
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download laion/moss-tts-local-transformer-4.55b-voice-acting-v2
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-4.55b-voice-acting-v2.json. Provenance. Takedown history: none.
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