rkotulan/audiomat

audiomat is a self-hosted Docker app that converts EPUB / TXT books into audiobook M4Bs using your own voice as the narrator. Upload a 10-second voice clip, pick a book, get a chaptered audiobook — works in 600+ languages including Czech.

0

stars

123

commits

Python

primary language

Jun 9, 2026

updated

README

audiomat

Convert eBooks into audiobooks with cloned voices, locally and offline.

"Vlož knihu, vypadne audiokniha." — feed in a book, get an audiobook out.

Status: alpha — full pipeline working end-to-end, actively used for personal Czech audiobook conversion. Issues + PRs welcome.

audiomat — Render tab mid-job on Skleněný muž

What audiomat is

A focused, GPU-accelerated audiobook generator built around OmniVoice (Apache-2.0). One-stack, opinionated, optimized for Czech (works for 600+ languages because OmniVoice does, but Czech narrative quality is the design target).

You give it:

  • An EPUB or TXT file
  • A 5–10 s WAV of a voice you want to clone, plus its transcript

audiomat produces:

  • An M4B audiobook with chapter markers
  • Per-chapter WAVs (loudness-normalized to -16 LUFS audiobook standard)
  • Resumable per-chunk cache (interrupted run = restart picks up where it left off)

Why not [pick another tool]

There are several solid open-source audiobook generators (epub2tts, audiobook_maker, abogen, chatterbox-Audiobook, …). audiomat differs:

  • One TTS engine, not a selector. OmniVoice fixed. Less surface, fewer bugs.
  • Czech-first. Section-header pause injection, time-marker handling, 5–10 s reference voice clip workflow (OmniVoice native window), pipeline validated end-to-end on full Czech audiobook renders.
  • Project-shaped UX. Named projects (not session UUIDs), shared voice library re-usable across books, parameter-sweep preview matrix.
  • Premium defaults. num_step=48, guidance_scale=2.0 baked in — validated via direct A/B against an original human recording.

Tested alternatives

Before settling on OmniVoice we A/B-tested several TTS engines on the same Czech reference voice (5–10 s clip, narrator Jitka Ježková). All samples below render the same Czech excerpt. Ratings are subjective on Czech narrative content; speed is end-to-end on a single RTX 5070 (12 GB).

EngineProviderCostLicenseSpeedQuality (CZ)Sample
OmniVoicewinnerk2-fsa/OmniVoiceFreeApache-2.0★★★★☆★★★★☆▶ Listen
Fish Speech S2-Profishaudio (model) + mach9243 (Q8_0 GGUF) via s2.cpp (Vulkan)Free (non-commercial)Fish Audio Research License★☆☆☆☆★★★★☆▶ Listen
Chatterbox-CZResemble AI + Thomcles CZ fine-tuneFreeMIT + CC0★★★★☆★★★★☆▶ Listen
XTTS v2coqui/XTTS-v2Free (non-commercial)CPML★★★☆☆★★☆☆☆▶ Listen
TopMediai (cloud)topmediai.comPaidCommercial SaaS★★★★★★★★★★▶ Listen

TopMediai is the highest-quality option overall but it's a paid cloud service — out of scope for a local, offline-first audiobook tool. Among the self-hostable engines, OmniVoice and Chatterbox-CZ are roughly tied on Czech quality; OmniVoice wins on operational simplicity (single in-process model, no server lifecycle, no fine-tune dependency) and on multilingual reach (600+ languages out of the box). Fish Speech S2-Pro shipped the predecessor production cut (Skleneny_muz_s2.m4b, 13:46:33) but its s2.cpp Vulkan server has VRAM degradation that needed a render-loop restart wrapper, and the F16 weights OOMed on 12 GB VRAM (s2-pro-q8_0-transformer-only.gguf 5.0 GB + s2-pro-q8_0-codec-only.gguf 976 MB was the only viable quantization).

Install

The supported install path is Docker (multi-stage image bundles backend + frontend). Local Python is fine for development.

git clone https://github.com/rkotulan/audiomat.git
cd audiomat
docker compose up --build
# open http://localhost:7860

The compose file mounts a named volume at /data for voices, projects, and the OmniVoice model cache (~3 GB, downloaded on first render).

NVIDIA GPU + recent driver required (CUDA 12.8 wheels in the image).

Manual Docker

docker run --gpus all \
    -p 7860:7860 \
    -v audiomat-data:/data \
    -e AUDIOMAT_LIBRARY_ROOT=/data \
    kotulan/audiomat:latest

Development setup

Backend (Python ≥ 3.11, NVIDIA GPU + CUDA 12.x):

cd audiomat/
python -m venv .venv
. .venv/bin/activate         # or .venv\Scripts\activate on Windows
pip install -r requirements.txt

Frontend (Node ≥ 20):

cd frontend/
npm install
npm run dev      # Vite on http://localhost:5173, proxies /api → :8000

Optional Claude Code design skill (recommended if you use Claude Code):

npm install -g uipro-cli
uipro init --ai claude     # installs ui-ux-pro-max into .claude/skills/

The skill is gitignored — install once locally; restart Claude Code to pick it up.

License

MIT — see LICENSE.

OmniVoice model checkpoint is pulled at runtime from k2-fsa/OmniVoice (Apache-2.0). audiomat does not redistribute model weights.

Acknowledgments

Contributors

rkotulan

123 commits

rkotulan/audiomat

