Irodori-TTS-v4.1-Small-MF GGUF for speech.cpp
These files run only in speech.cpp 0.8.0 or later. Their layout is speech.cpp's own, so llama.cpp, LM Studio, Ollama and other programs that read GGUF cannot run them.
It holds Aratako's Irodori-TTS v4.1-Small-MF and its codec, Semantic-DACVAE-Japanese-32dim, in one file. It speaks Japanese, a sentence at a time, in the voice of a reference recording, in a voice described in words, or in a voice the model chooses, and passes the audio as the codec decodes it. It samples in 4 MeanFlow steps, which makes it the faster of the two v4.1-Small models.
Use
Install speech.cpp (install), then:
# A voice file from a reference recording, then a sentence in that voice
speech voice irodori-tts-mf me.wav me.voice.gguf
speech tts irodori-tts-mf --add-voice me=me.voice.gguf --voice me -o out.wav "明日の東京は晴れです。"
# A voice described in words
speech tts irodori-tts-mf --voice none --instructions "低く落ち着いた男性の声で、ゆっくりと読み上げてください。" \
-o out.wav "明日の東京は晴れです。"
# A page on which to try it, and OpenAI's speech API
speech serve irodori-tts-mf --open
irodori-tts-mf is the name speech.cpp gives this model; speech fetches the F16 file from this repository the first time, and irodori-tts-mf:q4_k or another type of the table below fetches that type instead. A path to the
downloaded file works as well. The voices, the options, the worker and the HTTP API are in speech.cpp's documentation:
Irodori-TTS, command line and server.
Files
| File | Contents | Size | speech.cpp from | SHA-256 |
|---|---|---|---|---|
Irodori-TTS-866M-MF-v4.1-F16.gguf (the file the name fetches) |
the model in F16, 4 MeanFlow steps by default, and the 48 kHz codec in F32 | 1.92 GB (1,920,321,792 bytes) | 0.8.0 | e237dc3eefe469b8bba87872beacf12fb7fe00dbdf85767edca8ec04ab910d13 |
Irodori-TTS-866M-MF-v4.1-Q8_0.gguf |
the model in Q8_0, 4 MeanFlow steps by default, and the 48 kHz codec in F32 | 1.21 GB (1,207,133,984 bytes) | 0.8.0 | 2d161b0bbcd74f906f6b07e03d031075f8ae916db1b8bd4daf16cb37b451086a |
Irodori-TTS-866M-MF-v4.1-Q6_K.gguf |
the model in Q6_K, 4 MeanFlow steps by default, and the 48 kHz codec in F32 | 1.04 GB (1,040,893,024 bytes) | 0.8.0 | 2feadbb66d5c053cf7fddcd02514b2339c79af4afa38aa00357d9aa6dff0ff96 |
Irodori-TTS-866M-MF-v4.1-Q5_K.gguf |
the model in Q5_K, 4 MeanFlow steps by default, and the 48 kHz codec in F32 | 0.95 GB (949,728,032 bytes) | 0.8.0 | 9f5516a00afc6411d5e9cd825fccc8cf00ce4157f973f6657ebb2f9e04eacf60 |
Irodori-TTS-866M-MF-v4.1-Q4_K.gguf |
the model in Q4_K, 4 MeanFlow steps by default, and the 48 kHz codec in F32 | 0.86 GB (863,926,048 bytes) | 0.8.0 | 1913bf74000a3300c703eb91c985a4e5c4d7a2bbeb0cc7fe07d1583c4fea9729 |
Irodori-TTS-866M-MF-v4.1-F16.gguf.json |
the output of speech info --json for the F16 file |
2,001 bytes | 13c47ba917ad597e4aceffef70e12f7583497e4e88e7347dcabf484b9fc837db |
|
Irodori-TTS-866M-MF-v4.1-Q8_0.gguf.json |
the output of speech info --json for the Q8_0 file |
2,002 bytes | ca5d9255eafcd3cb3451d86ede43429e9001c9ff14974f8d4e2c27ecd0d62e69 |
|
Irodori-TTS-866M-MF-v4.1-Q6_K.gguf.json |
the output of speech info --json for the Q6_K file |
2,002 bytes | 90aed9c07ecfa71be196a2ad6f60206d70330f0ac8361343d425fe53c7fb4751 |
|
Irodori-TTS-866M-MF-v4.1-Q5_K.gguf.json |
the output of speech info --json for the Q5_K file |
2,000 bytes | c5679a41a6bf38f5a32fba2b132d7f664b6c5d7c1ac695e426ec508ba60771c9 |
|
Irodori-TTS-866M-MF-v4.1-Q4_K.gguf.json |
the output of speech info --json for the Q4_K file |
2,000 bytes | e84b43601de8dfee2f4536eb1129e63f80e7697952c6c05eef9f8cc0b00855fe |
|
LICENSE-MIT |
the MIT License of the model and the codec | |||
LICENSE-APACHE-2.0 |
the Apache License 2.0 of the codec's base model |
In the Q6_K, Q5_K and Q4_K files the DiT's matrices whose rows are not whole blocks of 256 values are Q8_0, and two of the speaker encoder's, whose rows are not whole blocks of 32 either, are F16.
Voices
- A reference WAVE file of at most 120 s, encoded each time it is added.
- A voice file, which
speech voicewrites once from one or more references. It carries the codec's hash (67cb1a241c3b75d7…), so it works with this file and with v4.1-Small's in any type. - A voice file of a speaker-inversion embedding, which
speech voicemakes from the.speaker.safetensorsfile the official training saves, for this model alone. none: the model chooses the voice, orinstructionsdescribes it.
Accuracy
Every stage is checked against the official implementation's tensors, dumped on the CPU in float32, on an Apple M5 and an RTX 2080:
| Check | CPU, F32 | Metal, F32 | Vulkan, F16 model and F32 codec |
|---|---|---|---|
| Normalization and tokens, 164 texts | all equal | all equal | all equal on the 51 texts without emoji |
| Decoded audio | 119 dB SNR | 68 dB | 68 dB |
| Whole synthesis from the official noise | 75 to 110 dB, the official length | 22 to 61 dB, the same length | 58 dB, the same length |
On a GPU the audio is the same speech rather than the same waveform, since the GPU's matrix kernels round differently.
Each type, measured by speech-bench on 2026-10-12 on an Apple M5 with Metal, on the 20 sentences of speech-bench's prompts/speak-ja-JP.json spoken with seeds 1, 2 and 3 in a voice file of one reference, and heard by Qwen3-ASR 1.7B in Q8_0: the CER over the 60 takes. The memory is the peak memory footprint of speech for one request. The CER of one type moves by a few points from seed to seed, so only a larger difference tells two types apart.
| Type | Size | Memory | CER as heard |
|---|---|---|---|
| F16 | 1.92 GB | 2.04 GB | 5.92% |
| Q8_0 | 1.21 GB | 1.33 GB | 8.35% |
| Q6_K | 1.04 GB | 1.16 GB | 7.35% |
| Q5_K | 0.95 GB | 1.07 GB | 7.74% |
| Q4_K | 0.86 GB | 0.99 GB | 7.57% |
Speed
The 20 sentences of speech-bench's prompts/speak-ja-JP.json through speech worker, in a voice file, one request at
a time:
| Device | Median first audio | p90 first audio | Real-time factor | Memory |
|---|---|---|---|---|
| Apple M5, Metal | 0.23 s | 0.51 s | 0.17 | 2.1 GB |
| RTX 2080, Vulkan | 0.13 s | 0.23 s | 0.10 | 2.1 GB |
The first audio waits for the whole sentence's sampling, so it grows with the sentence.
Source
Converted by speech.cpp's reference/irodori-tts/convert.py mf, whose environment pins the official runtime at
Aratako/Irodori-TTS@89f9d8f,
from Aratako/Irodori-TTS-v4.1-Small-MF at ccc78f5d480b6e51b69b2d5042a14c4da04fea6e and
Aratako/Semantic-DACVAE-Japanese-32dim at
47376ee24834d7a05a48ebabfe3cde29b3c5e214, to F32, from which speech quantize --type <type> wrote each file. The codec stays F32 in every type.
v4.1-Small, which samples in 40 Euler steps with guidance, more slowly, and lets a request tune more, is irodori-tts in
sakasegawa/Irodori-TTS-v4.1-Small-GGUF.
License and ethical restrictions
Irodori-TTS v4.1-Small-MF is Aratako's, released under the MIT License (LICENSE-MIT), with these ethical restrictions from its model card:
- No Impersonation: Do not use this model to clone or impersonate the voice of any individual (e.g., voice actors, celebrities, public figures) without their explicit consent.
- No Misinformation: Do not use this model to generate deepfakes or synthetic speech intended to mislead others or spread misinformation.
- Voice Generation Disclaimer: When generating speech purely from text or captions without using reference audio, it is possible that the generated voice may coincidentally resemble that of a real person. This is strictly a probabilistic artifact within the latent space. The model was not trained with the intent of reproducing specific individuals.
- Liability Disclaimer: The developers assume no liability for any misuse of this model. Users are solely responsible for ensuring their use of the generated content complies with applicable laws and regulations in their jurisdiction.
Semantic-DACVAE-Japanese-32dim is Aratako's, MIT on its model card. It is fine-tuned from Meta's facebook/dacvae-watermarked, which is under the Apache License 2.0 (LICENSE-APACHE-2.0). The SAM License that a sentence of that card's text names was corrected to Apache-2.0 in facebookresearch/dacvae on 2025-12-19.