跳到正文
GitHub·· 2 小时前AI 评分58

MinusPod 开源自托管播客去广告服务器

ttlequals0/MinusPod

AI 导读

MinusPod 是一个自托管服务器,在播放前用 faster-whisper 或 Parakeet 本地转录播客,再由 LLM 识别并切掉广告片段。它支持 Claude、Ollama、OpenRouter 等 OpenAI 兼容接口,并把用户对切点的修正沉淀为跨集广告模式,重复赞助商无需再次调用 LLM。

正文

MinusPod

MinusPod is a self-hosted server that removes ads from podcasts before you ever hit play. It transcribes episodes locally with faster-whisper or Parakeet (or through a remote API), uses an LLM to detect and cut ad segments, and builds cross-episode ad patterns from your corrections so repeat sponsors get caught without re-asking the LLM. Bring your own LLM: Claude, Ollama, OpenRouter, OpenAI-compatible providers, or System One.

MinusPod dashboard on desktop   MinusPod dashboard on mobile

A tour of the web UI. More videos, portrait cuts and the files themselves in docs/videos.

minuspod-demo-landscape.mp4

Features

Ad detection

  • An LLM finds ads in the transcript, a second pass verifies the cut, and an optional reviewer confirms or adjusts each boundary. How it works
  • Audio evidence backs the transcript: loudness and DAI transitions, a cross-fetch diff against a second download, per-feed jingle cues, and the publisher's own transcript. Audio cues, Transcript differential
  • Each detection gets a category (sponsor, cross-promo, self-promo, intro/outro) and a per-feed action: remove, beep, keep, or mark as a skippable chapter
  • Low-confidence cuts wait in a review queue with a waveform editor; your corrections become cross-episode patterns so repeat sponsors are caught without another LLM call
  • Five per-feed processing modes, from full detection to pass-through

Transcription and LLMs

  • Transcribe locally with faster-whisper or NVIDIA Parakeet on GPU or CPU, or remotely through whisper.cpp, Groq, OpenAI, or OpenVINO. Transcription
  • Anthropic, OpenRouter, Ollama, System One, or any OpenAI-compatible endpoint, switchable at runtime with per-stage models and editable prompts. LLM providers
  • A/B routing between two providers, failover to a standby, rate-limit holds, and an offline queue for self-hosted endpoints

Patterns and sponsors

  • Learned patterns scoped per podcast, network, or globally, with a sponsor list and aliases
  • Opt-in community pattern sync with one-PR contribution back
  • Scheduled Pattern Cleanup suggests trims, splits, and retirements, with approval and undo

Publishing

  • Re-cut RSS feeds per podcast with versioned audio, a replacement sound at each cut, loudness leveling, and lossless MP3 stream copy where the cut allows
  • Podcasting 2.0 tags regenerated: transcripts, chapters, AI-content disclosure, value-for-value passed through
  • Podping listener refreshes a feed seconds after the host announces an episode
  • OPML import and export, podcast search from Add feed, an optional cover-art badge, a combined Recents feed, and local feeds built from your own audio files

Web UI and administration

  • Feed, episode, queue, search, pattern, sponsor, history, stats, and settings views. Installs as an app on iOS, Android, macOS, and Windows. Web interface
  • Stats and an LLM cost ledger down to the individual call
  • Retention per feed, scheduled encrypted backups, email and webhook notifications, and a REST API with OpenAPI. API and webhooks
  • Password auth for the UI and API, feed keys or per-feed subscriber keys for RSS, provider keys encrypted at rest. Security

How it works

The transcriber turns the episode into text, an LLM marks the ad segments, FFmpeg cuts them, and Flask serves the modified feed and audio. One episode, end to end:

minuspod-how-it-works-landscape.mp4

The full pipeline, including the verification pass, sliding windows, pattern learning, and audio analysis, is in docs/how-it-works.md.

Requirements

  • Docker on an amd64 or arm64 host. An NVIDIA GPU speeds up local transcription but is not required.
  • An LLM: an Anthropic or OpenRouter API key, Ollama for local inference, a System One credential, or any OpenAI-compatible endpoint.

Whisper and Parakeet sizing and RAM/VRAM figures are in Installation.

Quick start

# 1. Create environment file
cat > .env << EOF
ANTHROPIC_API_KEY=your-key-here
BASE_URL=http://localhost:8000
MINUSPOD_MASTER_PASSPHRASE=long-random-string-you-will-not-lose
OPENAI_MODEL=claude-haiku-4-5
EOF

# 2. Create data directory
mkdir -p data

# 3. Run (pick one)
docker compose up -d                              # NVIDIA GPU image
docker compose -f docker-compose.cpu.yml up -d    # CPU image, no GPU needed

Open http://localhost:8000/ui/, set an application password, and add a feed. The GPU image is amd64 with the NVIDIA container runtime; the CPU image runs natively on amd64 and arm64. Both read the same .env and data/ directory.

MINUSPOD_MASTER_PASSPHRASE encrypts provider keys at rest, so set it before you store any. Remote first-time setup, public processing, and the slower stable release channel are covered in Installation.

Documentation

Topic
Installation Requirements, sizing, quick start, CPU image
Environment variables Every env var
LLM providers Providers, recommended models, pricing
Transcription faster-whisper, Parakeet, remote APIs, OpenVINO
Web interface Management UI and the ad editor
How it works The detection pipeline in depth
Workflows Processing modes, re-runs, failure paths
Configuration Every setting and experiment
Security and storage Remote access, authenticated feeds, backups
API and webhooks REST endpoints, webhook events, notifications
Podcasting 2.0 What is emitted, regenerated, and stripped
Glossary Every term the app uses

The full docs index covers the rest: audio cues, community patterns, Pattern Cleanup, System One, failover, local feeds, download history, configuration import and export, deployment, releasing, and the LLM benchmark report.

Contributing

Bug reports, feature requests, and pull requests are welcome. Open an issue first for larger changes so we can agree on the approach. Ad patterns go through Community Patterns and benchmark results through Benchmark Contributing. Fork-derived features and community bug reports are credited in the CHANGELOG entry that ships them.

Disclaimer

This tool is for personal use only. Only use it with podcasts you have permission to modify or where such modification is permitted under applicable laws. Respect content creators and their terms of service.

License

MIT

LLM disclosure

This project was developed using AI agents as a pair programmer. It was NOT vibe coded. For context, I'm a systems engineer who also writes code professionally with 15+ years of experience. The codebase follows engineering best practices, and all architecture and design decisions were made by me, not by AI. All code generated by LLMs was reviewed and tested by me, a human.

来源:GitHub · github.com