Convert Ebooks to Audiobooks with [custom] voice samples
Project description
kenkui
Freaky fast audiobook generation from EPUBs. No GPU. No nonsense.
kenkui turns EPUB ebooks into high-quality M4B audiobooks using state-of-the-art text-to-speech — entirely on CPU, and faster than anything else I've used.
It's built on top of Kyutai's pocket-tts, with all the annoying parts handled for you: chapter parsing, batching, metadata, covers, voices, and sane defaults.
If you have ebooks and want audiobooks, kenkui is for you.
✨ Features
- Freaky fast audiobook generation
- No GPU needed, 100% CPU
- Super high-quality text-to-speech
- Multithreaded
- EPUB-aware chapter parsing
- Flexible chapter filtering with regex patterns and presets
- Custom voices
- Batch processing
- Automatic cover embedding (EPUB → M4B)
- Sensible defaults, minimal configuration
🚀 Quick Start
kenkui is intentionally easy to install and easy to use.
One-line installer (macOS / Linux)
curl -sSL https://raw.githubusercontent.com/D1zzl3D0p/kenkui/main/install.sh | bash
One-line installer (Windows)
powershell -Command "irm https://raw.githubusercontent.com/D1zzl3D0p/kenkui/main/install.ps1 | iex"
Requirements
- Python 3.12+
- One Python installer:
uv(recommended),pip, orpipx
Manual install
uv tool install kenkui
Or with pip/pipx:
pip install kenkui
# or
pipx install kenkui
Run
kenkui book.epub
That's it. You'll get a book.m4b alongside your EPUB.
You can also point Kenkui at a directory, and it will recursively convert all EPUBs it finds. Running without arguments searches the current directory and all subdirectories.
📚 Usage
You can pass either a single EPUB file or a directory.
# Convert a single book
kenkui book.epub
# Convert an entire library (interactive book selection)
kenkui library/
# Convert all books without prompting
kenkui library/ --no-select-books
# Specify output directory
kenkui book.epub -o output/
# Log detailed output to file
kenkui book.epub --log conversion.log
# Debug mode with full logging
kenkui book.epub --log debug.log --verbose
🎙️ Voice Selection
Use -v or --voice to choose a voice.
Accepted inputs:
-
One of pocket-tts's default voices:
alba, marius, javert, jean, fantine, cosette, eponine, azelma -
A local
.wavfile -
A Hugging Face-hosted voice:
hf://user/repo/voice.wav
To see everything Kenkui can currently use:
kenkui --list-voices
🎭 Custom Voices
To use your own voice, record a 5–10 second clip of clean speech with minimal background noise or crosstalk.
Cleaning the audio makes a noticeable difference. Tools like Adobe's Enhance Speech work well: https://podcast.adobe.com/en/enhance
FAQ
Do I need a GPU?
No. kenkui is 100% CPU-based.
Is it actually fast?
Yes. That's the entire point of the project.
What output format does it use?
M4B, with chapters, metadata, and embedded covers.
Can it generate MP3s?
No. This is intentional — M4B is a significantly better format for audiobooks.
Does it support formats other than EPUB?
Not currently. EPUB only, for now.
Why do I need to log in to Hugging Face for custom voices?
The pocket-tts model that powers kenkui is hosted on Hugging Face and is "gated," meaning the authors require users to accept their terms of use before downloading it. This is a one-time setup that takes about 2 minutes.
When you first use a custom voice (anything other than the 8 built-in defaults), kenkui will guide you through:
- Creating a free Hugging Face account (if you don't have one)
- Generating a read-only access token
- Accepting the model's terms of use
The process is interactive and will open your browser at the right pages. You only need to do this once.
Does it upload my books anywhere?
No. Everything runs locally. Internet access is only needed if you pull voices from Hugging Face.
Why isn't Kenkui finding my EPUB in a hidden directory?
Kenkui doesn't search hidden directories by default. If you have books in hidden folders, pass the file directly instead of the directory:
kenkui /path/to/hidden/directory/book.epub
Non-Goals
kenkui is not meant to be:
- A general-purpose text-to-speech framework
- A GUI application
- An MP3 audiobook generator
- A pluggable frontend for every TTS backend available
The focus is narrow by design: fast, high-quality audiobook generation from EPUBs, with minimal friction.
🙏 Special Thanks
Thanks to Project Gutenberg for providing some of the public-domain books included with Kenkui.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kenkui-1.0.0.tar.gz.
File metadata
- Download URL: kenkui-1.0.0.tar.gz
- Upload date:
- Size: 83.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da1359898ff7ed3f6cd1a31873fc2a22485881a0e59c6afb0403c97c9f24d8a4
|
|
| MD5 |
098d215b209915c2fa7295da266e6cfc
|
|
| BLAKE2b-256 |
7dd06c5326fcd5ad1c549b52c05b2b61eb4f62ac6ff87e37c0195fe37f2ce8d4
|
File details
Details for the file kenkui-1.0.0-py3-none-any.whl.
File metadata
- Download URL: kenkui-1.0.0-py3-none-any.whl
- Upload date:
- Size: 83.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
704978d8d4edaa54e7857ece3a251da94811a4dc9b05e11b5ee550037a7172db
|
|
| MD5 |
e1461821a6f89f48a591ea2ce073666d
|
|
| BLAKE2b-256 |
b6589489cbaeefae6c2f8d28055a638a262a8b52ae9aa69c2e5c215306928749
|