Self-hosted Podcasting 2.0 service that turns saved articles into a personal podcast feed.
Paste a URL or upload a document (PDF including scanned, DOCX, Markdown, text, HTML, or an image), wait a few minutes, and get an episode with cloned-voice narration, chapters, artwork, an LLM-written episode summary, and a WebVTT transcript. Subscribe in Pocket Casts, Overcast, or Apple Podcasts like any other show.
Your reading list, as a podcast you own.
I read too much, I like my hands free on the go, and the existing article-to-audio tools either lock the audio in their app, charge per minute, or use voices that sound like an airport PA. I wanted something that:
- I control fully
- produces a real podcast feed any podcatcher can subscribe to
- uses my own voice (or any voice I have rights to)
- keeps my reading list private
That's what this is. No GPU? It runs on CPU too, just slower.
Home: paste a URL or drop files (up to 20 at once), and they join the feed.
Feed: search and page through your episodes, with inline players, transcripts, and per-episode actions.
Settings: everything grouped by subject, searchable as you type.
A short clip of cloned-voice narration.
trim.B6BE34AB-D812-4973-8866-AC36AE24443C.MOV
You need Docker and docker-compose. The app boots unconfigured: set the LLM provider, feed metadata, and admin password, and upload a reference voice, from the Settings UI after it starts.
git clone https://github.com/ttlequals0/Audicle && cd Audicle
cp .env.example .env # compose requires .env to exist; pre-set BASE_URL and any defaults here
docker compose up -dThe web UI is at http://localhost:8000/, and it installs as a PWA on a phone home screen. The Feed page shows the exact RSS URL to paste into a podcatcher.
Full setup, including CPU-only deployment and file permissions, is in Installation.
The docs index links everything. The short version:
- How it works - the pipeline, the extraction cascade, and the quality gates that regenerate bad audio
- Installation and the web interface
- Configuration and every environment variable
- Voices and TTS - voice cloning, and running Chatterbox or Whisper on another host
- Paywalled articles - what happens when a site serves a teaser instead of the article
- Feeds and Podcasting 2.0, the API and webhooks, and a glossary
- Releasing and the deployment runbook
backend/ FastAPI app, SQLite, the job pipeline
tts-wrapper/ TTS model server (Chatterbox; separate GPU container)
render/ full-article render sidecar (Camoufox + xvfb; clicks expand gates)
frontend/ React + Tailwind operator UI
docs/ documentation and screenshots
data/ runtime artifacts (gitignored: SQLite, MP3, JPG, VTT)
docker-compose.yml
Backend:
uv sync
uv run pytest # 1000+ tests, a few minutes
uv run uvicorn app.main:create_app --factory --reload --app-dir backendFrontend:
cd frontend && npm install && npm run dev # Vite, hot reloadThe tts-wrapper/ and render/ packages have their own test suites (uv run pytest in each). Lint with uv run ruff check from the root; one run covers everything. The OpenAPI schema lives at openapi.yaml; regenerate it with uv run python scripts/dump_openapi.py.
CodeQL runs on every PR through GitHub's default-setup code scanning (there is no in-repo workflow file for it).
The application code is MIT. A few things downstream of it have their own terms:
- Chatterbox is the TTS engine. The
chatterbox-ttslibrary and its model weights are MIT, so there's no non-commercial restriction on the model itself. Every output carries Resemble's inaudible PerTh watermark for provenance, with no flag to turn it off. - Wrapper Python pin: the wrapper runs Python 3.11 from its
python:3.11-slimbase with torch 2.6.0 installed from PyPI (the CUDA-enabled cu124 wheel). The Python ceiling trackschatterbox-tts'storch==2.6.0pin. The backend is separate: Python>=3.13, shipped onpython:3.14-slim.
The Audicle name and logo are reserved; see branding/README.md.
This project was developed with AI agents as a pair programmer. It was NOT vibe coded. I'm a systems engineer with 15+ years of professional experience; every architecture and design decision here is mine, not the AI's, and every line the LLMs wrote, I reviewed and tested myself.
The paywall bypass strategies are inspired by Ladder; see Paywalled articles.





