Skip to content

amajorai/ryu-voice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ryu-voice

Voice for Ryu — the universal TTS sidecar: a self-contained Python HTTP front over several text-to-speech engines (Kokoro, Kitten, Pocket), part of Ryu's speech data path.

The public home of ryu-voice. Source, builds, and releases live here — binaries for every platform are attached to each release.

This tree is generated from the Ryu monorepo, so commits pushed here directly are replaced on the next sync. Pull requests are welcome — open them here and they are ported into the monorepo, then flow back out. Ryu as a whole: https://github.com/amajorai/ryu

Source & build

The source of record for the universal Ryu TTS sidecar — a self-contained Python HTTP front over several text-to-speech engines. Install its dependencies (pip install -r sidecar/requirements.txt) and run python -m ryu_tts from sidecar/; Core manages it as a sidecar in a full Ryu install.

License

Apache-2.0 — see LICENSE.


com.ryu.voice — Voice

The voice data path: speech-to-text (whisper.cpp) and text-to-speech (OuteTTS + the universal Ryu TTS sidecar), plus the installable TTS model catalog. The app is the governance shell over Core's in-crate voice module — no new backend logic of its own, just the manifest that names the capability surface.

Parts

  • sidecar/ — the Ryu TTS sidecar (Python, out-of-process). A thin FastAPI runtime (ryu-tts-sidecar) that fronts many TTS engines behind one contract (GET /health, GET /engines, POST /generateaudio/wav, POST /unload). Fenced out of the bun/turbo workspace; runs on its own Python toolchain. Core owns lifecycle, model downloads, the catalog, and the ?engine= selector on /api/voice/speak; this process is a pure inference runtime (the same way Core manages whisper.cpp's whisper-server and sd.cpp's sd-server). See sidecar/README.md.
  • Manifest — the Core fixture apps/core/src/plugin_manifest/fixtures/voice.manifest.json (id com.ryu.voice). runnables: [], no grants: STT/TTS ride Core's existing /api/voice/* endpoints; this app just declares the capability boundary.

Engine registry (swap seam)

The HTTP layer never grows a per-engine branch. Adding an engine is one EngineConfig row in ryu_tts/registry.py plus one ryu_tts/backends/<module>.py implementing the TtsBackend protocol (load/generate/unload/is_loaded). Seeded: kokoro (Kokoro 82M — the Ryu default, CPU-only ONNX; Core auto-downloads weights + voice pack during onboarding and injects them via RYU_KOKORO_MODEL/RYU_KOKORO_VOICES), kitten (KittenTTS), and pocket (Kyutai Pocket TTS, voice cloning via reference_audio). Heavy inference deps are optional extras and imported lazily inside backend methods, so a missing dep degrades only that one engine.

Run

bun run dev:tts, or from sidecar/: pip install -e ".[kokoro]" then python -m ryu_tts (serves 127.0.0.1:8085, RYU_TTS_PORT to override).

About

Voice for Ryu — the universal TTS sidecar: a self-contained Python HTTP front over several text-to-speech engines (Kokoro, Kitten, Pocket), part of Ryu's speech data path.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages