Irodori-TTS-v4.1-Anime: Our Generated Audio, File List

October 1, 2026

Irodori-TTS-v4.1-Anime: Our Generated Audio, File List

At a Glance

Item Value
Repository phasefield-audio/Irodori-TTS-v4.1-Anime
Published 2026-09-04
License mit
Formats safetensors
Source type Primary source (the publisher itself)

Values determined by this site’s code when the information was collected. Dates are JST.

What we checked ourselves

  • We generated speech on our own server from our own fixed text and show it unedited.

Details and conditions are in “Our Own Measurements” below.

Overview

Irodori-TTS-v4.1-Anime, a Text-to-Speech (TTS) model that generates speech from Japanese text fine-tuned using anime-style voice data, has been released. This model is adjusted based on the base model “Aratako/Irodori-TTS-v4.1-Small" using anime-style voice data.

Specifications

  • Base model: Aratako/Irodori-TTS-v4.1-Small
  • License: MIT License
  • Distribution format: safetensors
  • Quantization variants: int8-weight-only, int8-dynamic, int4-weight-only, float8-weight-only, float8-dynamic

Note that because the base model’s annotation pipeline has not been published, the fine-tuning data for this model was independently annotated. Therefore, the behavior of caption-based conditioning and emoji-based control may differ from the base model.

Performance and Quality

This model is a derivative of “Aratako/Irodori-TTS-v4.1-Small", and the performance of the original model is demonstrated by the following benchmarks.

Joyo Kanji Yomi Benchmark

→ Scroll horizontally to see all columns

Model Kana-CER ↓ Kana-CER clipped ↓ Sentence Kana-CER ↓ Standard CER ↓
Irodori-TTS-600M-v3-VoiceDesign 8.49 ± 0.21% 5.59 ± 0.09% 2.45 ± 0.02% 4.88 ± 0.21%
Irodori-TTS-v4-Small (original) 7.43 ± 0.17% 5.08 ± 0.03% 2.89 ± 0.03% 5.35 ± 0.18%
Irodori-TTS-v4.1-Small 7.29 ± 0.13% 5.03 ± 0.03% 2.36 ± 0.01% 4.69 ± 0.02%

JSUT BASIC5000

Model Sentence Kana-CER ↓ Standard CER ↓
Irodori-TTS-600M-v3-VoiceDesign 3.62 ± 0.03% 7.19 ± 0.05%
Irodori-TTS-v4-Small (original) 3.49 ± 0.02% 7.32 ± 0.09%
Irodori-TTS-v4.1-Small 3.43 ± 0.01% 7.22 ± 0.12%

Compared to the traditional “Irodori-TTS-v4-Small", the original model “Irodori-TTS-v4.1-Small" shows improved (lower) scores across all metrics in the Joyo Kanji Yomi Benchmark (Kana-CER, Kana-CER clipped, Sentence Kana-CER, and Standard CER). In addition, for JSUT BASIC5000, improvements are seen in Sentence Kana-CER, while Standard CER shows a slight increase. These improvements result from retraining the duration predictor individually in the original model.

Strengths and Use Cases

Since this model is fine-tuned using anime-style voice data, it specializes in generating anime-style character voices. It is tagged with text-to-speech and generates speech from Japanese text input.

Inheriting the features of the base model “Aratako/Irodori-TTS-v4.1-Small", the following capabilities are available:

  • Voice cloning: Voice cloning using reference audio
  • Voice Design: Designing voice quality
  • Long-reference conditioning: Conditioning using long-duration reference audio
  • Emoji-based style control: Style control using emojis (however, because this model uses independent annotations, behavior may differ from the base model)

Additionally, as a constraint of the base model, only Japanese text input is currently supported. Furthermore, to stabilize voice cloning accuracy, clean reference audio of 30 seconds or longer is recommended.

Hardware Requirements

Estimated requirements (calculated by Local Model Watch) — 766M parameters

Your VRAM Quantization File size Est. memory needed
4GB (laptop iGPU / phone class) F32 2.9GB 3.4GB

Memory estimates add a 20% runtime overhead (KV cache, etc.) to the actual size of the distributed files. Actual usage varies with context length, batch size and inference engine. These figures are computed by this site from file sizes, not published by the model’s authors. The listed files are distributed in F32 (32-bit). Loading in a lower precision (BF16 or quantized) needs less memory, so treat this as the size of the files as distributed, not a minimum. This site has not measured the lower-precision figures. Compare with other models in our VRAM quick reference. What the quantization names mean: glossary.

Can You Run It Locally?

The publisher distributes this model as safetensors.

