Skip ads in any podcast, automatically, in your podcast app of choice. PodWash is a self-hosted proxy that subscribes to RSS feeds, transcribes each episode with Whisper, identifies the ad reads with Claude, cuts them with ffmpeg, and re-serves a clean feed. Point your podcast app at PodWash’s URL instead of the original feed and the ads are gone — no extension, no app, no manual scrubbing.
Open source at github.com/synodic-studio/podwash — MIT licensed.
Role: Developer
The Web UI
The whole user-facing surface of PodWash is a single submit page. Paste a podcast RSS or Apple Podcasts URL, copy the clean feed back, and subscribe to it in any podcast app.
Once you’ve added a feed, PodWash gives you a clean URL for it. Subscribe to that URL in your podcast app instead of the original feed and the ads are gone. The list also shows total episode count and how many are ready to play.
The flow is short enough to fit on the same page, with a status legend so you can see at a glance which episodes are ready, processing, or queued.
How It Works
RSS feed ─► download MP3 ─► Whisper transcribe ─► Claude classify ─► ffmpeg cut ─► clean RSS
- PodWash polls each subscribed feed for new episodes
- New episodes are downloaded and transcribed with Whisper
- Claude reads the transcript and marks ad segments with start/end timestamps
- ffmpeg cuts the marked segments out of the original audio
- PodWash re-publishes the cleaned episode in a proxy RSS feed at
/feeds/{slug}.xml - Subscribe to that URL in any podcast app — episodes show up ad-free
Until an episode is processed, PodWash serves a short placeholder clip and queues the work, so listeners are never blocked by an in-progress transcription.
Architecture
PodWash is two-process by design — the heavy AI pipeline can live anywhere, separate from the always-on web tier:
- Server — FastAPI app handling RSS polling, RSS generation, file serving, and a tiny job queue. Designed to run as a small Docker container on any always-on host (a $5/month VPS is plenty).
- Worker — does the heavy lifting (Whisper, Claude, ffmpeg) and pulls jobs from the server’s queue API. Runs anywhere with the spare CPU and RAM you’d rather not pay cloud rates for, like a Mac at home.
Both halves can run on the same machine for local use. The split exists for one reason: Whisper is slow on CPU, and a beefy local machine is dramatically cheaper than the equivalent VPS.
Reliability
PodWash has a four-layer self-healing posture because operator attention is the expensive resource and a headless Claude session is cheap:
- Worker preflight verifies imports, secrets, server reachability, and Anthropic API auth before each worker run
- Crash escalation wrapper runs under system Python so a broken project venv can’t take it down — after a crash burst it spawns a headless
claude -psession that can fix the repo in place (uv sync, config repair, etc.) - Idle watchdog runs every five minutes and detects alive-but-stuck workers — feeds them to the same self-heal agent
- Server-side watchdog is the backstop for when the worker host itself is offline, with optional Telegram alerting
Most failure modes resolve themselves before anyone gets paged.
Built With
- Anthropic Claude for ad segment classification with structured output
- faster-whisper for fast on-CPU transcription
- ffmpeg for the actual audio cuts
- FastAPI + APScheduler for the server, RSS polling, and job queue
- uv for dependency management
- SQLite for state, Docker for the server image, launchd for the macOS worker
Status
PodWash is live in personal use and published as MIT-licensed open source. The README walks through a single-machine local install for anyone who wants to run their own.