PodGist is an automated tool that "listens" to your podcast habits and creates concise summaries for you. It monitors your gPodder account (or a self-hosted instance) for played episodes, automatically downloads the audio, transcribes it locally using Whisper.cpp, and generates a structured summary using Google Gemini or Ollama.
- 🔄 Automated Sync: Polls gPodder.net (or your self-hosted instance) for new "play" actions (episodes you've listened to).
- 📥 Smart Downloading: Automatically downloads the audio files for processed episodes.
- 🔒 Privacy-First Transcription: Uses
whisper.cppto transcribe audio locally on your machine (no audio sent to the cloud for transcription). - 🤖 AI Summarization: Generates summaries using Google Gemini (Cloud) or Ollama (Local).
- 🐳 Docker Ready: Easy to deploy with Docker Compose.
- ⚙️ Highly Configurable: Customize models, prompts, and paths easily.
Get up and running without installing Python or building code.
-
Download Files: Create a directory and save the following files into it:
docker-compose.ymlconfig.example.yaml(Rename this toconfig.yaml)prompt.md
-
Configure:
- Edit
config.yamlto set your preferences (paths, models, etc.). - Create a
.envfile in the same directory with your credentials:GPODDER_USERNAME=your_username GPODDER_PASSWORD=your_password GEMINI_API_KEY=your_gemini_key # Optional: Only if using Gemini
- Edit
-
Run:
docker compose up -d
The service will start and check for episodes every 10 minutes.
-
Prerequisites:
- Python 3.13
- ffmpeg
- Whisper.cpp
-
Clone & Install:
git clone https://github.com/hddq/podgist.git cd podgist python3 -m venv venv source venv/bin/activate pip3 install -r requirements.txt
-
Configure:
- Copy
.env.exampleto.envand fill in credentials. - Copy
config.example.yamltoconfig.yaml. - Important: Edit
config.yamland setwhisper.rootto the path where you builtwhisper.cpp.
- Copy
-
Run:
python3 main.py
You can change how the summaries are generated by editing the prompt.md file. The {transcript} placeholder will be replaced by the actual text of the episode.