Iroha-TTS-V1
Give every line a little more character.
Expressive Japanese TTS for character dialogue. Clone a voice, choose an emotion, adjust its intensity, and explore different takes on the same line. Built with Fish Audio. Based on Fish Audio S2-Pro.
Features · Quick start · Parameters · Agent guide · 中文
Features
01 · Direct the emotionGive one character joy, anger, sadness or surprise with a simple tag.
|
02 · Dial in the intensityChoose one of four presets, or pass a float within the supported range to explore the space between them.
|
03 · Turn the mood mid-lineMove from delight to sadness within one generation, without stitching separate audio clips.
|
04 · Your voice, in characterClone a voice from a short reference recording and its transcript, then explore different expressions. Reference audio + transcript |
05 · More than spoken wordsPlace laughter, sighs or crying where the scene calls for them.
|
06 · Tell it in a whisperUse a whisper tag for quiet dialogue and close-up moments.
|
07 · Give names their readingAdd kana to names, rare words and heteronyms to specify how they should be pronounced.
|
|
Intensity control is experimental: continuous coefficients do not imply a linear perceptual response. Crying, whispering and voice matching vary with the line and reference. The illustrations show expressions; the reference audio determines the voice. Hear more scenes →
Quick start
Linux · Python 3.12 · NVIDIA GPU with at least 28 GB free VRAM. First use downloads about 11 GB of base weights. Run with an HF login that has access to this repository:
python3.12 -m venv .venv
source .venv/bin/activate
pip install -U huggingface_hub
hf download IrohaStudio/Iroha-TTS --local-dir Iroha-TTS
cd Iroha-TTS
pip install -r requirements.txt
python infer.py \
--text "やっと会えたね!ずっと待ってたんだよ。" \
--emotion joy --intensity -0.015 --seed 7 \
--ref my_voice.wav --ref-text "Exact transcript of the reference recording" \
--out joy.wav
Replace my_voice.wav and the reference text with your recording and its accurate transcript. Output is 44.1 kHz WAV.
Change --seed for another take; without a reference, the voice may also change with the seed.
For more details, ask your agent to read AGENT_GUIDE.md. It covers pinned downloads, Python / JSONL usage, parameter combinations, configuration and troubleshooting.
Parameters
| Parameter | Default | Purpose |
|---|---|---|
--text / --jsonl |
Choose one | Single line / batch input |
--emotion |
none |
joy, anger, sadness, surprise; neutral / none add no emotion tag |
--intensity |
Unset (α=0) | Four presets or an in-range float; shipped range [-0.06, 0.045] |
--ref / --ref-text |
None | Reference recording and accurate transcript, supplied together |
--seed |
0 |
Choose another integer to explore a different take |
--guidance |
Whisper 1.5, others 0 |
Vocal-event guidance; 0 disables it; separate from emotion intensity |
--max-frames |
400 |
Generation limit, about 18.6 seconds; no automatic sentence splitting |
--no-argmax |
Off | Also sample residual codebooks |
--out / --out-dir |
out.wav / outputs |
Single output file / batch output directory |
--model |
Bundled model/ |
Model configuration and weights |
--base |
Cache/download | Optional local Fish S2-Pro base directory |
--device |
cuda |
Inference device |
Presets: weakest=-0.06, weak=-0.03, default=0, strong=0.045. Floats such as -0.015 are used directly, without snapping to a preset.
Nonzero intensity needs an explicit choice of one of the four emotions and text without emotion or vocal-event tags. Use default intensity for transitions, laughter, sighs, crying and whispers.
Full parameter rules and configuration → AGENT_GUIDE.md
With emotion (joy, anger, sadness, surprise)
| Model | Accuracy emo2vec large | Accuracy EmoRuler | Joy / Anger / Sadness / Surprise % EmoRuler |
|---|---|---|---|
| Fish S2 Pro (original) Starting point, no fine-tuning | 17.9% | 6.0% | 6 / 0 / 9 / 9 |
| Ours Fish S2 Pro + SFT + reinforcement learning | 85.6% | 93.3% | 91 / 94 / 95 / 93 |
| Fish Audio Drama 3 Latest open-source Fish model · 35B MoE (3B active) | 32.1% | 21.2% | 32 / 14 / 21 / 18 |
| IndexTTS-2.5 Open source · bilibili | 40.2% | 30.6% | 65 / 18 / 19 / 20 |
| Irodori-TTS-v4-Large · text description Open source · Aratako | 30.8% | 20.6% | 34 / 23 / 8 / 17 |
| Irodori-TTS-v4-Large · emoji Open source · Aratako | 20.0% | 9.8% | 17 / 2 / 8 / 12 |
| Chatterbox Open source · Resemble | Cannot specify emotion with tags | ||
With / Without emotion
| Model | With emotion | Without emotion | ||||
|---|---|---|---|---|---|---|
| Speaker similarity | Audio quality UTMOS | CER | Speaker similarity | Audio quality UTMOS | CER | |
| Fish S2 Pro (original) Starting point, no fine-tuning | 0.685 | 3.51 | 5.6% | 0.684 | 3.57 | 6.2% |
| Ours Fish S2 Pro + SFT + reinforcement learning | 0.636 | 3.55 | 5.8% | 0.694 | 3.78 | 4.8% |
| Fish Audio Drama 3 Latest open-source Fish model · 35B MoE (3B active) | 0.628 | 3.26 | 7.0% | 0.653 | 3.43 | 9.3% |
| IndexTTS-2.5 Open source · bilibili | 0.612 | 2.26 | 6.9% | 0.714 | 2.91 | 6.0% |
| Irodori-TTS-v4-Large · text description Open source · Aratako | 0.649 | 3.03 | 6.0% | 0.662 | 3.09 | 5.7% |
| Irodori-TTS-v4-Large · emoji Open source · Aratako | 0.651 | 3.03 | 6.5% | 0.662 | 3.09 | 5.7% |
| Chatterbox Open source · Resemble | Cannot specify emotion with tags | 0.675 | 3.34 | 6.5% | ||
Subjective Listening Test MOS (Japanese)
| Model | Naturalness ↑ | Emotion match ↑ | Speaker similarity ↑ | Overall score ↑ | Win share ↑ |
|---|---|---|---|---|---|
| Ours | 3.84 | 4.20 | 3.52 | 3.85 | 31.7% |
| Fish Audio Drama 3 | 3.97 | 3.64 | 3.45 | 3.69 | 23.2% |
| Irodori-TTS-v4-Large · text description | 3.61 | 3.95 | 3.32 | 3.63 | 28.1% |
| Fish S2 Pro (original) | 3.75 | 2.93 | 3.72 | 3.47 | 12.1% |
| IndexTTS-2.5 | 2.35 | 3.49 | 2.81 | 2.88 | 4.9% |
All three dimensions are rated by human listeners on a five-point scale (MOS). The overall score is the unweighted mean of the three dimensions. Win share: the five models are compared for each listener–sentence pair, with ties for first place splitting the win equally.
Pairwise Win Rates
Pairwise win rates for Ours, based on the overall score, with ties counted as half a win:
| Comparison | Ours win rate ↑ |
|---|---|
| vs. Fish S2 Pro (original) | 69.3% |
| vs. Fish Audio Drama 3 | 58.0% |
| vs. Irodori-TTS-v4-Large · text description | 58.7% |
| vs. IndexTTS-2.5 | 82.7% |
Binaural post-processing
spatial/ places finished speech around the listener's head for headphones, as in the whisper demo: circling, sweeping or held at one spot. It is a separate step, not a model feature, and needs no GPU.
pip install -r spatial/requirements.txt
python spatial/binaural.py --in a.wav b.wav --start -90 --turns 2 --near 0.8 --out orbit.wav
TODO
- Support more emotion and paralinguistic tags.
- Support emotion intensity control with all tags.
- Release Qwen3-TTS, Ming-3.0-tts, and OmniVoice models trained with a similar approach.
- Provide a WebUI for deploying different models and add support for sglang-omni.
- Release the GitHub project.
Contact
For technical questions, please contact ake.speechai@gmail.com.
License
This model is licensed under the Fish Audio Research License, Copyright © 39 AI, INC. All Rights Reserved
(LICENSE.md). It is a Derivative Work of Fish Audio S2-Pro: research and non-commercial use is free;
any commercial use requires a separate license from Fish Audio (fish.audio,
business@fish.audio). The Fish S2-Pro weights are not included here and are downloaded from Fish Audio's repository
under the same license. What was changed is listed in NOTICE. The inference code written for this release
(emotts/, infer.py) is also available under the MIT License (LICENSE-MIT). spatial/binaural.py is under
the MIT License, and the measured HRIRs in spatial/hrir/ are by TH Köln under CC BY-SA 3.0 (details).
- Downloads last month
- 458
Model tree for IrohaStudio/Iroha-TTS
Base model
fishaudio/s2-pro
