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

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

Date: 2026-11-14Commit: 371ac5cSigned: 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-actingsafetensorspermissive
FactsParams4.1BSize8.28 GBFormatssafetensorsTasktext to speechLicenseApache-2.0From sourcepermissive
$ fw get laion/moss-tts-local-transformer-4.55b-voice-acting
# manifest sha256 dff145745538… · 8.28 GB · 30 files
$ fw verify ./moss-tts-local-transformer-4.55b-voice-acting laion/moss-tts-local-transformer-4.55b-voice-acting
From sourceHosted (signed)laion/moss-tts-local-transformer-4.55b-voice-actingLast 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
30, 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 371ac5c. Shown as plain text with links; images open at the publisher.

📚 Experiment overview#

A full write-up of every experiment run with this model — temperature/sampling scaling (best temp with/without reference), best-of-N group-size studies, reward variants (V1–V6), the VoiceCLAP-small blend scorer, the FAIR eval, character/emotion studies, and voice cloning — with results and links to the live grids:

➡️ Full experiment overview (GitHub: LAION-AI/laion-moss-local-1.5-voice-acting-4.55b)

🎭 Character archetype prompt study#

🏆 THE FINAL SHOWCASE — 13 Character Voices, Directed by Prompt#

The capstone of the study: the round-5 best-of-64 champions for all 13 voices (zombie · ork · goblin · dragon · evil-ghost · mouse · fairy · ranting · pain-scream · ASMR man/woman · grieving woman/man), each with its exact reusable director instruction, listenable champion audio + a freshly recomputed 57-dim VoiceNet profile and procedural caption, its char / char_emo / blend / genu / invWER scores, signature dimensions and firing emotions. Includes the complete 13-principle prompting playbook (reusable template + effect→words lookup + per-character round-5 recipes) and the round-1→5 improvement-arc table. All zero-shot, no reference audio. → projects.laion.ai/.../voices.html

An evolutionary search for the natural-language performance instruction that best embodies each of 10 character/style archetypes (zombie, orc, fairy, mouse, dragon, goblin, ASMR man/woman, ranting, pain-scream) with this model — no reference audio, scored by a VoiceNet 57-dimension reward (blend + genuineness + 1.5·character). ~60 listenable takes with per-clip voice profiles, the full reward method, compute breakdown, and a consolidated prompting lessons playbook:

➡️ Character archetype prompt study

➡️🔥 Character archetype prompt study — round 2 (emotion-aware) — the same 10 archetypes re-optimized with an EmoNet emotion score added to the reward (0.5·blend + 0.5·genu + 2.0·char_vn + 1.5·char_emo; blend/genuineness halved, character pushed harder). Shows the round-1 → round-2 jump per archetype (e.g. the ranting fix and new goblin/zombie emotion gains). ➡️🎚️ Character archetype prompt study — round 3 (resonance · pitch · dominance) — re-optimized again exploiting chest/throat/nasal/head resonance, register & pitch-range, and commanding-vs-meek dominance dims; shows the round-1 → 2 → 3 char progression. ➡️🎯 Character archetype prompt study — round 4 (weighted dims & emotions + 3 new voices) — introduces per-dimension and per-emotion reward weights; re-tunes 4 archetypes (goblin more evil Malevolence ×2.5 char_emo 0.28→0.67; mouse higher pitch RANG ×2.5 char 0.76→0.87; pain-scream with real screams in the text + Arousal ×2.5 char_emo 0.81→0.94; ranting arousal-weighted) and builds 3 new voices from scratch — a breathy evil ghost, a crying woman and a crying man (Sadness ×2.5, char_emo 0.92 / 0.89). 📘 Practical prompting guide — a for-dummies per-archetype cheat-sheet (copy-paste champion instructions, recipes, template). ➡️🏆 Round 5 — the final 13-voice showcase — all 13 best-of-64 champions with reusable prompts + the complete prompting playbook and round-1→5 improvement arc.

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

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.

This is the 4.55-billion-parameter local-transformer MOSS variant at 48 kHz. 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; measured slightly lower word accuracy on identical prompts (invWER 0.83 vs 0.97)

Off-the-shelf: this repository contains the fully merged weights — the voice-acting LoRA (rank 256, 1M training samples) is already folded into the base fine-tune. Load and generate; no adapter handling needed.

🎧 Listen: production best-of-64 grid — top-3 raw takes per group across 40 emotions, with scores. Full generation recipe (prompting, scoring, rewards, throughput): SYNTHETIC_DATA_RECIPE.md.

🎧 Listen — best-of-64 samples#

Ten different emotions, each the top-scoring take out of 64 for its prompt, generated with this model (reference-less, natural-language director instructions, raw 48 kHz). The spoken line is shown above each clip. More: the full best-of-64 grid.

