A mod for Kuray's Infinite Fusion (KIF) that reads every Pokédex entry aloud in the style of Dexter, the classic robotic narrator from the original Pokémon anime — for every base Pokémon, every custom dex entry, and every auto-generated fusion (head × body) the game can produce.
The mod ships an offline voice-clone sidecar built on the open-source fish-speech engine — the same engine that powers the Fish Audio Pokédex Voice Over model. After a one-time first-launch install everything runs fully offline, with no API keys and no network calls at play time.
Download the mod ZIP from the Releases page (or via KIF's in-game Mod Browser once it's listed at KIF-Mods/mods).
Extract so the pokedex_voice_over/ folder lives in your KIF game's
Mods/ directory:
<KIF game root>/
└── Mods/
└── pokedex_voice_over/
├── mod.json
├── main.rb
└── fish_speech/ ← the offline TTS sidecar
Launch KIF and open any Pokédex entry. That's it.
That's the entire procedure — there is nothing else to install by hand. The first time you open the Pokédex, the mod auto-spawns the Fish-Speech sidecar in a minimised terminal window, which performs a complete one-time first-run setup in this order:
fish_speech/python/. The launcher extracts it from the
official python.org embeddable ZIP — no installer EXE, no SmartScreen
prompt, no admin, no PATH changes, no registry edits. Uninstall is just
"delete the mod folder." macOS uses Homebrew; Linux uses your distro's
package manager.fish_speech/requirements-runtime.txt.
The Fish-Speech engine itself is bundled with the mod (vendored under
fish_speech/vendor/ — see Offline & self-contained design below), so
setup never clones or downloads it from GitHub.fishaudio/fish-speech-1.5
Hugging Face repo. No token, no account, no API key required.The first entry on first launch may stay silent while this runs; from the second entry onward the voice plays normally. Every subsequent game launch skips straight to the server — usually a 5–15 second warm-up.
If you'd rather pre-warm the install so the first entry isn't silent, run the launcher once before opening the game:
Mods/pokedex_voice_over/fish_speech/Start_TTS_Server.bat./Mods/pokedex_voice_over/fish_speech/start_tts_server.shLeave the terminal open. When the game closes, the mod closes it for you.
Auto-start is fully cross-platform: when you launch KIF the mod spawns
start_tts_server.sh in the background on its own (same as Windows, and on by
default), so in the common case you don't have to do anything.
There is one caveat for the very first launch. Auto-start runs the script detached with no terminal attached, which means:
sudo — which cannot ask for a password from a
background process, so the silent auto-start cannot bootstrap Python.So on Linux/macOS it is best to run the launcher once in a terminal for the first install, then let auto-start take over from then on:
cd "<KIF game root>/Mods/pokedex_voice_over/fish_speech"
bash ./start_tts_server.sh
This creates an isolated ./venv inside the mod folder, installs PyTorch and
the engine dependencies into it (you will see progress, plus any sudo prompt
to install Python), downloads the model, and runs a quick smoke test. Nothing
is installed into your system Python. Once it finishes, every later game launch
auto-starts the server silently — exactly like Windows.
Prerequisite: Python 3.10+ with the venv module. On Debian/Ubuntu:
sudo apt-get install -y python3 python3-venv (Fedora, Arch and openSUSE ship
venv with python3). For a clean reinstall later, delete fish_speech/venv/
and fish_speech/.installed, then relaunch.
Mods/pokedex_voice_over/piper/ and the mod will use that instead.Audio/SE/Pokedex/tts_cache/ so repeat visits play instantly.Settings are exposed both through KIF's Mod Manager (Title Screen → Mod Manager → Installed Mods → Pokédex Voice Over → Settings) and through Stonewall's Mod Settings if you have it installed (Options → Mod Settings → Interface → Pokédex Voice Over).
| Setting | Default | Description |
|---|---|---|
| Enable Voice Over | On | Master on/off switch. |
| Voice Volume | 80 | Playback volume (0–100). |
| Mute Music in Pokédex | On | Fade background music while the Pokédex is open. |
| Re-read on Page Return | Off | Re-play the voice when navigating back to the description page. |
| Fish-Speech Voice (Primary) | On | Use the offline voice-clone server as the primary voice. |
| Auto-Start Fish-Speech Server | On | Let the mod spawn the sidecar on demand instead of requiring a manual launch. |
| TTS Fallback (Piper) | On | Use Piper if Fish-Speech is unavailable. |
| Requirement | Notes |
|---|---|
| Kuray's Infinite Fusion | The Kuray fork with Mod Manager support (v0.9.4+). |
| Windows / macOS / Linux | Anything that runs KIF works. Windows uses a bundled portable Python; macOS/Linux install Python via Homebrew or your distro. |
| ~3 GB disk | ~1.4 GB for the model weights + ~1.5 GB for the PyTorch wheels. Both go in the mod folder, deletable any time. |
| GPU (optional) | CUDA NVIDIA GPU gets you ~0.5 s per entry. A modern CPU gets you ~3–8 s; the Pokémon cry masks most of that. |
| Internet (one time) | Only needed during first-launch setup (python.org + PyPI + Hugging Face). After that everything runs offline. |
The mod is a single Ruby script (main.rb) that hooks KIF's Pokédex scene
to capture the exact text being displayed (including auto-generated fusion
entries containing the literal POKENAME placeholder, which it resolves to
the actual fused name). It then calls a tiny local HTTP server in
fish_speech/ (POST 127.0.0.1:7861/tts) and plays the returned WAV
through RPGMaker's audio system.
The server is fish_speech/server.py — a thin wrapper around the
fish-speech 1.5 engine, which
is vendored into the mod at fish_speech/vendor/ and added to Python's
import path at startup. It keeps the model loaded between requests so per-entry
latency is sub-second on GPU. The model and its tokenizer are downloaded once
from the public
fishaudio/fish-speech-1.5
Hugging Face repo — no token, no account, no API key required.
If Fish-Speech is unavailable (e.g. the user declined the Python install
prompt or the GPU OOM'd) the mod falls through to its built-in Piper
path. Piper is the small offline neural TTS used by Home Assistant; drop
the matching piper.exe (or piper binary) and a *.onnx voice model
into Mods/pokedex_voice_over/piper/ and the mod picks it up automatically.
The Fish-Speech 1.5 engine source is vendored inside the mod at
fish_speech/vendor/ (a trimmed, pinned copy of the upstream code). server.py
puts that folder first on Python's import path, so the mod always runs the exact
engine it shipped with — it never pip installs fish-speech from GitHub or
PyPI. First-run setup therefore only installs (a) the right PyTorch wheel and
(b) the inference-only leaf packages in fish_speech/requirements-runtime.txt.
After that one-time download, nothing reaches the network at play time.
Maintainer note — keep the engine on 1.5. fish-speech 2.x reorganised the package and removed the firefly VQ-GAN module (
fish_speech.models.vqgan.modules.fsq.DownsampleFiniteScalarQuantize) that the 1.5 checkpoint instantiates, so a 2.x engine cannot load these weights. Don't bump the vendored copy to 2.x without also rewritingserver.pyand swapping the model checkpoint. To refresh the vendored source, copyfish_speech/andtools/from the upstreamv1.5.0tag intofish_speech/vendor/, keeping the.project-rootmarker and the per-directory__init__.pyfiles.
Delete the Mods/pokedex_voice_over/ folder. That's all — the bundled
Python interpreter, every pip-installed package, the model weights, and the
caches all live inside that folder, so there's no system cleanup left over.
(On macOS / Linux, Python was installed via Homebrew or your distro's package manager and stays installed in case other tools need it; remove it via your usual package-manager uninstall flow if you want it gone.)
| Symptom | Fix |
|---|---|
| Pokédex entries are silent | Open Mods/pokedex_voice_over/debug.log — it records every hook fire, file check, and TTS call. On a fresh install the most likely cause is "first-launch model download still running"; wait a couple of minutes on first run. |
| Bundled Python extraction fails | Check fish_speech/install_python.bat's output. If the network is blocked, manually download python-3.12.7-embed-amd64.zip from https://www.python.org/ftp/python/3.12.7/ and drop it into fish_speech/_embed/, then re-run Start_TTS_Server.bat. |
| pip bootstrap fails inside the bundled Python | Delete fish_speech/python/ and fish_speech/_embed/get-pip.py, then re-run Start_TTS_Server.bat. The launcher will redownload and rebootstrap. |
| First entry on first launch plays nothing | The model is downloading. Either pre-warm the server by double-clicking Start_TTS_Server.bat once before launching the game, or just wait for the second entry. |
CUDA out of memory in the sidecar window | Run Start_TTS_Server.bat --device cpu (or edit the .bat to add --device cpu). |
| Voice sounds wrong | Replace fish_speech/reference/voice.wav with your own 15–20 s reference clip (see fish_speech/reference/README.txt). |
| I want a clean reinstall | Delete Mods/pokedex_voice_over/fish_speech/.installed and Mods/pokedex_voice_over/fish_speech/checkpoints/, then relaunch. |
74 commits
47 commits
C
76.0%
Ruby
10.4%
Python
8.3%
C++
3.0%
Batchfile
1.3%
A mod for Kuray's Infinite Fusion (KIF) that reads every Pokédex entry aloud in the style of Dexter, the classic robotic narrator from the original Pokémon anime — for every base Pokémon, every custom dex entry, and every auto-generated fusion (head × body) the game can produce.
The mod ships an offline voice-clone sidecar built on the open-source fish-speech engine — the same engine that powers the Fish Audio Pokédex Voice Over model. After a one-time first-launch install everything runs fully offline, with no API keys and no network calls at play time.
Download the mod ZIP from the Releases page (or via KIF's in-game Mod Browser once it's listed at KIF-Mods/mods).
Extract so the pokedex_voice_over/ folder lives in your KIF game's
Mods/ directory:
<KIF game root>/
└── Mods/
└── pokedex_voice_over/
├── mod.json
├── main.rb
└── fish_speech/ ← the offline TTS sidecar
Launch KIF and open any Pokédex entry. That's it.
That's the entire procedure — there is nothing else to install by hand. The first time you open the Pokédex, the mod auto-spawns the Fish-Speech sidecar in a minimised terminal window, which performs a complete one-time first-run setup in this order:
fish_speech/python/. The launcher extracts it from the
official python.org embeddable ZIP — no installer EXE, no SmartScreen
prompt, no admin, no PATH changes, no registry edits. Uninstall is just
"delete the mod folder." macOS uses Homebrew; Linux uses your distro's
package manager.fish_speech/requirements-runtime.txt.
The Fish-Speech engine itself is bundled with the mod (vendored under
fish_speech/vendor/ — see Offline & self-contained design below), so
setup never clones or downloads it from GitHub.fishaudio/fish-speech-1.5
Hugging Face repo. No token, no account, no API key required.The first entry on first launch may stay silent while this runs; from the second entry onward the voice plays normally. Every subsequent game launch skips straight to the server — usually a 5–15 second warm-up.
If you'd rather pre-warm the install so the first entry isn't silent, run the launcher once before opening the game:
Mods/pokedex_voice_over/fish_speech/Start_TTS_Server.bat./Mods/pokedex_voice_over/fish_speech/start_tts_server.shLeave the terminal open. When the game closes, the mod closes it for you.
Auto-start is fully cross-platform: when you launch KIF the mod spawns
start_tts_server.sh in the background on its own (same as Windows, and on by
default), so in the common case you don't have to do anything.
There is one caveat for the very first launch. Auto-start runs the script detached with no terminal attached, which means:
sudo — which cannot ask for a password from a
background process, so the silent auto-start cannot bootstrap Python.So on Linux/macOS it is best to run the launcher once in a terminal for the first install, then let auto-start take over from then on:
cd "<KIF game root>/Mods/pokedex_voice_over/fish_speech"
bash ./start_tts_server.sh
This creates an isolated ./venv inside the mod folder, installs PyTorch and
the engine dependencies into it (you will see progress, plus any sudo prompt
to install Python), downloads the model, and runs a quick smoke test. Nothing
is installed into your system Python. Once it finishes, every later game launch
auto-starts the server silently — exactly like Windows.
Prerequisite: Python 3.10+ with the venv module. On Debian/Ubuntu:
sudo apt-get install -y python3 python3-venv (Fedora, Arch and openSUSE ship
venv with python3). For a clean reinstall later, delete fish_speech/venv/
and fish_speech/.installed, then relaunch.
Mods/pokedex_voice_over/piper/ and the mod will use that instead.Audio/SE/Pokedex/tts_cache/ so repeat visits play instantly.Settings are exposed both through KIF's Mod Manager (Title Screen → Mod Manager → Installed Mods → Pokédex Voice Over → Settings) and through Stonewall's Mod Settings if you have it installed (Options → Mod Settings → Interface → Pokédex Voice Over).
| Setting | Default | Description |
|---|---|---|
| Enable Voice Over | On | Master on/off switch. |
| Voice Volume | 80 | Playback volume (0–100). |
| Mute Music in Pokédex | On | Fade background music while the Pokédex is open. |
| Re-read on Page Return | Off | Re-play the voice when navigating back to the description page. |
| Fish-Speech Voice (Primary) | On | Use the offline voice-clone server as the primary voice. |
| Auto-Start Fish-Speech Server | On | Let the mod spawn the sidecar on demand instead of requiring a manual launch. |
| TTS Fallback (Piper) | On | Use Piper if Fish-Speech is unavailable. |
| Requirement | Notes |
|---|---|
| Kuray's Infinite Fusion | The Kuray fork with Mod Manager support (v0.9.4+). |
| Windows / macOS / Linux | Anything that runs KIF works. Windows uses a bundled portable Python; macOS/Linux install Python via Homebrew or your distro. |
| ~3 GB disk | ~1.4 GB for the model weights + ~1.5 GB for the PyTorch wheels. Both go in the mod folder, deletable any time. |
| GPU (optional) | CUDA NVIDIA GPU gets you ~0.5 s per entry. A modern CPU gets you ~3–8 s; the Pokémon cry masks most of that. |
| Internet (one time) | Only needed during first-launch setup (python.org + PyPI + Hugging Face). After that everything runs offline. |
The mod is a single Ruby script (main.rb) that hooks KIF's Pokédex scene
to capture the exact text being displayed (including auto-generated fusion
entries containing the literal POKENAME placeholder, which it resolves to
the actual fused name). It then calls a tiny local HTTP server in
fish_speech/ (POST 127.0.0.1:7861/tts) and plays the returned WAV
through RPGMaker's audio system.
The server is fish_speech/server.py — a thin wrapper around the
fish-speech 1.5 engine, which
is vendored into the mod at fish_speech/vendor/ and added to Python's
import path at startup. It keeps the model loaded between requests so per-entry
latency is sub-second on GPU. The model and its tokenizer are downloaded once
from the public
fishaudio/fish-speech-1.5
Hugging Face repo — no token, no account, no API key required.
If Fish-Speech is unavailable (e.g. the user declined the Python install
prompt or the GPU OOM'd) the mod falls through to its built-in Piper
path. Piper is the small offline neural TTS used by Home Assistant; drop
the matching piper.exe (or piper binary) and a *.onnx voice model
into Mods/pokedex_voice_over/piper/ and the mod picks it up automatically.
The Fish-Speech 1.5 engine source is vendored inside the mod at
fish_speech/vendor/ (a trimmed, pinned copy of the upstream code). server.py
puts that folder first on Python's import path, so the mod always runs the exact
engine it shipped with — it never pip installs fish-speech from GitHub or
PyPI. First-run setup therefore only installs (a) the right PyTorch wheel and
(b) the inference-only leaf packages in fish_speech/requirements-runtime.txt.
After that one-time download, nothing reaches the network at play time.
Maintainer note — keep the engine on 1.5. fish-speech 2.x reorganised the package and removed the firefly VQ-GAN module (
fish_speech.models.vqgan.modules.fsq.DownsampleFiniteScalarQuantize) that the 1.5 checkpoint instantiates, so a 2.x engine cannot load these weights. Don't bump the vendored copy to 2.x without also rewritingserver.pyand swapping the model checkpoint. To refresh the vendored source, copyfish_speech/andtools/from the upstreamv1.5.0tag intofish_speech/vendor/, keeping the.project-rootmarker and the per-directory__init__.pyfiles.
Delete the Mods/pokedex_voice_over/ folder. That's all — the bundled
Python interpreter, every pip-installed package, the model weights, and the
caches all live inside that folder, so there's no system cleanup left over.
(On macOS / Linux, Python was installed via Homebrew or your distro's package manager and stays installed in case other tools need it; remove it via your usual package-manager uninstall flow if you want it gone.)
| Symptom | Fix |
|---|---|
| Pokédex entries are silent | Open Mods/pokedex_voice_over/debug.log — it records every hook fire, file check, and TTS call. On a fresh install the most likely cause is "first-launch model download still running"; wait a couple of minutes on first run. |
| Bundled Python extraction fails | Check fish_speech/install_python.bat's output. If the network is blocked, manually download python-3.12.7-embed-amd64.zip from https://www.python.org/ftp/python/3.12.7/ and drop it into fish_speech/_embed/, then re-run Start_TTS_Server.bat. |
| pip bootstrap fails inside the bundled Python | Delete fish_speech/python/ and fish_speech/_embed/get-pip.py, then re-run Start_TTS_Server.bat. The launcher will redownload and rebootstrap. |
| First entry on first launch plays nothing | The model is downloading. Either pre-warm the server by double-clicking Start_TTS_Server.bat once before launching the game, or just wait for the second entry. |
CUDA out of memory in the sidecar window | Run Start_TTS_Server.bat --device cpu (or edit the .bat to add --device cpu). |
| Voice sounds wrong | Replace fish_speech/reference/voice.wav with your own 15–20 s reference clip (see fish_speech/reference/README.txt). |
| I want a clean reinstall | Delete Mods/pokedex_voice_over/fish_speech/.installed and Mods/pokedex_voice_over/fish_speech/checkpoints/, then relaunch. |
74 commits
47 commits
C
76.0%
Ruby
10.4%
Python
8.3%
C++
3.0%
Batchfile
1.3%