This repository packages KittenTTS as both:
- a reusable
skills/kitten-ttsfolder for LLM tooling - a Docker image that exposes a local HTTP service
Use it when you want an agent to finish work and say something out loud without installing the full TTS runtime on the host.
The default baked model is KittenML/kitten-tts-mini-0.8.
docker pull ghcr.io/mrsimonc/kittentts-docker-cli:latest
docker run -d \
--name kittentts-http \
--restart unless-stopped \
-p 59151:8000 \
ghcr.io/mrsimonc/kittentts-docker-cli:latestVerify the service:
curl http://127.0.0.1:59151/healthzmkdir -p ~/.agents/skills
cp -R ./skills/kitten-tts ~/.agents/skills/kitten-ttsOther common skill locations:
~/.copilot/skills/kitten-tts
~/.claude/skills/kitten-tts
List voices:
python3 ./skills/kitten-tts/scripts/kittentts_say.py --list-voicesSpeak a short message:
python3 ./skills/kitten-tts/scripts/kittentts_say.py --voice Bella --text "Finished on one"The wrapper talks to http://127.0.0.1:59151, downloads the generated WAV to a temp file, and plays it with native host tooling.
GitHub Actions publishes the container image to:
ghcr.io/mrsimonc/kittentts-docker-cli:latest
The workflow runs on pushes to main, and also on the repo's current master branch until the default branch is renamed.
GitHub Container Registry packages are commonly created as private on first publish. If the image is not publicly pullable after the first workflow run, open the package settings in GitHub once and change visibility to Public.
If you want a different baked-in model than the published default image, build locally instead.
One-off build:
KITTENTTS_MODEL=KittenML/kitten-tts-micro-0.8 docker compose up -d --buildOr use .env:
cp .env.example .env
docker compose up -d --buildSupported baked models:
KittenML/kitten-tts-mini-0.8KittenML/kitten-tts-micro-0.8KittenML/kitten-tts-nano-0.8KittenML/kitten-tts-nano-0.8-int8
If you change KITTENTTS_MODEL, rebuild the image before restarting the container.
List voices:
curl http://127.0.0.1:59151/voicesGenerate speech:
curl \
-X POST http://127.0.0.1:59151/tts \
-H "Content-Type: application/json" \
-d '{"text":"Hello from KittenTTS Docker HTTP","voice":"Bruno","speed":1.0}'That response includes metadata plus a url field pointing to /audio/....
View logs:
docker logs -f kittentts-httpRestart:
docker restart kittentts-httpStop:
docker stop kittentts-httpRemove:
docker rm -f kittentts-http- Host port:
59151 - Health endpoint:
http://127.0.0.1:59151/healthz - Voices endpoint:
http://127.0.0.1:59151/voices - Direct TTS endpoint:
http://127.0.0.1:59151/tts - Generated audio endpoint:
http://127.0.0.1:59151/audio/<id>.wav - Container behavior:
restart: unless-stopped
