Irodori-TTS-v4.1-Small 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 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 Euler steps with the official runtime's guidance, 40 steps unless a request gives
steps; 16 steps bring the first audio more than twice as soon. A request may also set the runtime's
guidance, schedule and speaker scaling.
Use
Install speech.cpp (install), then:
# A voice file from a reference recording, then a sentence in that voice
speech voice irodori-tts me.wav me.voice.gguf
speech tts irodori-tts --add-voice me=me.voice.gguf --voice me --steps 16 -o out.wav "明日の東京は晴れです。"
# A voice described in words
speech tts irodori-tts --voice none --instructions "低く落ち着いた男性の声で、ゆっくりと読み上げてください。" --steps 16 \
-o out.wav "明日の東京は晴れです。"
# A page on which to try it, and OpenAI's speech API
speech serve irodori-tts --open
irodori-tts is the name speech.cpp gives this model; speech fetches the F16 file from this repository the first time, and irodori-tts: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-859M-v4.1-F16.gguf (the file the name fetches) |
the model in F16, 40 Euler steps by default, and the 48 kHz codec in F32 | 1.91 GB (1,905,903,936 bytes) | 0.8.0 | f334932bdf166579bada0a3c8bdabb7199af85682fdcefb6f1cb7e444f5c75b3 |
Irodori-TTS-859M-v4.1-Q8_0.gguf |
the model in Q8_0, 40 Euler steps by default, and the 48 kHz codec in F32 | 1.20 GB (1,199,474,528 bytes) | 0.8.0 | 293668c68ed2eec670d69c8c30d570410eedd14678acbdb1a80b3d03117c1600 |
Irodori-TTS-859M-v4.1-Q6_K.gguf |
the model in Q6_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 1.03 GB (1,034,979,488 bytes) | 0.8.0 | 6d9843d2f6e7d9b749adb7ac74092af1e4d4960f6a8f2a60087aa744c1e2ee07 |
Irodori-TTS-859M-v4.1-Q5_K.gguf |
the model in Q5_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 0.94 GB (944,771,936 bytes) | 0.8.0 | 1e3b5c1e088d5c9a2d870be059514d9b13fe6df2ab80e2c00614fb049add91ff |
Irodori-TTS-859M-v4.1-Q4_K.gguf |
the model in Q4_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 0.86 GB (859,871,072 bytes) | 0.8.0 | a1c174f4552817e84dd6a2a020bc3d0589fd7f30d0c3db53ad04a1e69fb5dbfd |
Irodori-TTS-859M-v4.1-F16.gguf.json |
the output of speech info --json for the F16 file |
3,793 bytes | 717cd6d407de19db7fde04589b2d26328becf108a6ec81bb3601238aca0fae6f |
|
Irodori-TTS-859M-v4.1-Q8_0.gguf.json |
the output of speech info --json for the Q8_0 file |
3,794 bytes | ac9de5e65db856a0594af7ee1e96980ff8e2317edb757e2a3f46a0f29ac0d932 |
|
Irodori-TTS-859M-v4.1-Q6_K.gguf.json |
the output of speech info --json for the Q6_K file |
3,794 bytes | 8897d5abc9e16e93e5ea2b8741c4a717a4cfcf8fa1d8536a2ed3280158a9492c |
|
Irodori-TTS-859M-v4.1-Q5_K.gguf.json |
the output of speech info --json for the Q5_K file |
3,792 bytes | a2ce08ab7cc256293f9e4042bdcc33408d9876fce3a33922410e95173dcddbed |
|
Irodori-TTS-859M-v4.1-Q4_K.gguf.json |
the output of speech info --json for the Q4_K file |
3,792 bytes | 17dddf528bfa08f7fa5fd4221ba8fccdc59e35983e2abacd78f3dbfbc50e939a |
|
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-MF'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:
| Check | CPU, F32 | Metal, F32 |
|---|---|---|
| Decoded audio | 119 dB SNR | 68 dB |
| Sampled latent, 40 steps | 109 to 111 dB | 59 to 67 dB |
| Whole synthesis from the official noise | 75 to 110 dB, the official length | 22 to 61 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.91 GB | 2.03 GB | 3.43% |
| Q8_0 | 1.20 GB | 1.32 GB | 4.09% |
| Q6_K | 1.03 GB | 1.16 GB | 3.65% |
| Q5_K | 0.94 GB | 1.07 GB | 4.37% |
| Q4_K | 0.86 GB | 0.98 GB | 4.54% |
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:
| Steps | Device | Median first audio | p90 first audio | Real-time factor | Memory |
|---|---|---|---|---|---|
| 16 | Apple M5, Metal | 1.12 s | 3.29 s | 0.34 | 2.1 GB |
| 40 | Apple M5, Metal | 2.64 s | 8.04 s | 0.64 | 2.1 GB |
| 16 | RTX 2080, Vulkan | 0.49 s | 1.13 s | 0.14 | 2.2 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 rf, whose environment pins the official runtime at
Aratako/Irodori-TTS@89f9d8f,
from Aratako/Irodori-TTS-v4.1-Small at 2b28324dc263ed5e6638b3cf3dd94c82ead07b4b 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-MF, which samples in 4 MeanFlow steps and gives the first audio sooner, is irodori-tts-mf in
sakasegawa/Irodori-TTS-v4.1-Small-MF-GGUF.
License and ethical restrictions
Irodori-TTS v4.1-Small 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.