The All In Podcast App is a modular Python powerhouse that spins up new podcast episodes inspired by the "All-In" podcast. Using AI magic, it fetches the latest episode, transcribes it with Whisper.cpp, extracts key insights with spaCy, crafts witty scripts with GPT-Neo, clones voices of hosts like Adam Curry and John C. Dvorak with Coqui TTS, generates vibrant show art via Stable Diffusion, and packages everything into an RSS feed. Perfect for AI enthusiasts, developers, and podcast fans, this app showcases cutting-edge automation and content creation.
Authored by Ian Trimble (GitHub), this app leverages the "All-In" podcast to create engaging, AI-generated episodes. It transcribes episodes, extracts key lessons using spaCy and pytextrank, generates witty scripts with GPT-Neo, clones voices with Coqui TTS, and designs vibrant show art with Stable Diffusion. The modular design ensures each component (e.g., transcription, script generation) is isolated for easy maintenance and extension. Whether you’re a developer, AI enthusiast, or podcast fan, this app offers a deep dive into automated content creation.
- Episode Fetching: Grabs the latest "All-In" episode via RSS using feedparser.
- Audio Processing: Converts audio to WAV with pydub.
- Transcription: Delivers high-accuracy transcription with Whisper.cpp.
- Lesson Extraction: Pulls insights and keywords using spaCy and pytextrank.
- Context Building: Links to past lessons with sentence-transformers and FAISS.
- Script Generation: Creates scripts and titles in the style of Adam Curry and John C. Dvorak using GPT-Neo.
- Voice Cloning: Synthesizes audio with Coqui TTS using reference clips.
- Show Art: Designs podcast cover art with Stable Diffusion.
- Show Notes: Summarizes scripts with BART.
- RSS Feed: Publishes episodes with feedgen.
The diagram below illustrates the end-to-end workflow of the All In Podcast App, from fetching an episode to producing an RSS feed. Each step maps to a specific module, showcasing the app’s modular design.
flowchart TD
A[Start] --> B[RSS Feed Fetching\nrss_feed.py\nfeedparser]
B --> C[Audio Processing\naudio_processing.py\npydub]
C --> D[Transcription\ntranscription.py\nWhisper.cpp]
D --> E[Lesson Extraction\nnlp_analysis.py\nspaCy, pytextrank]
E --> F[Context Building\nnlp_analysis.py\nsentence-transformers, FAISS]
F --> G[Script Generation\nscript_generation.py\nGPT-Neo]
G --> H[Text-to-Speech\ntts.py\nCoqui TTS]
H --> I[Show Art Generation\nshow_art.py\nStable Diffusion]
I --> J[Summarization\nsummarization.py\nBART]
J --> K[File Management\nfile_management.py\nfile operations]
K --> L[RSS Feed Generation\nfile_management.py\nfeedgen]
L --> M[End: Podcast Episode\npodcast.xml]
subgraph Inputs/Outputs
B -->|RSS Feed| C
C -->|data/latest.wav| D
D -->|data/transcript.txt| E
E -->|Lessons, Keywords| F
F -->|Related Lessons| G
G -->|Script, Title| H
H -->|data/episode.wav| I
I -->|data/show_art.jpg| J
J -->|Show Notes| K
K -->|data/episode_N.wav\nshow_art_N.jpg| L
L -->|podcast.xml| M
end
style A fill:#f9f,stroke:#333,stroke-width:2px
style M fill:#bbf,stroke:#333,stroke-width:2px
style B fill:#dfd,stroke:#333
style C fill:#dfd,stroke:#333
style D fill:#dfd,stroke:#333
style E fill:#dfd,stroke:#333
style F fill:#dfd,stroke:#333
style G fill:#dfd,stroke:#333
style H fill:#dfd,stroke:#333
style I fill:#dfd,stroke:#333
style J fill:#dfd,stroke:#333
style K fill:#dfd,stroke:#333
style L fill:#dfd,stroke:#333
- RSS Feed Fetching (
rss_feed.py
): Fetches the latest "All-In" episode using feedparser and checksprocessed.json
to avoid duplicates. - Audio Processing (
audio_processing.py
): Downloads audio and converts to WAV using pydub. Outputs:data/latest.wav
. - Transcription (
transcription.py
): Transcribes WAV with Whisper.cpp. Outputs:data/transcript.txt
. - Lesson Extraction (
nlp_analysis.py
): Extracts lessons and keywords with spaCy and pytextrank. - Context Building (
nlp_analysis.py
): Finds related lessons using sentence-transformers and FAISS. Stores embeddings indata/past_embeddings.npy
. - Script Generation (
script_generation.py
): Generates script and title with GPT-Neo. - Text-to-Speech (
tts.py
): Converts script to audio with Coqui TTS usingdata/adam_reference.wav
anddata/john_reference.wav
. Outputs:data/episode.wav
. - Show Art Generation (
show_art.py
): Creates cover art with Stable Diffusion. Outputs:data/show_art.jpg
. - Summarization (
summarization.py
): Summarizes script with BART. - File Management (
file_management.py
): Saves files (e.g.,data/episode_N.wav
) and updatesdata/episodes.json
. - RSS Feed Generation (
file_management.py
): Createspodcast.xml
with feedgen.
AllInApp/
├── main.py # Orchestrates the podcast generation pipeline
├── config.py # Stores configuration settings (paths, URLs)
├── rss_feed.py # Fetches and tracks RSS episodes
├── audio_processing.py # Downloads and converts audio to WAV
├── transcription.py # Transcribes audio with Whisper.cpp
├── nlp_analysis.py # Extracts lessons and builds context
├── script_generation.py # Generates scripts and titles
├── tts.py # Converts scripts to audio with voice cloning
├── show_art.py # Creates show art with Stable Diffusion
├── summarization.py # Generates show notes with BART
├── file_management.py # Manages files and RSS feed
├── requirements.txt # Lists Python dependencies
├── .env # Environment variables (e.g., PUBLIC_URL)
├── .gitignore # Excludes temporary/large files
├── data/ # Stores generated files (ignored in Git)
└── models/ # Stores model files (ignored in Git)
- Python 3.8+: Download from Python Downloads.
- FFmpeg: Install via
brew install ffmpeg
(macOS),sudo apt-get install ffmpeg
(Ubuntu), or download from FFmpeg. - Whisper.cpp: Available at Whisper.cpp GitHub.
- Reference Audio: 10-30 second WAV clips of Adam Curry and John C. Dvorak from No Agenda Show.
- Internet: For model downloads and RSS access.
- Hardware: GPU (NVIDIA/Apple Silicon) recommended; CPU slower. Minimum 16GB RAM.
-
Clone the Repository:
git clone https://github.com/itrimble/AllInApp.git cd AllInApp
-
Set Up Virtual Environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install Dependencies:
pip install -r requirements.txt python -m spacy download en_core_web_sm
For NVIDIA GPUs:
pip install torch==2.1.1 --index-url https://download.pytorch.org/whl/cu121
-
Set Up Whisper.cpp:
- Clone and build:
git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp make
- Download model:
./models/download-ggml-model.sh base.en
- Move to project:
mv main ../AllInApp/whisper.cpp/main mv models/ggml-base.en.bin ../AllInApp/models/ cd ../AllInApp
- Clone and build:
-
Prepare Reference Audio:
- Extract 10-30 second WAV clips using Audacity from No Agenda Show.
- Save as
data/adam_reference.wav
anddata/john_reference.wav
(mono, 24kHz).
-
Configure Environment:
- Create
.env
:cp .env.example .env
- Edit
.env
:PUBLIC_URL=http://yourserver.com/ RSS_FEED_URL=https://feeds.megaphone.fm/all-in
- Create
-
Create Directories:
mkdir -p data models
Generate a podcast episode:
python main.py
See the Architecture section above for details.
- Files:
data/episode_N.wav
,data/show_art_N.jpg
. - Metadata:
data/episodes.json
. - RSS Feed:
podcast.xml
.
Host at PUBLIC_URL
for podcast access.
- Dependencies: Reinstall:
pip install -r requirements.txt --force-reinstall
- Whisper.cpp: Ensure
whisper.cpp/main
is executable (chmod +x whisper.cpp/main
) andmodels/ggml-base.en.bin
exists. - Audio Files: Verify
data/adam_reference.wav
anddata/john_reference.wav
. - Performance: Use GPU or reduce model sizes.
- Models: Confirm internet and ~10GB disk space.
- RSS: Check
RSS_FEED_URL
in.env
.
- Performance: GPU speeds up Stable Diffusion and Coqui TTS.
- Legal: Voice cloning may have legal/ethical concerns. Consult experts and label as synthetic.
- Models: Stable Diffusion, BART, XTTS download on first run.
- Scheduling: Use cron:
0 0 * * * /path/to/venv/bin/python /path/to/AllInApp/main.py
Run main.py
and check:
data/
forepisode_N.wav
,show_art_N.jpg
.episodes.json
for metadata.podcast.xml
in a podcast client.
- Fork at https://github.com/itrimble/AllInApp.
- Create branch:
git checkout -b feature/YourFeature
. - Commit:
git commit -m 'Add YourFeature'
. - Push:
git push origin feature/YourFeature
. - Open a pull request.
Include tests and update docs.
MIT License. See LICENSE
.
Ian Trimble (GitHub)
File issues at https://github.com/itrimble/AllInApp.
Generated on May 11, 2025