File size: 4,260 Bytes
eeecc06
 
 
 
 
 
 
 
 
 
5dcc182
 
eeecc06
 
 
5dcc182
eeecc06
5dcc182
eeecc06
5dcc182
 
 
eeecc06
 
 
5dcc182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eeecc06
5dcc182
eeecc06
 
 
5dcc182
 
 
 
 
eeecc06
5dcc182
eeecc06
5dcc182
 
 
 
 
 
 
 
 
 
eeecc06
5dcc182
eeecc06
5dcc182
eeecc06
5dcc182
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
---
license: apache-2.0
language:
- en
- zh
tags:
- gguf
- tts
- text-to-speech
- moss-tts
- moss-tts-realtime
- codec-lm
base_model: OpenMOSS-Team/MOSS-TTS-Realtime
---

# MOSS-TTS-Realtime GGUF

End-to-end GGUF conversion of [`OpenMOSS-Team/MOSS-TTS-Realtime`](https://huggingface.co/OpenMOSS-Team/MOSS-TTS-Realtime), runnable as a backbone + codec_lm + codec stack via stock [llama.cpp](https://github.com/ggerganov/llama.cpp) and [codec.cpp](https://github.com/mybigday/codec.cpp).

The model is a **Qwen3-2B language backbone + 4-layer `MossTTSRealtimeLocalTransformer` depth decoder + 17-channel emission** (cb-0 = a text token sampled from the Qwen3 backbone's `lm_head`; cb-1..16 = 16 RVQ audio codebooks of 1027 entries each). codec.cpp's `residual_depth_ar` codec_lm runtime handles the depth decoder + audio embed tables + per-AR-step state machine; the backbone runs in llama.cpp as a stock `qwen3` arch.

This replaces the earlier codec-only release: the LLM-part is now wired through codec.cpp's `codec_lm` infrastructure (see `tts_remaining_plan.md` in codec.cpp).

## Files

### Backbone (Qwen3 language_model, stock `qwen3` arch β€” 28 layers, hidden 2048, vocab 151936)

`moss-tts-realtime-<quant>.gguf` β€” produced by codec.cpp's `convert-backbone-to-gguf.py prep_moss_tts_realtime`, which unwraps `language_model.*` into the standard Qwen3 layout. `tie_word_embeddings=true` is inferred from the absence of a standalone `lm_head` tensor.

| File                                | Size    |
| ----------------------------------- | ------- |
| `moss-tts-realtime-f32.gguf`        | 4.5 GB  |
| `moss-tts-realtime-f16.gguf`        | 3.3 GB  |
| `moss-tts-realtime-bf16.gguf`       | 3.3 GB  |
| `moss-tts-realtime-q8_0.gguf`       | 1.8 GB  |
| `moss-tts-realtime-q6_k.gguf`       | 1.4 GB  |
| `moss-tts-realtime-q5_1.gguf`       | 1.3 GB  |
| `moss-tts-realtime-q5_k_m.gguf`     | 1.2 GB  |
| `moss-tts-realtime-q5_k_s.gguf`     | 1.2 GB  |
| `moss-tts-realtime-q5_0.gguf`       | 1.2 GB  |
| `moss-tts-realtime-q4_1.gguf`       | 1.1 GB  |
| `moss-tts-realtime-q4_k_m.gguf`     | 1.1 GB  |
| `moss-tts-realtime-q4_k_s.gguf`     | 1009 MB |
| `moss-tts-realtime-q4_0.gguf`       | 1004 MB |
| `moss-tts-realtime-q3_k_l.gguf`     |  955 MB |
| `moss-tts-realtime-q3_k_m.gguf`     |  894 MB |
| `moss-tts-realtime-q3_k_s.gguf`     |  825 MB |
| `moss-tts-realtime-q2_k.gguf`       |  740 MB |

### Codec + codec_lm (MOSS-Audio-Tokenizer 16 RVQ Γ— 1027 codebooks + `residual_depth_ar` adaptor)

`codec[-<quant>].gguf` β€” full MOSS-Audio-Tokenizer (1.6B, 24 kHz mono) bundled with the codec_lm adaptor: audio embed tables for the 16 RVQ heads, the 17th `text_embd` (~308 MB at F16), 4-layer depth decoder, and 16 codebooks_head slices. Produced by codec.cpp's `convert-to-gguf.py --model-type moss_audio --lm-source OpenMOSS-Team/MOSS-TTS-Realtime`.

| File                | Size    |
| ------------------- | ------- |
| `codec-f32.gguf`    | 6.1 GB  |
| `codec-f16.gguf`    | 3.9 GB  |
| `codec-q8_0.gguf`   | 2.4 GB  |
| `codec-q5_k_m.gguf` | 1.8 GB  |
| `codec-q4_k_m.gguf` | 1.6 GB  |

## Inference shape (text-modality codec_lm AR)

```
backbone (Qwen3, embeddings=true) hidden state h
    β†’ caller samples text token via llama_get_logits_ith β†’ text_tok
    β†’ codec_lm_state_set_text_context(state, text_tok)
    β†’ codec_lm_step_begin(state, h)
    β†’ for cb in 0..16: codec_lm_step_logits β†’ sample β†’ codec_lm_step_push_code
    β†’ codec_lm_step_finish β†’ codes[17]
    β†’ codec_lm_compose_audio_embd(codes) β†’ next-step embedding
    β†’ feed to backbone via b.embd; loop until codes[0] == EOS_text
```

After generation, slice cb-0 out of the (T Γ— 17) code matrix (it's a text token, not a codec value) and feed cb-1..16 into `codec_decode` to get 24 kHz mono PCM.

## Sources

- Upstream model: [`OpenMOSS-Team/MOSS-TTS-Realtime`](https://huggingface.co/OpenMOSS-Team/MOSS-TTS-Realtime)
- Audio codec: [`OpenMOSS-Team/MOSS-Audio-Tokenizer`](https://huggingface.co/OpenMOSS-Team/MOSS-Audio-Tokenizer)
- Conversion tooling: [`mybigday/codec.cpp`](https://github.com/mybigday/codec.cpp)
- Inference runtime: [`mybigday/llama.rn`](https://github.com/mybigday/llama.rn) (codec_lm AR text-modality path in `cpp/rn-tts.cpp`)