Skip to content

Changelog

All notable changes to Kenkui are recorded here. The format follows Keep a Changelog, and versions follow Semantic Versioning.

Unreleased

10.0.0 - Unreleased

Kenkui 10 is a ground-up rewrite. It shares no code with the 2.x series, and none of the 2.x API carries over. The version is 10 in binary: the second generation.

Added

  • An immutable, typed Pipeline API: book(), fluent intent methods, validate(), inspect(), resolve(), and write(), plus magic_run() for one-call rendering.
  • Local speech synthesis with Pocket-TTS 2.1.0, in spawned worker processes, with a private per-book audio cache and atomic M4B publication through FFmpeg.
  • Explicit voice provisioning with load_voice(), unload_voice(), add_voice(), remove_voice(), and list_voices(), over a built-in catalog of 26 upstream voices and 95 precompiled kenkui-voices.
  • Multi-voice casting: character discovery with spaCy or a LiteLLM model, an optional identity pass that merges aliases, LiteLLM quote attribution (including unnamed speakers), and a deterministic casting solver with gendered and random methods.
  • Character review with resolve(until="characters") and with_characters().
  • Series continuity: .series() keeps characters' voices across volumes.
  • Speech shaping: pronounce() with lexicons, number-reading tiers, and vocal gesture collapsing; pauses(); and cover art control.
  • The dial-in loop: script(), attribute(), silence(), scoped pronounce(), select(), preview(), and sidecar corrections with annotations() and write_annotations().
  • Progress events, cooperative cancellation, and stable ErrorCode values on every failure.
  • Runnable examples in examples/.