License — mit (Commercial use allowed): Permits commercial use, modification and redistribution, provided the copyright notice and license text are retained.

Compiled by this site’s code from the published formats and the license field. License summaries are not legal advice — check the publisher’s original terms before relying on them.

Our Own Measurements

Values we measured ourselves on our server (no GPU) by actually reading and running this model’s files — not figures copied from the model card. How we measure, and the results for every model: Our Measurements.

Audio We Generated

Generated on our CPU-only server (Neoverse-N1, 3 threads) by running phasefield-audio/Irodori-TTS-v4.1-Anime (mit license) with the publisher’s inference code (Irodori-TTS, commit 89f9d8f), inside an isolated environment with no network access. We read out fixed sentences we wrote ourselves with no reference audio, so this is not a clone of anyone’s voice; the clips here use the text only, with no voice description. 40 steps, seed 0, generated 2026-09-30 (JST). Not edited or selected — this is the first output for each sentence, including any misreadings. The publisher’s code embeds an inaudible SilentCipher watermark in the audio, and we left it in place.

Japanese sentences

“今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。” (It had been raining since the morning, but it gradually cleared up in the afternoon.) — 6.0 s of audio, 87 s to generate

“次の会議は3月15日の午後2時から、会議室Bで行います。” (The next meeting will be held from 2 p.m. on March 15 in meeting room B.) — 5.8 s of audio, 85 s to generate

“えっ、もう終わったんですか?思っていたよりずっと早かったですね。” (Oh, it’s already finished? That was much quicker than I expected.) — 5.8 s of audio, 93 s to generate

English sentences (a trial)

The publisher distributes this model for Japanese and does not claim English support. To see whether it really cannot output English, we read the English translations of the same sentences under the same conditions. We did not judge whether the pronunciation is correct; each clip is the first output, unedited, so please listen and judge for yourself.

“It had been raining since the morning, but it gradually cleared up in the afternoon.” — 7.1 s of audio, 112 s to generate

“The next meeting will be held from 2 p.m. on March 15 in meeting room B.” — 6.8 s of audio, 97 s to generate

“Oh, it’s already finished? That was much quicker than I expected.” — 6.5 s of audio, 89 s to generate

Specifying the Speaker with a Voice Description (Caption)

Besides the text to read, Irodori-TTS accepts a free-form Japanese description of the voice (a caption; the publisher calls this Voice Design) to set the speaker’s age, gender and manner. We read the same sentence (“It had been raining since the morning, but it gradually cleared up in the afternoon.”) with the same seed using three fixed descriptions we wrote. For comparison, we also generated the same set with the model it was fine-tuned from, Irodori-TTS-v4.1-Small. No reference audio was used. Pitch is the median our code estimated from each clip (autocorrelation; approximate). Not selected — the first output each time.

No description (text only)

Irodori-TTS-v4.1-Anime (pitch ≈ 205 Hz, 6.0 s)

Irodori-TTS-v4.1-Small (pitch ≈ 268 Hz, 5.2 s)

“An elderly woman speaking in a calm, slow manner.”

Irodori-TTS-v4.1-Anime (pitch ≈ 177 Hz, 7.0 s)

Irodori-TTS-v4.1-Small (pitch ≈ 203 Hz, 6.0 s)

“A bright, cheerful high-school girl speaking happily in a high voice, like an anime character.”

Irodori-TTS-v4.1-Anime (pitch ≈ 392 Hz, 5.9 s)

Irodori-TTS-v4.1-Small (pitch ≈ 265 Hz, 5.2 s)

“A middle-aged man with a calm, low voice, like a section manager explaining something to his team in a meeting.”

Irodori-TTS-v4.1-Anime (pitch ≈ 189 Hz, 6.2 s)

Irodori-TTS-v4.1-Small (pitch ≈ 143 Hz, 5.7 s)

Setup and Run Steps (What We Actually Ran)

These are the exact commands we ran from one working folder on our server (Linux aarch64, Python 3.12.3). Because we run the publisher’s code in an isolated environment, steps 1 and 2 had network access and step 3 had none. We built the environment in step 1 once and reuse it.

# 1. Build the environment (CPU PyTorch, dependencies, and the publisher's code pinned to a commit)
python3 -m venv venv
venv/bin/pip install --index-url https://download.pytorch.org/whl/cpu -c constraints.txt torch torchaudio
venv/bin/pip install -c constraints.txt torchao safetensors huggingface-hub transformers sentencepiece soundfile pyyaml peft numpy einops argbind descript-audiotools librosa pydub scipy tqdm
venv/bin/pip install --no-deps 'irodori-tts @ git+https://github.com/Aratako/Irodori-TTS@89f9d8fbd4d51ea019867ee1197725ede1df13c5' 'dacvae @ git+https://github.com/facebookresearch/dacvae@414c20785fc3a28373073ea8ef7a1316eeeaca6e' 'silentcipher @ git+https://github.com/SesameAILabs/silentcipher.git@d46d7d0893a583d8968ab3a6626e2289faec9152'

