NeuTTS Nano โ€” GGUF

Neuphonic's NeuTTS Nano: compact English TTS with builtin voices and voice cloning.

Two files make one model, as with llama.cpp's multimodal projectors: the model file is the text-to-speech LM backbone, run by llama.cpp; the codec file holds the audio side (decoder / vocoder, speaker encoders and the adaptor between the two), run by codec.cpp. The runtimes below wire the two graphs together, on CPU or GPU (CUDA, Vulkan, Metal), fully offline.

Files

Every run needs one model file + one codec file from this repo.

--backbone --model (codec) Total
Recommended neutts-nano-q8_0.gguf codec-q8_0.gguf 634 MB
Smallest neutts-nano-q4_k_m.gguf codec-q4_k_m.gguf 513 MB
Best quality neutts-nano-f16.gguf codec-f16.gguf 993 MB
Other files
File Size
codec-f32.gguf 1.0 GB
codec-q5_k_m.gguf 323 MB
neutts-nano-bf16.gguf 467 MB
neutts-nano-f32.gguf 924 MB
neutts-nano-q2_k.gguf 190 MB
neutts-nano-q3_k_l.gguf 200 MB
neutts-nano-q3_k_m.gguf 196 MB
neutts-nano-q3_k_s.gguf 190 MB
neutts-nano-q4_0.gguf 194 MB
neutts-nano-q4_1.gguf 202 MB
neutts-nano-q4_k_s.gguf 205 MB
neutts-nano-q5_0.gguf 209 MB
neutts-nano-q5_1.gguf 216 MB
neutts-nano-q5_k_m.gguf 217 MB
neutts-nano-q5_k_s.gguf 214 MB
neutts-nano-q6_k.gguf 245 MB

Command line (codec.cpp)

With codec.cpp's tts-cli (build it; it bundles llama.cpp), then:

hf download BricksDisplay/NeuTTS-Nano-GGUF neutts-nano-q8_0.gguf codec-q8_0.gguf --local-dir NeuTTS-Nano

./build/tts-cli synthesize --backbone NeuTTS-Nano/neutts-nano-q8_0.gguf --model NeuTTS-Nano/codec-q8_0.gguf \
    --voice dave \
    --text "รฐษ™ bหˆษœหtสƒ kษ™nหˆuห slหˆษชd ษ”nรฐษ™ smหˆuหรฐ plหˆรฆล‹ks." --output out.wav

Clone a voice (the transcript is given in phonemes too):

./build/tts-cli synthesize ... --ref-audio my_voice.wav --ref-text "<phonemes of the clip>" \
    --save-speaker my_voice.gguf --text "<phonemes>" --output out.wav

All tts-cli options (voices, voice cloning, sampling, GPU) are described in the codec.cpp README.

Python

The codec_cpp package runs the same pipeline (it builds codec.cpp with its bundled llama.cpp, so it needs CMake and a C++ compiler):

pip install "codec-cpp @ git+https://github.com/mybigday/codec.cpp" huggingface_hub soundfile
import codec_cpp, soundfile
from huggingface_hub import hf_hub_download

tts = codec_cpp.TTS(hf_hub_download("BricksDisplay/NeuTTS-Nano-GGUF", "neutts-nano-q8_0.gguf"),
                    hf_hub_download("BricksDisplay/NeuTTS-Nano-GGUF", "codec-q8_0.gguf"))
audio, sr = tts.synthesize("รฐษ™ bหˆษœหtสƒ kษ™nหˆuห slหˆษชd ษ”nรฐษ™ smหˆuหรฐ plหˆรฆล‹ks.", voice="dave")
soundfile.write("out.wav", audio, sr)

tts.voices() lists the builtin voices; ref_audio= clones a voice where the model supports it; tts.stream(text) yields audio as it is generated. More in the Python docs.

React Native (llama.rn)

llama.rn loads the same two files on iOS and Android:

const ctx = await initLlama({ model: 'neutts-nano-q8_0.gguf', embedding: true })
await ctx.initVocoder({ path: 'codec-q8_0.gguf' })
const { prompt, grammar, embedding, flow } = await ctx.getFormattedAudioCompletion({
  prompt: 'Hello world',
  phonemizer: (text, lang) => toIPA(text, lang), // espeak-style IPA, see Input text
})
const result = await ctx.completion({ prompt, grammar, embedding })
const pcm = flow === 'continuous_embd'
  ? await ctx.decodeAudioEmbeddings(result.embeddings, result.embedding_dim)
  : await ctx.decodeAudioTokens(result.audio_tokens)

Voice cloning, saved voices and per-model notes: llama.rn TTS docs.

Input text

The model reads IPA phonemes, not plain text. Convert your text with espeak-ng (stress marks and punctuation kept), e.g. with Python's phonemizer:

from phonemizer.backend import EspeakBackend
g2p = EspeakBackend("en-us", preserve_punctuation=True, with_stress=True)
print(g2p.phonemize(["The birch canoe slid on the smooth planks."])[0])

Or build codec.cpp with -DCODEC_TTS_ESPEAK=ON and pass English text directly.

Sampling

The model files carry the recommended sampling as llama.cpp's general.sampling.* metadata, the settings of the original inference code; tts-cli, tts-server, llama.rn and any llama.cpp host apply them unless you set your own.

Setting Value tts-cli flag
temperature 1.0 --temp 1.0
top-k 50 --top-k 50
top-p 1.0 (off) --top-p 1.0
min-p 0 (off) --min-p 0.0

Sampling is limited to the speech tokens and the end token, and the end token is held back for the first 25 frames (--min-len).

Voices

Builtin: jo (default), dave, emily, paul, sophie, steven (English), plus mateo (Spanish), greta (German), juliette (French) for Neuphonic's other-language models. Voice cloning: --ref-audio with --ref-text.

License

Same terms as the original model: its LICENCE.

Downloads last month
2,085
GGUF
Model size
0.3B params
Architecture
distill_neucodec
Hardware compatibility
Log In to add your hardware

2-bit

3-bit

4-bit

5-bit

6-bit

8-bit

16-bit

32-bit

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

Model tree for BricksDisplay/NeuTTS-Nano-GGUF

Quantized
(3)
this model

Collection including BricksDisplay/NeuTTS-Nano-GGUF