MOSS-TTSD β€” GGUF for audio.cpp

Self-contained GGUF packages of OpenMOSS-Team/MOSS-TTSD-v1.0, for audio.cpp. Each file carries the 8B delay-pattern backbone, the MOSS-Audio-Tokenizer v1 codec (both encoder and decoder, because cloning needs the encoder), the tokenizer and the model spec β€” nothing else to download.

MOSS-TTSD speaks a speaker-tagged dialogue in one take: [S1] and [S2] mark who is talking, and each tag can carry its own reference recording.

file backbone codec size clones on 24 GiB
moss_ttsd_q8_0_codec_f16.gguf q8_0 f16 12.2 GB yes
moss_ttsd_q4_k_codec_f16.gguf q4_k (f16 heads) f16 9.5 GB yes
moss_ttsd_bf16_codec_f16.gguf bf16 f16 18.9 GB no

OpenMOSS-Team/MOSS-TTSD-v1.0 ships no codec weights β€” its processor resolves OpenMOSS-Team/MOSS-Audio-Tokenizer at load time β€” so both are listed as parent models. This checkpoint reads the first 16 of that codec's 32 RVQ layers.

⚠ bf16 cannot clone on a 24 GiB card

Cloning needs the codec encoder as well as the decoder, and its weights want a further 3.5 GB on top of the backbone. On an RTX 3090 that fails allocating moss.audio_tokenizer.encoder. Plain generation in bf16 is fine; to clone on 24 GiB use q8_0, which did it in 12.7 s including load.

The q4_k package keeps its heads at f16

A plain q4_k of this model is broken, and quietly: it speaks the first turn of a dialogue and stops. lm_heads.0 is the text head, which decides when the turn ends, and at four bits it ends it early.

q4_k, heads quantised   2.6-3.2s  first turn only, sometimes with a garbled tail
q4_k, heads at f16      9.1-16.5s full script
q8_0                    10-12.5s  full script

So this package is built with --keep-type "model_weights/lm_heads*=f16", which costs 0.95 GB over a plain q4_k and is the difference between usable and not.

⚠ Speaker identity drifts across turns

This is the model, not the conversion or the engine. Measuring median F0 per turn against two references 84 Hz apart, over three runs of the reference PyTorch implementation and one of audio.cpp:

run                S1 turn1  S1 turn2  S2 turn1  S2 turn2
reference run 1      200.0     110.3     154.8     131.9
reference run 2      203.4     102.8     179.1     160.0
reference run 3      208.8     104.8     161.1     152.5
audio.cpp (seed 7)   210.5     120.6     166.7     164.4
references:          S1 = 201.7 Hz, S2 = 117.6 Hz

The first speaker's first turn matches its reference closely. By that speaker's second turn the pitch has fallen to roughly the other reference's, and the second speaker sits between the two throughout. The reference implementation does this in every run and audio.cpp reproduces the pattern at the same magnitude β€” which is the parity result, on a feature that does not hold up.

Median F0 is a crude stand-in for speaker identity, and this is four runs of one configuration with short references (3.4 s and 4.2 s) where the model card's own example uses much longer ones. Read it as "identity drifts across turns", not as a measured rate.

Usage

audiocpp_cli --task tts --family moss_ttsd --model /path/to/MOSS-TTSD-GGUF \
  --backend cuda --language English \
  --text "[S1] So what did you make of it? [S2] Honestly, I was not expecting that ending." \
  --out dialogue.wav

Cloning takes one reference per speaker, positional, plus what those recordings say β€” the model continues from the reference audio, so the transcript has to line up with it:

audiocpp_cli --task clon --family moss_ttsd --model /path/to/MOSS-TTSD-GGUF \
  --backend cuda --language English \
  --request-option voice_samples=/path/to/s1.wav,/path/to/s2.wav \
  --request-option "reference_text=[S1] First voice here. [S2] Second voice here." \
  --text "[S1] The train leaves at four. [S2] I packed already." \
  --out dialogue.wav

The number of entries is the number of speakers, and an entry with no path is a speaker that is named but not cloned:

voice_samples= speakers
s1.wav,s2.wav both cloned
s1.wav, [S1] cloned, [S2] invented
,s2.wav [S1] invented, [S2] cloned
s1.wav one speaker only β€” no [S2] is implied

So the trailing separator is meaningful, not a typo.

Downloads last month
-
GGUF
Hardware compatibility
Log In to add your hardware

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for christopherthompson81/MOSS-TTSD-GGUF

Quantized
(5)
this model