# 2. Download the weights (pinned revisions)
venv/bin/hf download phasefield-audio/Irodori-TTS-v4.1-Anime --revision 6b259f5baa5e236b3d14cbd1f8555ca87d92b530 --include model.safetensors --include 'tokenizer/*'
venv/bin/hf download Aratako/Irodori-TTS-v4.1-Small --revision 2b28324dc263ed5e6638b3cf3dd94c82ead07b4b --include model.safetensors --include 'tokenizer/*'
venv/bin/hf download Aratako/Semantic-DACVAE-Japanese-32dim --revision 47376ee24834d7a05a48ebabfe3cde29b3c5e214 --include weights.pth
venv/bin/hf download Sony/SilentCipher --revision a1c4d021905e0dc5b24be5f68db5fc4dba410ee1 --include 44_1_khz/73999_iteration/enc_c.ckpt --include 44_1_khz/73999_iteration/dec_c.ckpt --include 44_1_khz/73999_iteration/dec_m_0.ckpt --include 44_1_khz/73999_iteration/hparams.yaml

# 3. Generate
venv/bin/python irodori_tts.py job.json out

constraints.txt pins every dependency to the versions installed in our environment (pip freeze, full text below). On a machine with an NVIDIA GPU, replace the --index-url of the first pip install with the PyTorch index for your CUDA version.

The generation script (irodori_tts.py, written by us; it calls the publisher’s inference code in irodori_tts.inference_runtime). Comments are in Japanese as in our repository:

"""
Irodori-TTS で、固定の文を読ませて WAV を作る(Local Model Watch の実測。記事にこのファイルの全文を載せている)。

    python irodori_tts.py <job.json> <出力フォルダ>

job.json の runs に、モデル(リポジトリと版)ごとに読ませる文(text)と、話者の指定(caption、声の説明。
無ければ文だけから生成)を書く。downloads にはコーデックと透かしの重みの版、seed・steps・threads も書く。
重みは先に hf download で同じ版を取っておく(当サイトではこのスクリプトをネットワークの無い環境で動かすので、
ここでは取りに行かない)。参照音声(声のクローン)は使わない。
出力は <id>.wav(16bit PCM・モノラル)と result.json(生成にかかった秒数など)。
"""
import json
import os
import sys
import time
import wave

def main() -> int:
    with open(sys.argv[1], encoding="utf-8") as f:
        job = json.load(f)
    out_dir = sys.argv[2]
    os.makedirs(out_dir, exist_ok=True)
    import torch
    from huggingface_hub import hf_hub_download

    torch.set_num_threads(int(job["threads"]))
    extra = {d["repo"]: d for d in job["downloads"]}
    codec = extra["Aratako/Semantic-DACVAE-Japanese-32dim"]
    codec_path = hf_hub_download(codec["repo"], "weights.pth", revision=codec["revision"])
    mark = extra["Sony/SilentCipher"]
    mark_config = hf_hub_download(mark["repo"], "44_1_khz/73999_iteration/hparams.yaml", revision=mark["revision"])

    # 透かし(SilentCipher)の重みは、配布元のコードが既定ではネットワークから取りに行く。先に取ったものを渡す
    import silentcipher
    original_get_model = silentcipher.get_model

    def get_model(model_type="44.1k", device="cpu", **_):
        return original_get_model(model_type=model_type, ckpt_path=os.path.dirname(mark_config),
                                  config_path=mark_config, device=device)
    silentcipher.get_model = get_model

    from irodori_tts.inference_runtime import InferenceRuntime, RuntimeKey, SamplingRequest

    items = []
    load_sec = []
    watermark = True
    for run in job["runs"]:
        model = run["model"]
        checkpoint = hf_hub_download(model["repo"], "model.safetensors", revision=model["revision"])
        started = time.time()
        runtime = InferenceRuntime.from_key(RuntimeKey(checkpoint=checkpoint, model_device="cpu",
                                                       codec_repo=codec_path, codec_device="cpu"))
        load_sec.append(round(time.time() - started, 1))
        watermark = watermark and bool(runtime.watermarker.ready)
        for item in run["items"]:
            t = time.time()
            result = runtime.synthesize(SamplingRequest(text=item["text"], caption=item.get("caption"), no_ref=True,
                                                        seed=int(job["seed"]), num_steps=int(job["steps"])))
            audio = result.audio.detach().to(dtype=torch.float32, device="cpu").reshape(-1)
            pcm = (audio.clamp(-1.0, 1.0) * 32767.0).round().to(torch.int16).numpy().tobytes()
            with wave.open(os.path.join(out_dir, item["id"] + ".wav"), "wb") as w:
                w.setnchannels(1)
                w.setsampwidth(2)
                w.setframerate(int(result.sample_rate))
                w.writeframes(pcm)
            items.append({"id": item["id"], "seconds": round(time.time() - t, 1)})
            print(f"[generate] {item['id']}: {items[-1]['seconds']} s", flush=True)
        runtime.unload()
        del runtime
    with open(os.path.join(out_dir, "result.json"), "w", encoding="utf-8") as f:
        json.dump({"items": items, "load_sec": load_sec[0] if load_sec else None,
                   "watermark": watermark,
                   "torch": torch.__version__}, f)
    return 0