audiomat is a self-hosted Docker app that converts EPUB / TXT books into audiobook M4Bs using your own voice as the narrator. Upload a 10-second voice clip, pick a book, get a chaptered audiobook — works in 600+ languages including Czech.

0

stars

123

commits

Python

primary language

Jun 9, 2026

updated

README

audiomat

Convert eBooks into audiobooks with cloned voices, locally and offline.

"Vlož knihu, vypadne audiokniha." — feed in a book, get an audiobook out.

Status: alpha — full pipeline working end-to-end, actively used for personal Czech audiobook conversion. Issues + PRs welcome.

audiomat — Render tab mid-job on Skleněný muž

What audiomat is

A focused, GPU-accelerated audiobook generator built around OmniVoice (Apache-2.0). One-stack, opinionated, optimized for Czech (works for 600+ languages because OmniVoice does, but Czech narrative quality is the design target).

You give it:

  • An EPUB or TXT file
  • A 5–10 s WAV of a voice you want to clone, plus its transcript

audiomat produces:

  • An M4B audiobook with chapter markers
  • Per-chapter WAVs (loudness-normalized to -16 LUFS audiobook standard)
  • Resumable per-chunk cache (interrupted run = restart picks up where it left off)

Why not [pick another tool]

There are several solid open-source audiobook generators (epub2tts, audiobook_maker, abogen, chatterbox-Audiobook, …). audiomat differs:

  • One TTS engine, not a selector. OmniVoice fixed. Less surface, fewer bugs.
  • Czech-first. Section-header pause injection, time-marker handling, 5–10 s reference voice clip workflow (OmniVoice native window), pipeline validated end-to-end on full Czech audiobook renders.
  • Project-shaped UX. Named projects (not session UUIDs), shared voice library re-usable across books, parameter-sweep preview matrix.
  • Premium defaults. num_step=48, guidance_scale=2.0 baked in — validated via direct A/B against an original human recording.

Tested alternatives

Before settling on OmniVoice we A/B-tested several TTS engines on the same Czech reference voice (5–10 s clip, narrator Jitka Ježková). All samples below render the same Czech excerpt. Ratings are subjective on Czech narrative content; speed is end-to-end on a single RTX 5070 (12 GB).

EngineProviderCostLicenseSpeedQuality (CZ)Sample
OmniVoicewinnerk2-fsa/OmniVoiceFreeApache-2.0★★★★☆★★★★☆▶ Listen
Fish Speech S2-Profishaudio (model) + mach9243 (Q8_0 GGUF) via s2.cpp (Vulkan)Free (non-commercial)Fish Audio Research License★☆☆☆☆★★★★☆▶ Listen
Chatterbox-CZResemble AI + Thomcles CZ fine-tuneFreeMIT + CC0★★★★☆★★★★☆▶ Listen
XTTS v2coqui/XTTS-v2Free (non-commercial)CPML★★★☆☆★★☆☆☆▶ Listen
TopMediai (cloud)topmediai.comPaidCommercial SaaS★★★★★★★★★★▶ Listen

TopMediai is the highest-quality option overall but it's a paid cloud service — out of scope for a local, offline-first audiobook tool. Among the self-hostable engines, OmniVoice and Chatterbox-CZ are roughly tied on Czech quality; OmniVoice wins on operational simplicity (single in-process model, no server lifecycle, no fine-tune dependency) and on multilingual reach (600+ languages out of the box). Fish Speech S2-Pro shipped the predecessor production cut (Skleneny_muz_s2.m4b, 13:46:33) but its s2.cpp Vulkan server has VRAM degradation that needed a render-loop restart wrapper, and the F16 weights OOMed on 12 GB VRAM (s2-pro-q8_0-transformer-only.gguf 5.0 GB + s2-pro-q8_0-codec-only.gguf 976 MB was the only viable quantization).

Install

The supported install path is Docker (multi-stage image bundles backend + frontend). Local Python is fine for development.

git clone https://github.com/rkotulan/audiomat.git
cd audiomat
docker compose up --build
# open http://localhost:7860

The compose file mounts a named volume at /data for voices, projects, and the OmniVoice model cache (~3 GB, downloaded on first render).

NVIDIA GPU + recent driver required (CUDA 12.8 wheels in the image).

Manual Docker

docker run --gpus all \
    -p 7860:7860 \
    -v audiomat-data:/data \
    -e AUDIOMAT_LIBRARY_ROOT=/data \
    kotulan/audiomat:latest

Development setup

Backend (Python ≥ 3.11, NVIDIA GPU + CUDA 12.x):

cd audiomat/
python -m venv .venv
. .venv/bin/activate         # or .venv\Scripts\activate on Windows
pip install -r requirements.txt

Frontend (Node ≥ 20):

cd frontend/
npm install
npm run dev      # Vite on http://localhost:5173, proxies /api → :8000

Optional Claude Code design skill (recommended if you use Claude Code):

npm install -g uipro-cli
uipro init --ai claude     # installs ui-ux-pro-max into .claude/skills/

The skill is gitignored — install once locally; restart Claude Code to pick it up.

License

MIT — see LICENSE.

OmniVoice model checkpoint is pulled at runtime from k2-fsa/OmniVoice (Apache-2.0). audiomat does not redistribute model weights.

Acknowledgments

Contributors

rkotulan

123 commits

Languages

Python

65.1%

TypeScript

33.9%