skald/engines
2026-06-28 21:38:51 -07:00
..
f5-tts skald (engine/kokoro): public release prep — AGPL-3.0, generic config, engine-variant README 2026-06-28 21:38:51 -07:00
kokoro skald (engine/kokoro): public release prep — AGPL-3.0, generic config, engine-variant README 2026-06-28 21:38:51 -07:00
tortoise skald (engine/kokoro): public release prep — AGPL-3.0, generic config, engine-variant README 2026-06-28 21:38:51 -07:00
README.md skald (engine/kokoro): public release prep — AGPL-3.0, generic config, engine-variant README 2026-06-28 21:38:51 -07:00

Skald TTS engines

This subtree holds the per-engine sidecars that skald's narrate path talks to over HTTP. Each engine has the same contract:

  • POST /synthesize — same JSON shape across engines so skald's one Rust client (skald-core::narrate::Narrator) deserializes all of them. See engines/<name>/server.py for the per-engine implementation.
  • GET /healthz — boot probe + model-loaded flag.

Skald routes per-request by voices.source: a kokoro_* source goes to $KOKORO_URL, a tortoise_* source goes to $TORTOISE_URL, anything else (lj_speech, generic) goes to $F5_TTS_URL.

Engines

Dir Engine License (code/weights) VRAM Speed Voices
f5-tts/ SWivid F5-TTS v1 MIT / CC-BY-NC ~5GB fast (~2x real-time on 2070S) voice cloning (LJ Speech reference shipped)
kokoro/ hexgrad Kokoro-82M Apache 2.0 / Apache 2.0 ~1GB very fast (~50x real-time) 50+ named presets (af_, am_, bf_, bm_)
tortoise/ neonbjb Tortoise-TTS Apache 2.0 / Apache 2.0 ~5GB slow (~0.014x real-time, ~74s/s of audio on 2070S, standard preset) 26 named built-ins (lj, freeman, daniel, weaver, jlaw, etc.)

Branch model

main carries the vanilla version of each engine — what you'd get from a clean pip install <engine> plus the FastAPI sidecar

  • control-tag splitter. No engine-specific kludges. Safe to look at without context.

engine/<name> branches hold engine-tuned tweaks that don't generalise. Examples:

  • engine/kokoro — doubled-?? prosody hack for the 82M's weak question intonation, paragraph/scene/breath gap durations tuned for af_heart's pacing, notes on how respellings need to be all- lowercase to avoid letter-by-letter spell-out by misaki.
  • engine/tortoise — sentence chunking, device selection, and pitch/rate modulation tuned for Tortoise's audiobook-quality output. On an 8GB card Tortoise wants the GPU largely to itself, so run it when the other engines are stopped.

To deploy a tuned engine, check out the engine's branch in the build dir and docker compose up -d --build:

git fetch && git checkout engine/kokoro
docker compose up -d --build

GPU coordination

On an 8GB card F5 + Kokoro can co-reside (~5GB + ~1GB). Tortoise pushes the budget over and needs the GPU largely to itself — stop kokoro + f5 before a Tortoise run and restart them after, or give Tortoise its own card. Proper multi-engine coordination is left to the deployment once more VRAM is available.