if __name__ == "__main__":
    sys.exit(main())

The values in job.json that the script reads (as used):

{
  "runs": [
    {
      "model": {
        "repo": "phasefield-audio/Irodori-TTS-v4.1-Anime",
        "revision": "6b259f5baa5e236b3d14cbd1f8555ca87d92b530"
      },
      "items": [
        {
          "id": "weather",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。"
        },
        {
          "id": "numbers",
          "text": "次の会議は3月15日の午後2時から、会議室Bで行います。"
        },
        {
          "id": "surprise",
          "text": "えっ、もう終わったんですか?思っていたよりずっと早かったですね。"
        },
        {
          "id": "persona-old_woman",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "年老いた女性が、穏やかでゆっくりとした口調で話している。"
        },
        {
          "id": "persona-hs_girl_anime",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "明るく元気な女子高生。アニメのキャラクターのような、高めの声で楽しそうに話している。"
        },
        {
          "id": "persona-kacho",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "落ち着いた低い声の中年男性。会社の課長が、会議で部下に説明するように話している。"
        },
        {
          "id": "weather-en",
          "text": "It had been raining since the morning, but it gradually cleared up in the afternoon."
        },
        {
          "id": "numbers-en",
          "text": "The next meeting will be held from 2 p.m. on March 15 in meeting room B."
        },
        {
          "id": "surprise-en",
          "text": "Oh, it's already finished? That was much quicker than I expected."
        }
      ]
    },
    {
      "model": {
        "repo": "Aratako/Irodori-TTS-v4.1-Small",
        "revision": "2b28324dc263ed5e6638b3cf3dd94c82ead07b4b"
      },
      "items": [
        {
          "id": "base-none",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。"
        },
        {
          "id": "base-persona-old_woman",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "年老いた女性が、穏やかでゆっくりとした口調で話している。"
        },
        {
          "id": "base-persona-hs_girl_anime",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "明るく元気な女子高生。アニメのキャラクターのような、高めの声で楽しそうに話している。"
        },
        {
          "id": "base-persona-kacho",
          "text": "今日は朝から雨が降っていましたが、午後になって少しずつ晴れてきました。",
          "caption": "落ち着いた低い声の中年男性。会社の課長が、会議で部下に説明するように話している。"
        }
      ]
    }
  ],
  "downloads": [
    {
      "repo": "phasefield-audio/Irodori-TTS-v4.1-Anime",
      "revision": "6b259f5baa5e236b3d14cbd1f8555ca87d92b530",
      "files": [
        "model.safetensors",
        "tokenizer/*"
      ]
    },
    {
      "repo": "Aratako/Irodori-TTS-v4.1-Small",
      "revision": "2b28324dc263ed5e6638b3cf3dd94c82ead07b4b",
      "files": [
        "model.safetensors",
        "tokenizer/*"
      ]
    },
    {
      "repo": "Aratako/Semantic-DACVAE-Japanese-32dim",
      "revision": "47376ee24834d7a05a48ebabfe3cde29b3c5e214",
      "files": [
        "weights.pth"
      ]
    },
    {
      "repo": "Sony/SilentCipher",
      "revision": "a1c4d021905e0dc5b24be5f68db5fc4dba410ee1",
      "files": [
        "44_1_khz/73999_iteration/enc_c.ckpt",
        "44_1_khz/73999_iteration/dec_c.ckpt",
        "44_1_khz/73999_iteration/dec_m_0.ckpt",
        "44_1_khz/73999_iteration/hparams.yaml"
      ]
    }
  ],
  "seed": 0,
  "steps": 40,
  "threads": 3
}
constraints.txt (full text)
absl-py==2.5.0 accelerate==1.15.0 annotated-doc==0.0.5 anyio==4.15.1 argbind==0.3.9 asttokens==3.0.2 certifi==2026.7.22 cffi==2.1.1 charset-normalizer==3.5.1 click==8.5.0 cloudpickle==3.1.2 contourpy==1.4.0 cycler==0.12.1 decorator==5.3.1 descript-audiotools==0.7.2 docstring_parser==0.18.0 einops==0.8.2 executing==2.2.1 ffmpy==1.0.0 filelock==3.32.3 fire==0.7.1 flatten-dict==0.5.0 fonttools==4.66.0 fsspec==2026.7.0 grpcio==1.84.0 h11==0.16.0 hf-xet==1.6.0 httpcore==1.0.9 httpx==0.28.1 huggingface_hub==1.33.0 idna==3.20 importlib_resources==7.1.0 ipython==9.17.1 ipython_pygments_lexers==1.1.1 jedi==0.20.0 Jinja2==3.1.6 joblib==1.6.0 julius==0.2.8 kiwisolver==1.5.1 lazy-loader==0.6 librosa==1.0.0 llvmlite==0.49.0 Markdown==3.11 markdown-it-py==4.2.0 markdown2==2.5.5 MarkupSafe==3.0.3 matplotlib==3.11.2 matplotlib-inline==0.2.2 mdurl==0.1.2 mpmath==1.3.0 msgpack==1.2.3 narwhals==2.26.0 networkx==3.6.1 numba==0.67.0 numpy==2.5.3 packaging==26.3 parso==0.8.7 peft==0.21.1 pexpect==4.9.0 pillow==12.3.0 platformdirs==4.12.1 pooch==1.9.0 prompt_toolkit==3.0.53 protobuf==3.19.6 psutil==7.2.2 ptyprocess==0.7.0 pure_eval==0.2.4 pycparser==3.0 pydub==0.25.1 Pygments==2.21.0 pyloudnorm==0.2.0 pyparsing==3.3.3 pystoi==0.4.1 python-dateutil==2.9.0.post0 PyYAML==6.0.3 randomname==0.2.1 regex==2026.9.29 requests==2.34.2 rich==15.0.0 safetensors==0.8.0 scikit-learn==1.9.1 scipy==1.18.1 sentencepiece==0.2.2 setuptools==78.1.0 shellingham==1.5.4 six==1.17.0 soundfile==0.14.0 soxr==1.1.0 stack-data==0.6.3 sympy==1.14.0 tensorboard==2.20.0 tensorboard-data-server==0.7.2 termcolor==3.3.0 threadpoolctl==3.7.0 tokenizers==0.23.2 torch==2.10.0+cpu torch-stoi==0.2.3 torchao==0.16.0 torchaudio==2.10.0+cpu tqdm==4.70.1 traitlets==5.16.1 transformers==5.17.0 typer==0.27.2 typing_extensions==4.16.0 urllib3==2.8.0 wcwidth==0.9.1 Werkzeug==3.1.9

