backend/go/moss-tts-cpp/README.md
This backend runs the OpenMOSS MOSS-TTS-Local (v1.5) GGUF model through moss-tts.cpp, a from-scratch C++/ggml port with no Python at inference time. It generates 48 kHz stereo speech and supports reference-audio voice cloning.
The engine loads three GGUFs: the local transformer (the model), the
MOSS-Audio-Tokenizer neural codec, and the text tokenizer. It is loaded via
purego (cgo-less dlopen) exactly like qwen3-tts-cpp.
The model path points at the local transformer GGUF. The codec and text tokenizer are auto-discovered as siblings of the model:
*.gguf whose name contains audio + tokenizer (or codec),
e.g. moss-audio-tokenizer-v2-f32.gguf*.gguf whose name contains tokenizer,
e.g. moss-tokenizer-v1_5.ggufname: moss-tts-cpp
backend: moss-tts-cpp
parameters:
model: moss-tts-local-v1_5-q8_0.gguf
known_usecases:
- tts
tts:
audio_path: voices/default-reference.wav # optional model-wide clone reference
Override discovery when the filenames are non-standard:
options:
- "codec:moss-audio-tokenizer-v2-f32.gguf"
- "tokenizer:moss-tokenizer-v1_5.gguf"
- "seed:42"
GGUFs for the Local v1.5 model (plus its codec and tokenizer) live at mudler/MOSS-TTS-Local-Transformer-v1.5-GGUF.
MOSS-TTS-Local has no named speakers; cloning is driven purely by a
reference-audio path. Request precedence is: a request voice that ends in
a known audio extension (.wav, .flac, .mp3, .ogg, .m4a), then
tts.audio_path. The engine decodes the reference itself, so no client-side
resampling is required.
curl http://localhost:8080/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{
"model": "moss-tts-cpp",
"input": "This request uses a saved reference voice.",
"voice": "/path/to/reference.wav"
}' \
--output speech.wav
The labeled test loads real GGUFs, synthesizes a 48 kHz stereo WAV, and streams audio:
make -C backend/go/moss-tts-cpp moss-tts-cpp
MOSSTTS_MODEL=/path/to/moss-tts-local-v1_5-q8_0.gguf \
MOSSTTS_CODEC=/path/to/moss-audio-tokenizer-v2-f32.gguf \
MOSSTTS_TOKENIZER=/path/to/moss-tokenizer-v1_5.gguf \
MOSSTTS_LIBRARY=backend/go/moss-tts-cpp/libgomosstts-cpp-fallback.so \
go test ./backend/go/moss-tts-cpp -ginkgo.label-filter=e2e