Affection — “I feel the very cosmos aligning when I am near you, as if destiny itself whispers your name on the wind. My heart, a humble offering, beats only for your grace, a symphony of devotion played solely for your ears. Forever and always, my love.”

Amusement — *“Huh, so, like, maybe the pigeons are smarter than they look, huh?”*

Anger — “How many times I gotta tell you, huh? You think you're so damn smart, just walkin' all over me? I'm about to lose it, swear to God.”

Astonishment / Surprise — *“That just happened, didn't it... Achoo! Wait, did I just sneeze glitter?”*

Awe — “Right, so, like, how did they even DO that? That's just... well, that's seriously the most unbelievable thing I think I've ever seen, seriously.”

Bitterness — “I should have known better than to trust in hope, for hope, like a venomous serpent, only coils around your heart to deliver the fatal bite of disappointment.”

Concentration — “So, alright, focusing up here; gotta nail this thing first try. Yeah, that's it, need to keep the energy up and pay attention to the objective to get it right on the spot.”

Confusion — “I don't get it, like at all, what's even going on? Seriously, am I missing something super obvious here, or is everyone messing with me? This is just wild, man, totally lost!”

Contemplation — “That's kinda weird, innit? Maybe I'm overthinking it, though, just lost in thought, like, proper deep. Still, makes you wonder, doesn't it?”

Contentment — “Ah, the tears of a battle fought and won, a war finally over. Peace now descends, wrapping me in its gentle embrace, a soothing balm to a weary soul. At long last, I am home.”

Training data#

  • DramaBox distillation — voice-acting performances distilled from DramaBox-style prompts (structured director's instructions + spoken lines), vocal-burst / strong-emotion filtered.
  • Gemini TTS distillation — audio-matched fixed prompts with MOSS RVQ tokens.
  • Emolia — German emotional speech.
  • Podcast snippets from publicly available podcasts on the web.

Training: 8×GPU DDP, bf16, gradient checkpointing, global batch 128, warmup 0.03 + linear decay; rank-256 LoRA (α=256) over all attention + MLP projections, then merged into the weights.

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 (DramaBox style)#

Split each line into two parts:

  • instruction = the voice / performance description and stage directions (what is written outside the double quotes), e.g. "As a mighty orc warrior with a deep, guttural, growling voice, bellow these words." Describe vocal bursts as director notes, e.g. (a soft chuckle), (gasping).
  • text = the spoken words (what is written inside the double quotes).

Inference (complete)#

import torch, torchaudio
from transformers import AutoProcessor, AutoModel

REPO = "laion/moss-tts-local-transformer-4.55b-voice-acting"
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): 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.

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 1× A100-80GB:

metricvalue
time-to-first-audio (streaming, 1 req)~0.74 s
single-stream real-time factor~4.5× realtime
offline data-gen throughput (peak)~35× realtime ≈ 35 audio-hours per A100-hour (concurrency 96, ~68 GB VRAM)

Minimal setup and serve:

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

# 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 \
    --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

To hit ~35× realtime for dataset generation: raise max_running_requests to 64 and capture CUDA graphs up to batch 64, then drive ~96 concurrent non-streaming requests. Full step-by-step setup, the complete /v1/audio/speech API (reference-less / voice-clone / streaming), every startup trap with its fix, and the detailed tuning tables are in the SGLang-Omni serving guide (A100).

Notes#

  • The text_lm_head / audio_lm_heads "MISSING" note on load is benign weight-tying.
  • License: Apache-2.0.

Repository#

Code, inference guide, fast-inference measurements, SGLang/streaming notes and audio demos: https://github.com/LAION-AI/laion-moss-local-1.5-voice-acting-4.55b

Files