Distributed Files

Weight files published in phasefield-audio/Irodori-TTS-v4.1-Anime, listed by this site from the Hugging Face API. Sizes are the actual file sizes.

File Size
float8-dynamic/model.safetensors 950MB
float8-weight-only/model.safetensors 916MB
int4-weight-only/model.safetensors 852MB
int8-dynamic/model.safetensors 914MB
int8-weight-only/model.safetensors 914MB
model.safetensors 3.06GB

How to Get It

This model is distributed in a Hugging Face repository.

  • Repository: phasefield-audio/Irodori-TTS-v4.1-Anime
  • Distribution format: safetensors
  • Quantized versions: Available in the int8-weight-only, int8-dynamic, int4-weight-only, float8-weight-only, and float8-dynamic directories within the repository.

For inference code and installation instructions, please refer to the original “Irodori-TTS" repository. GitHub: Aratako/Irodori-TTS

Other Models for the Same Task

Recent audio models covered by Local Model Watch, newest first. Grouped by the task each publisher declares on Hugging Face (pipeline_tag); the smallest VRAM tier is this site’s estimate.

See all audio models →

What to Read Next

Sources

Update History

  • 2026-09-20: Rewrote the article from re-collected sources and restored it from draft to published.
  • 2026-09-24: Rebuilt the article: Added a “can you run it locally?" verdict from the distribution formats, converted builds, engine registries, license terms and measured compression
  • 2026-09-25: Changed the title to show what the article covers (VRAM requirements, file list, etc.).
  • 2026-09-29: Added our own measurements: audio we generated.
  • 2026-09-30: Changed the title to show what the article covers (VRAM requirements, file list, etc.).