Underdog Woof Japanese
- 40.5 MB for the whole model, both voices included
- 14.5x faster than real time on one CPU thread (Apple M5 Max), with no GPU, server or API key
- 437 MB of memory at peak while it runs
- Two voices: Misa (default) and Mikasa
Underdog Woof Japanese is a small Japanese text-to-speech model. It reads kanji, dates, times, prices, counters, phone numbers, postal codes and addresses the way people say them, and it runs on a laptop CPU from a single 40.5 MB file. It is the Japanese sibling of Underdog Woof, the same size.
Listen
| Misa (default) | Mikasa | |
|---|---|---|
| ใ้ป่ฉฑใใใใจใใใใใพใใใไบ็ดใฏ11ๆ8ๆฅใฎๅๅพ3ๆ15ๅใใไบไบบๆงใงๆฟใใพใใใ | ||
| ใๅฑใๅ ใฏใ150-0041ใๆฑไบฌ้ฝๆธ่ฐทๅบ็ฅๅ1-2-3ใงใใใๅใๅใใใฏ03-1234-5678ใพใงใ | ||
| ๆใ ใๆทฑใๆฃฎใฎใฏใใใฎๅฐใใชๆใซใไฝใๆใใใชใๅฅณใฎๅญใไฝใใงใใพใใใ |
Each clip was made with seed 1.
How it compares
| Model | Download | Hard sentences | Everyday sentences |
|---|---|---|---|
| Underdog Woof Japanese | 40.5 MB | 1.33% | 0.17% |
| Fish Audio Drama 3 | 41.5 GB | 2.39% | 0.27% |
| Qwen3-TTS 1.7B | 4.54 GB | 8.88% | 3.96% |
| Kokoro | 327 MB | 11.27% | 0.62% |
Lower is better. The numbers are kana error rates on 446 Japanese test sentences: 165 everyday ones, and 281 hard ones packed with dates, times, prices, counters, phone numbers, postal codes, addresses, codes, loanwords and kanji with tricky readings. Whisper large-v3 transcribes each clip, then the transcript and the script are both turned into kana by Open JTalk and compared character by character. Every model read the raw written text through its own front end with its default settings, in two voices where it has them, and the table gives the average. Fish Audio Drama 3 cloned the same two voices Woof uses, from one reference clip each. Qwen3-TTS used its built-in Japanese speaker, Ono_Anna, and Kokoro its two Japanese voices. Measured in November 2026.
Woof Japanese is 1,025 times smaller than Drama 3 and misreads 44% less on the hard sentences.
Usage
pip install numpy pyopenjtalk-plus
hf download ConwayResearch/Underdog-Woof-Japanese --local-dir underdog-woof-ja
cd underdog-woof-ja
python -m underdog_woof_ja "ใไบ็ดใฏๅๅพ3ๆ15ๅใใไธไบบๆง3,500ๅใงใใ" hello.wav
python -m underdog_woof_ja "ใไบ็ดใฏๅๅพ3ๆ15ๅใใไธไบบๆง3,500ๅใงใใ" mikasa.wav --voice mikasa
from underdog_woof_ja import Woof
tts = Woof(voice="mikasa") # "misa" (default) or "mikasa"
audio = tts("ใใฏใใใใใใพใ๏ผไปๆฅใฏไธๆฅไธญ้จใ้ใใใใชใฎใงใๅใๆใฃใฆ่กใฃใฆใใ ใใใญใ", seed=0) # float32 mono, 24 kHz
tts.save("hello.wav", audio)
Give Woof the text as you would write it. Open JTalk (through pyopenjtalk-plus) works out how each sentence is read, including the reading and pitch accent of every kanji, numbers, dates and counters such as 3ๆฌ and 8ๆฅ. Postal codes (ใ), addresses written 1-2-3 and letters in codes such as K54-3920 are read the way people say them.
Text is spoken one sentence at a time, and a sentence over 60 characters is split again at its commas. Each piece is
checked as it's made. If it runs far too long for its text or has more than a second of silence in the middle, Woof
draws it again, up to three more times, and keeps the best take. Pass a seed to get the same audio for the same text
every time.
Speed and memory
| Misa | Mikasa | |
|---|---|---|
| Speed on one Apple M5 Max CPU thread | 14.5x real time | 14.6x real time |
| Peak resident memory | 437 MB | 438 MB |
Speed is the median of three rounds over six everyday sentences on one CPU thread of an Apple M5 Max, run exactly as
python -m underdog_woof_ja runs it.
License
Underdog Non-Commercial License 1.0 (see LICENSE and NOTICE). Free for non-commercial use with credit; commercial
use needs a license from license@conway.tech.