Irodori-TTS-v4-Large GGUF for speech.cpp
These files run only in speech.cpp 0.8.7 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-Large and its codec,
Semantic-DACVAE-Japanese-32dim, in one file, converted to GGUF from the official checkpoint. It speaks Japanese, a
sentence at a time, in the voice of one or more reference recordings, in a voice described in words, or in a voice the
model chooses, and passes the audio as the codec decodes it. Emoji in the text direct the way of speaking and add
sounds such as a laugh or a sigh. 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 reference recordings, then a sentence in that voice
speech voice irodori-tts-large take-1.wav take-2.wav take-3.wav me.voice.gguf
speech tts irodori-tts-large --add-voice me=me.voice.gguf --voice me --steps 16 -o out.wav "明日の東京は晴れです。"
# A voice described in words
speech tts irodori-tts-large --voice none --instructions "低く落ち着いた男性の声で、ゆっくりと読み上げてください。" --steps 16 \
-o out.wav "明日の東京は晴れです。"
# A page on which to try it, and OpenAI's speech API
speech serve irodori-tts-large --open
irodori-tts-large is the name speech.cpp gives this model; speech fetches the Q8_0 file from this repository the first time, and irodori-tts-large:f16 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-3.4B-v4-F16.gguf |
the model in F16, 40 Euler steps by default, and the 48 kHz codec in F32 | 6.96 GB (6,957,138,240 bytes) | 0.8.7 | a0d4751d88cb9befea38d893081f2b0e48206225da038d12784a25288ac86d50 |
Irodori-TTS-3.4B-v4-Q8_0.gguf (the file the name fetches) |
the model in Q8_0, 40 Euler steps by default, and the 48 kHz codec in F32 | 3.88 GB (3,875,154,272 bytes) | 0.8.7 | 836a2deda5115e4400d25674612ff30d704a358d0b16cf96a3eb510dc416bc4e |
Irodori-TTS-3.4B-v4-Q6_K.gguf |
the model in Q6_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 3.27 GB (3,265,717,088 bytes) | 0.8.7 | 7809eb432dda9ea6496ce70f6f26c5081027ef944300b3bde498ab5573c8df94 |
Irodori-TTS-3.4B-v4-Q5_K.gguf |
the model in Q5_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 2.93 GB (2,931,509,600 bytes) | 0.8.7 | f3cac502a0efce351628bf680998daae807fa1244ae4fab67441b3b3dcf105f5 |
Irodori-TTS-3.4B-v4-Q4_K.gguf |
the model in Q4_K, 40 Euler steps by default, and the 48 kHz codec in F32 | 2.62 GB (2,616,961,376 bytes) | 0.8.7 | ac3e473f393b620c108c18ba848c337abb6d2348844da90c8b291812dd96bd6e |
Irodori-TTS-3.4B-v4-F16.gguf.json |
the output of speech info --json for the F16 file |
3,789 bytes | b0a99e8b191d53e60fe5cd1ce5ba7c050060f403e79dda539f1117743c622ef6 |
|
Irodori-TTS-3.4B-v4-Q8_0.gguf.json |
the output of speech info --json for the Q8_0 file |
3,790 bytes | 5bc1cd268fbd61b9ad8e91c24186b293f16f714a7a9f804080d26b549bb96cec |
|
Irodori-TTS-3.4B-v4-Q6_K.gguf.json |
the output of speech info --json for the Q6_K file |
3,790 bytes | c00248bbc45ddf29009e2cdb72a456957960f05ca420468d3ae0eb2530c853ca |
|
Irodori-TTS-3.4B-v4-Q5_K.gguf.json |
the output of speech info --json for the Q5_K file |
3,790 bytes | 542caae4c554a2dc58fb7b43440681644e25840542146bd97b57d76f621acdb4 |
|
Irodori-TTS-3.4B-v4-Q4_K.gguf.json |
the output of speech info --json for the Q4_K file |
3,790 bytes | 048643af62ddecfabcdce7f617d1b18966bea7ac392b6ed6209766cff670c207 |
|
GEMMA_TERMS_OF_USE.md |
the Gemma Terms of Use, under which the model is distributed | |||
GEMMA_PROHIBITED_USE_POLICY.md |
the Gemma Prohibited Use Policy, which the terms include | |||
NOTICE |
the notice the Gemma Terms of Use ask for | |||
LICENSE-MIT |
the MIT License of 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 text encoder's matrices, whose rows of 1,152 values are not whole blocks of 256, are Q8_0.
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, up to 120 s together; the model card recommends about 30 s or more of clean speech, from several short clips of the speaker. It carries the codec's hash (67cb1a241c3b75d7…), so it works with this file and with Irodori-TTS v4.1's in any type. 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 |
|---|---|---|
| Tokens of 164 texts and 18 descriptions | all equal | all equal |
| Text and description conditions | 108 to 115 dB SNR | 68 to 72 dB |
| Decoded audio | 119.5 dB | |
| Sampled latent, 40 steps | 88 to 119 dB | 30 dB |
| Whole synthesis from the official noise | 76.7 dB, the official length | 15 to 16 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. On an RTX 2080 with Vulkan and the F16 file, the whole synthesis of a short sentence is 58.7 dB from the official.
Each type, measured by speech-bench on 2026-10-14 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 at 16 steps 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 of speech's resident and Metal memory together. The CER of one type moves by a point or two from seed to seed, so only a larger difference tells two types apart. With seed 1 and 40 steps, the official runtime at FP32 gives 5.31% and the Q8_0 file 4.98%.
| Type | Size | Memory | CER as heard |
|---|---|---|---|
| F16 | 6.96 GB | 6.71 GiB | 4.48% |
| Q8_0 | 3.88 GB | 3.84 GiB | 4.81% |
| Q6_K | 3.27 GB | 3.27 GiB | 4.48% |
| Q5_K | 2.93 GB | 2.96 GiB | 4.87% |
| Q4_K | 2.62 GB | 2.67 GiB | 5.14% |
Speed
The 20 sentences of speech-bench's prompts/speak-ja-JP.json through speech worker, in a voice file, seed 1, one request at
a time, on 2026-10-14, with speech.cpp's main branch at c8e3b5c, built on the M5 and by CI for Windows:
| Steps | Device | Type | Median first audio | p90 first audio | RTFx | Memory or VRAM |
|---|---|---|---|---|---|---|
| 16 | Apple M5, Metal | Q8_0 | 4.40 s | 14.4 s | 0.97 | 3.84 GiB |
| 40 | Apple M5, Metal | Q8_0 | 10.7 s | 35.5 s | 0.42 | 3.84 GiB |
| 16 | Apple M5, Metal | F16 | 4.43 s | 14.7 s | 0.97 | 6.71 GiB |
| 16 | RTX 2080, Vulkan | Q8_0 | 1.24 s | 3.80 s | 3.36 | 4.14 GiB |
| 40 | RTX 2080, Vulkan | Q8_0 | 3.14 s | 10.0 s | 1.44 | 4.14 GiB |
| 16 | RTX 2080, Vulkan | F16 | 1.12 s | 3.39 s | 3.62 | 7.01 GiB |
The first audio waits for the whole sentence's sampling, so it grows with the sentence. The RTFx is the seconds of audio over the seconds they took, so larger is faster. The official runtime gives RTFx 0.31 at FP32 on the same M5, with 36 GB of memory, and 0.03 at BF16 on the RTX 2080.
Source
Converted by speech.cpp's reference/irodori-tts/convert.py large, whose environment pins the official runtime at
Aratako/Irodori-TTS@89f9d8f,
from Aratako/Irodori-TTS-v4-Large at 2e0c55428ce97268a507f1feeb2478f8d9148e8b 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.
The conversion changes the weights' layout and number format and nothing of what they compute; the RMS norms of the
text encoder are stored as 1 + weight, the factor the official code multiplies by.
Irodori-TTS v4.1-Small and v4.1-Small-MF, smaller and faster, are irodori-tts and irodori-tts-mf in
sakasegawa/Irodori-TTS-v4.1-Small-GGUF and
sakasegawa/Irodori-TTS-v4.1-Small-MF-GGUF.
License and ethical restrictions
Irodori-TTS v4-Large is Aratako's. Its text and description encoder is derived from Google's google/t5gemma-2-1b-1b, so the model, and these files converted from it, are distributed under and subject to the Gemma Terms of Use (GEMMA_TERMS_OF_USE.md, ai.google.dev/gemma/terms), including the Gemma Prohibited Use Policy (GEMMA_PROHIBITED_USE_POLICY.md), as the NOTICE says. These files are modified from the original: they are converted to GGUF, and all but F16 are quantized. The model card adds these ethical restrictions:
- 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.
The official runtime puts an inaudible SilentCipher watermark into the audio it makes; speech.cpp does not.
Semantic-DACVAE-Japanese-32dim is Aratako's, MIT on its model card (LICENSE-MIT). It is fine-tuned from Meta's facebook/dacvae-watermarked, which is under the Apache License 2.0 (LICENSE-APACHE-2.0).