Applio ships with two ready-made Dockerfiles that let you run the full Gradio web UI inside an isolated container — no local Python environment required.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/IAHispano/Applio/llms.txt
Use this file to discover all available pages before exploring further.
Dockerfile is based on python:3.12-trixie and installs a CUDA-enabled PyTorch build, making it suitable for systems where the NVIDIA runtime is available via the host driver. Dockerfile_cuda is purpose-built for NVIDIA GPUs and pulls directly from the official nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04 base image, cloning Applio from GitHub at build time. Both variants install system dependencies (ffmpeg, libportaudio2), create an isolated .venv virtual environment, install PyTorch, and launch app.py bound to 0.0.0.0 so the Gradio UI is reachable from outside the container.
Prerequisites
Before you begin, make sure the following are available on your host machine:- Docker 20.10+ —
docker --version - Docker Compose —
docker compose version(or the olderdocker-composeCLI) - NVIDIA Container Toolkit — required only for GPU passthrough; follow the official installation guide
- Compatible NVIDIA drivers (CUDA 12.8+ recommended for the CUDA image)
Quick Start with docker-compose
The repository includes adocker-compose.yaml that builds from the CPU Dockerfile, exposes port 6969, and requests one NVIDIA GPU. It is the fastest way to get running:
The compose file exposes port
6969 but does not bind it to a specific host port. To access the UI from your browser, change "6969" to "6969:6969" in the ports section, or let Docker assign a random host port and check it with docker-compose ps.http://localhost:6969 in your browser to reach the Applio Gradio interface.
Manual Build — CPU / Generic
Use the standardDockerfile when you do not need CUDA, or when you want a smaller, more portable image. This Dockerfile is based on python:3.12-trixie and copies your local repository into the container:
Run the container
-v flag mounts your local logs/ directory into the container so trained models and conversion outputs survive container restarts.CUDA Build — NVIDIA GPU
Dockerfile_cuda uses nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04 as its base and clones the Applio repository from GitHub directly into the image (no local copy of the repo is needed):
Build the CUDA image
Because
Dockerfile_cuda clones the repository from GitHub at build time, you do not need to run this command from within the Applio source directory. A build context with just the Dockerfile is sufficient.Run with GPU passthrough
--gpus all flag passes all available NVIDIA GPUs into the container. Replace all with a specific GPU ID (e.g. "device=0") to restrict which GPUs are exposed.Port Reference
| Port | Purpose |
|---|---|
6969 | Gradio web UI (default) |
EXPOSE 6969. The CPU Dockerfile passes --port 6969 explicitly to app.py; Dockerfile_cuda omits --port and relies on the DEFAULT_PORT = 6969 defined in app.py. If you need to change the host-side port, adjust the -p flag: -p 8080:6969 maps host port 8080 to container port 6969.
Persistent Volume — /app/logs/
The CPU Dockerfile declares /app/logs/ as a Docker volume. Dockerfile_cuda does not include a VOLUME instruction, so for CUDA-based containers you must supply the mount explicitly via -v. This directory stores:
- Trained voice model checkpoints (
.pthfiles) - Feature index files (
.indexfiles) - Per-model training configuration (
config.json) - Conversion and training logs
Environment Variables
The CPUDockerfile sets the following environment variable to ensure the virtual environment’s binaries are found by any subprocess:
-e VAR=value to docker run or add an environment: block to your docker-compose.yaml.
Network Access
TheCMD in both Dockerfiles binds Applio to 0.0.0.0, meaning the server listens on all container network interfaces and is accessible via the mapped host port. The CPU Dockerfile splits the command across ENTRYPOINT and CMD:
Dockerfile_cuda uses a self-contained CMD with the venv Python and omits --port (defaulting to 6969 via app.py):