
MinusPod: Self-Hosted Audio Pipeline That Strips Podcast Ads Using Whisper and Local LLMs
MinusPod: An Autonomous Pipeline That Strips Podcast Ads Before Playback
MinusPod is a self-hosted audio processing server that intercepts podcast RSS subscriptions, transcribes audio using Whisper, identifies dynamically inserted advertisements via large language models, and publishes clean feeds directly to your podcast client.
What It Is
Podcasts have steadily shifted away from static host-read endorsements toward Dynamic Ad Insertion (DAI). When a podcast client fetches an episode, upstream ad servers splice geotargeted, volume-boosted commercial segments into the audio file on the fly. Listeners typically respond by manually stabbing the 30-second skip button while driving or exercising, or by paying premium monthly subscriptions to proprietary platforms that gate individual shows behind paywalls.
MinusPod (developed under the MIT license by maintainer ttlequals0 and reaching release v2.95.3) tackles this friction at the infrastructure layer. Rather than operating as an on-device playback client with heuristic skip buttons, MinusPod sits between the open internet and your podcast aggregator. It mirrors subscriptions, pulls new episode audio when published, runs a multi-tier detection pipeline to pinpoint exact commercial timestamps down to the millisecond, splices out the ad segments without re-encoding the remaining audio, and serves a sanitized Podcasting 2.0-compliant RSS feed to standard players like Pocket Casts, Overcast, or AntennaPod.
The MinusPod Processing Architecture:
[ Upstream RSS Feed with DAI Ads ]
|
v
+--------------------------------------------------------------------------+
| MINUSPOD DAEMON (Docker Container) |
| |
| 1. Ingestion: Background RSS Poller & Podping WebSocket Listener |
| 2. Transcription: faster-whisper (GPU/CPU) or remote OpenAI API |
| 3. Signal Analysis: Voice Activity Detection (VAD) + Loudness jumps |
| 4. LLM Boundary Detection: Sliding-window prompt (Ollama / Claude) |
| 5. Cross-Episode Pattern Cache: Matches recurring sponsors locally |
| 6. Audio Splicing: Lossless ffmpeg stream copy at frame boundaries |
| 7. Feed Generator: Podcasting 2.0 RSS with chapters & clean transcripts |
+--------------------------------------------------------------------------+
|
v
[ Local Ad-Free RSS Feed ] ---> [ Standard Podcast App (Overcast, Pocket Casts) ]
Why You Have Not Heard Of It
Most open-source podcast tooling focuses on media storage (such as Audiobookshelf) or simple feed caching. MinusPod occupies a specialized niche because combining real-time audio transcription with semantic language model parsing was prohibitively expensive until recently.
Earlier attempts at ad removal relied purely on audio finger-printing (similar to SponsorBlock for YouTube). While SponsorBlock works exceptionally well on static video files where millions of viewers receive identical byte streams, Dynamic Ad Insertion assigns unique timestamps and varying audio ads to every IP address and download request. A timestamp crowd-sourced in Berlin does not match an episode downloaded in New York. MinusPod remained under the radar because it required local Whisper execution and low-cost reasoning models to make per-download, per-episode parsing viable on homelab hardware.
How It Works
MinusPod does not treat ad detection as a single LLM prompt. Feeding a two-hour audio transcript into a frontier model context window is expensive and prone to boundary hallucinations. Instead, the daemon employs a sequential verification ladder:
1. Ingestion and Podping Listener
MinusPod can poll standard RSS intervals, but it also embeds a Podping listener. When participating podcast publishers post an episode, Podping broadcasts a notification across the Hive blockchain network. MinusPod catches the event within seconds, downloading the audio file before your local podcast client even initiates its scheduled refresh.
2. Transcription via Faster-Whisper
Audio files pass to an embedded faster-whisper worker. On a modern server with an NVIDIA GPU, a one-hour episode transcribes in less than two minutes using the small.en or medium models. For CPU-only servers, MinusPod supports whisper.cpp with quantized INT8 weights or routes audio to external endpoints like Groq or self-hosted vLLM instances.
3. Acoustic Signal Detection
Before invoking language models, MinusPod runs audio-side heuristics:
- Loudness Spikes: DAI insertion servers frequently compress commercials at higher LUFS targets than conversational speech.
- Voice Activity Detection (VAD) Gaps: Sponsor breaks almost always feature micro-silences (200ms to 800ms) right before and after an ad roll.
- Audio Jingles and Stingers: MinusPod allows users to mark recurring transition chimes per show, snapping cut boundaries to exact musical transitions.
4. Sliding-Window Semantic Parsing
The transcript text, annotated with word-level timestamps, is evaluated across overlapping sliding windows. The system prompts the configured LLM (which can be a local model like Qwen 2.5 7B running in Open WebUI / Ollama or remote APIs) to classify candidate spans into five distinct categories:
sponsor(Third-party paid endorsements)cross-promo(Promotions for other network shows)self-promo(Host merchandise or live tour plugs)interaction(Calls to subscribe, rate on Apple Podcasts, or join Patreon)intro/outro(Recurring boilerplate themes)
Users can configure policies globally or per feed: remove, mute with a subtle beep, or leave untouched.
5. Cross-Episode Pattern Learning
Whenever you inspect an episode in MinusPod’s web interface and correct an ad boundary, the server extracts the sponsor entity and promotional URL. These patterns are stored locally in an SQLite database. The next time the same host introduces that recurring mattress or VPN sponsor, MinusPod detects the keyword boundary deterministically without submitting the transcript to an LLM, reducing inference overhead over time.
6. Lossless Splicing
Once cut boundaries are locked, MinusPod invokes ffmpeg using stream copying (-c copy) wherever possible, re-encoding only the immediate audio frame surrounding the cut point. This prevents generational audio degradation and completes the physical cut within seconds.
Running It
MinusPod deploys cleanly via Docker Compose. Below is a production configuration that pairs the core application with a local Ollama service for zero-cloud, fully offline operation:
version: "3.8"
services:
minuspod:
image: ghcr.io/ttlequals0/minuspod:v2.95.3
container_name: minuspod
restart: unless-stopped
ports:
- "8080:8080"
environment:
- PORT=8080
- BASE_URL=http://192.168.1.50:8080
- MASTER_KEY=generate_a_random_32_character_hex_key_here
- WHISPER_MODEL=small.en
- WHISPER_DEVICE=cpu # switch to "cuda" if passing an NVIDIA GPU
- LLM_PROVIDER=ollama
- OLLAMA_BASE_URL=http://ollama:11434
- OLLAMA_MODEL=qwen2.5:7b-instruct-q4_K_M
- DATA_DIR=/data
volumes:
- ./data:/data
- ./cache:/cache
depends_on:
- ollama
ollama:
image: ollama/ollama:latest
container_name: minuspod-ollama
restart: unless-stopped
volumes:
- ./ollama_models:/root/.ollama
To deploy the stack on a homelab server managed via Dockge or raw Docker CLI:
# Create directory and configure environment
mkdir -p /opt/minuspod && cd /opt/minuspod
# Paste the docker-compose.yml above
docker compose up -d
# Verify logs and startup sequence
docker compose logs -f minuspod
Once running, navigate to http://<server-ip>:8080. Add an upstream RSS feed URL. MinusPod generates a localized feed link (for example, http://<server-ip>:8080/feed/podcast-name.xml). Paste this link into Pocket Casts or Overcast, and new episodes will synchronize completely ad-free.
What It Replaces
MinusPod replaces manual 30-second skip tapping and paid ad-free network tiers ($5 to $12 per month per network). Compared to simple browser ad-blockers, MinusPod functions across all native mobile podcast apps because it sanitizes the underlying audio file and syndication feed before transmission.
Compared to generic audio editors like Audacity, MinusPod is fully automated. Episodes download in the background, undergo transcription and boundary detection, and publish without requiring manual waveform inspection.
Limitations
- Host-Read Content Bleed: When a host weaves a sponsorship organically into conversational banter without a musical cue or pause, language models can occasionally clip several seconds of substantive discussion. Reviewing the web UI waveform editor is occasionally necessary for chatty conversational shows.
- Computational Footprint: Running
faster-whisperand a 7B parameter LLM on low-power hardware like a Raspberry Pi 4 will cause transcription backlogs. A system with at least 8GB of RAM and an Intel 11th Gen CPU (or an entry-level GPU) is recommended for processing multiple daily feeds. - Bandwidth Multiplier: Because MinusPod downloads episodes directly to your server, stores re-cut audio files, and streams them to mobile devices, your homelab server must have sufficient storage space and upstream bandwidth if accessing feeds outside your home network.
Who It Is For
MinusPod is tailored for homelab operators, commuters, and avid podcast listeners who subscribe to multiple daily shows and value an uninterrupted listening experience. If you already run a self-hosted server with container orchestration and want your media feeds decoupled from commercial dynamic ad tracking, MinusPod offers a remarkably complete solution.