A modern desktop application for creating audiobooks with advanced text-to-speech and voice cloning capabilities
v1.1.2 - Simplified error handling with unified ApplicationError. See Release Notes.
v1.1.0 - Docker-based deployment, Remote GPU hosts, Engine variants. See Release Notes.
Audiobook Maker is a powerful Tauri 2.0 desktop application that transforms text into high-quality audiobooks using state-of-the-art text-to-speech technology. Built with a modern tech stack combining React, TypeScript, and Python FastAPI, it offers professional-grade features in an intuitive interface.

┌─────────────────────────────────────────────────────────────────┐
│ Audiobook Maker Desktop App │
│ (Tauri + React Frontend) │
└───────────────────────────┬─────────────────────────────────────┘
│ HTTP/REST API + SSE
▼
┌─────────────────────────────────────────────────────────────────┐
│ Backend Container (Port 8765) │
│ ghcr.io/digijoe79/audiobook-maker/backend │
├─────────────────────────────────────────────────────────────────┤
│ FastAPI │ SQLite │ TTS/Quality Workers │ Engine Managers │
│ │ │ │ (Docker Runner) │
└───────────────────────────┬─────────────────────────────────────┘
│ Docker API
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Local Docker │ │ Local Docker │ │ Remote Docker │
│ Engines │ │ Engines │ │ Host (GPU) │
│ xtts, spacy │ │whisper,silero │ │ xtts,whisper │
└───────────────┘ └───────────────┘ └───────────────┘
Key Architecture Features: - Backend and engines run as Docker containers - GPU engines can run on remote hosts via SSH tunnel - Automatic engine discovery from online catalog - Engine enable/disable with auto-stop after inactivity - Real-time updates via Server-Sent Events (SSE)
| Requirement | Purpose | Installation |
|---|---|---|
| Docker Desktop | Run backend and engines | Download |
| NVIDIA Container Toolkit | GPU support (optional) | Install Guide |
Note: For GPU-accelerated TTS (XTTS, Chatterbox, Whisper), you need an NVIDIA GPU with CUDA support and the NVIDIA Container Toolkit installed.
Download the latest Windows release from GitHub Releases:
Audiobook-Maker_1.1.1_x64-setup.exeLinux/macOS: No prebuilt binaries available. See Development Setup to build from source.
docker pull ghcr.io/digijoe79/audiobook-maker/backend:latest
docker run -d \
--name audiobook-maker-backend \
-p 8765:8765 \
--add-host=host.docker.internal:host-gateway \
-e DOCKER_ENGINE_HOST=host.docker.internal \
-v /var/run/docker.sock:/var/run/docker.sock \
-v audiobook-data:/app/data \
-v audiobook-media:/app/media \
ghcr.io/digijoe79/audiobook-maker/backend:latest
Important: The container must be named
audiobook-maker-backend. On startup, the backend cleans up orphaned engine containers (prefixaudiobook-) from previous sessions. Containers matching this prefix are stopped unless explicitly excluded by name.
http://localhost:8765Engines are pulled automatically from the online catalog:
See audiobook-maker-engines for the full list of available engines.
Run GPU-intensive engines on a dedicated server:
# On the remote GPU server
# Install Docker and NVIDIA Container Toolkit
curl -fsSL https://get.docker.com | sh
# Follow NVIDIA Container Toolkit installation guide
ssh://user@192.168.1.100For contributors who want to develop locally without Docker:
Development Installation (click to expand)
cd backend
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac
pip install -r requirements.txt
Clone the engines repository:
git clone https://github.com/DigiJoe79/audiobook-maker-engines backend/engines
Set up individual engines:
cd backend/engines/tts/xtts
setup.bat # Windows
./setup.sh # Linux/Mac
cd frontend
npm install
npm run dev:tauri
audiobook-maker/
├── frontend/ # Tauri + React desktop app
│ ├── src/ # React components, hooks, stores
│ ├── src-tauri/ # Rust backend (Tauri)
│ └── e2e/ # Playwright E2E tests
│
├── backend/ # Python FastAPI backend
│ ├── api/ # REST endpoints
│ ├── core/ # Engine managers, Docker runner
│ ├── services/ # Business logic
│ └── Dockerfile # Backend container definition
│
└── .github/workflows/ # CI/CD for container builds
When the backend is running: - Swagger UI: http://localhost:8765/docs - ReDoc: http://localhost:8765/redoc
Add -e LOG_LEVEL=DEBUG to the backend container for detailed logging. This is automatically passed through to engine containers.
docker run -d \
--name audiobook-maker-backend \
-e LOG_LEVEL=DEBUG \
...
# Check logs
docker logs audiobook-maker-backend
# Verify port is available
docker ps -a | grep 8765
The backend cleans up orphaned engine containers on startup. If your container is named differently than audiobook-maker-backend, it may be stopped as an orphan. Always use the exact name audiobook-maker-backend.
# Verify NVIDIA Container Toolkit
nvidia-smi
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
~/.ssh/authorized_keysssh user@hostThis happens when running the backend container in a custom network (e.g., macvlan, custom bridge) where host-gateway doesn't resolve correctly.
Symptoms:
- Engine containers start but immediately stop
- Logs show: Health check failed: [Errno -2] Name or service not known
Solutions:
Use host network mode (recommended for NAS systems like Unraid):
bash
docker run -d \
--name audiobook-maker-backend \
--network host \
--add-host=host.docker.internal:host-gateway \
-e DOCKER_ENGINE_HOST=host.docker.internal \
-v /var/run/docker.sock:/var/run/docker.sock \
-v audiobook-data:/app/data \
-v audiobook-media:/app/media \
ghcr.io/digijoe79/audiobook-maker/backend:latest
Or use explicit host IP:
bash
-e DOCKER_ENGINE_HOST=192.168.1.X # Your server's actual IP
This project is licensed under the MIT License - see the LICENSE file for details.
Made with care by DigiJoe79
$ claude mcp add AudioBook-Maker \
-- python -m otcore.mcp_server <graph>