30 files · 8.28 GBWeights 8.26 GB (safetensors). Sizes and sha256 from the signed manifest.
Show all 30 files with their sha256
FileSizesha256
.gitattributes2.10 KB9466760b8e04587019a6f414933ec6f777679fd9df7c5bcc11f8846a295b44f4
README.md16.3 KB265534252acd36de299cbb6714d6af2dec4bbf06d1aa23469e7054b1d803fd86
__init__.py254 Bfa22d925207c64e6701f9c5f97c3e14a9bad4db5c37060c6e5f1362c02bc8040
added_tokens.json790 B39bb49db6acfb8e7510b1640f575bdc183f511d85c94ce3ee967f2a6195c4a8a
chat_template.jinja4.17 KBa55ee1b1660128b7098723e0abcd92caa0788061051c62d51cbe87d9cf1974d8
config.json6.99 KB5f87c157fa277ece90bbd4e8e9859680c9ee171442e35fc9e6597aac6cbab8d5
configuration_moss_tts.py7.16 KBab6debcb92032cb9dc91ae80aed77dbadd2e59848208baef2b062bd6def3f3be
finetune_args.json2.08 KB0e2105a87c87579cdd536a8238a4a53ddd478f55f9cc2fd4c50193f60a547b29
generation_config.json95 B215f29f6b57440eb88eb67cf42a9899f4b9a3c1cc8553190a3cbb790ac34b4e2
gpt2_decoder.py30.9 KBf2e877104669f1e6c7cd34680f0da1a8a159e032123ee56b660b63929b6c8989
merges.txt1.67 MB8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5
model.safetensors8.26 GB03ccbc568dbc47e75dc20659b362f1740b23f3ceb45759472d6e3c2c47f9f730
modeling_moss_tts.py26.4 KBb0a66211943ae580b087f3e71495fea2f455701a4f6c29b6d3562218f7668c5f
processing_moss_tts.py37.5 KB059637b92e7eb9a67df531fe9578e9554d456195828b223eb81f21117c58e8f8
processor_config.json209 Bfac7289af2a37d988d708d813c92960e5e91c59d348c17b72c6aa6b86859f2b7
qwen3_decoder.py25.5 KB100163bd7ecf31a59bafacc0b032ace9339edc992a3eb4cc80662502e04e46f0
samples/affection.mp3335 KBc53a5b600746e2410b668a6d9231fc32df551d8bc542a35c82aa9ca84259dd3f
samples/amusement.mp398.3 KB3ced3d0bae2124c0b9191cada81cedf660e3d2d926c40619aaaf983532f8216b
samples/anger.mp3204 KB59db78a6d0965bcbcb1cbfb333eb944f3c38e698732a049d8c989a246d880a10
samples/astonishment.mp3102 KB99e16a8c63a0d28eeb4391577ea13897714fdd524441e5b57234f61336a858c5
samples/awe.mp3184 KBfb491334d930a66d8ed4ef2a8084d654a59c3d50c950d69e3706e301986ea6d3
samples/bitterness.mp3215 KBb3d9b176c98b1ce6fc8d7b45963c5175b51ee3fec3e6668051f59b77ce242961
samples/concentration.mp3225 KBd4b0c8125efde6a90fb92d69ba3322d87fdf03634a84f2b16eb9a20b50d35bae
samples/confusion.mp3234 KB02f938bcec48272906b05e2a12ce91b4d863510155919eef3424a17bd16b6b1d
samples/contemplation.mp3181 KBa559624dea3b50cdbb05ad2aa3ddc023d6d566cc528f4612c529bcac0eaa387e
samples/contentment.mp3353 KB403683471ae8fcc7765e170b08f1efb0c93712afeb965416d00994a3630dd34c
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
371ac5c6e0 pinned now manifest updated, same commit2026-11-14 21:34 UTC30 files · 8.28 GB
371ac5c6e02026-11-14 21:34 UTC30 files · 8.28 GB

Use it

$ fw get laion/moss-tts-local-transformer-4.55b-voice-acting
# manifest sha256 dff145745538… · 8.28 GB · 30 files
$ fw verify ./moss-tts-local-transformer-4.55b-voice-acting laion/moss-tts-local-transformer-4.55b-voice-acting
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.json --dir ./moss-tts-local-transformer-4.55b-voice-acting $ python3 fw.py verify ./moss-tts-local-transformer-4.55b-voice-acting ./laion__moss-tts-local-transformer-4.55b-voice-acting.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 --revision 371ac5c6e03501e9d07a01baa474d6f52ac735b4 --local-dir ./moss-tts-local-transformer-4.55b-voice-acting

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
265534252acd36de299cbb6714d6af2dec4bbf06d1aa23469e7054b1d803fd86
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-actingDate: 2026-11-14Commit: 371ac5cSigned: 2DC28CC7B26A283B ✓
Upstream
laion/moss-tts-local-transformer-4.55b-voice-acting
Pinned commit
371ac5c6e03501e9d07a01baa474d6f52ac735b4
Manifest
moss-tts-local-transformer-4.55b-voice-acting.json · .minisig
Manifest sha256
dff1457455383eb4857b811cd78749c132f4ba3f3eaf37c5e17d7bd85287a769
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.json $ curl -O https://freeweights.allternit.com/manifests/laion/moss-tts-local-transformer-4.55b-voice-acting.json.minisig $ minisign -Vm moss-tts-local-transformer-4.55b-voice-acting.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

No related models in this catalog.Nothing here lists this model as its parent, and it names no parent.
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download laion/moss-tts-local-transformer-4.55b-voice-acting
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.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