2025
Podcast Smart Companion
End-to-end podcast intelligence pipeline
Overview
A local Streamlit app that turns a podcast episode into something you can search. Drop in a YouTube URL or an audio file: it transcribes with Whisper, chunks the transcript, embeds every chunk into ChromaDB, writes a map-reduce summary, builds an emotion profile, pulls keywords, and clusters topics. All of it gets indexed for semantic search and episode-to-episode recommendations.
The Problem
Podcast content is hard to search or cross-reference, and hours of audio leave nothing behind once the episode ends. I wanted a local pipeline that makes any podcast queryable and comparable to other episodes without sending audio to a cloud API.
My Role
Built the whole pipeline solo, from ingestion and transcription through summarization, emotion analysis, and the recommendation engine, plus the Streamlit UI across all five modes.
Key Features
- —YouTube audio download via yt-dlp with creator + title slug naming
- —Local audio file upload (MP3, WAV, M4A) with configurable processing
- —Faster-Whisper ASR with VAD filtering and selectable model size (small / medium / large-v3)
- —Configurable chunk size with timestamp-aligned chunk storage in Parquet
- —ChromaDB vector index with sentence-transformers embeddings for semantic search
- —Map-reduce summarization producing TL;DR and bullet points per episode
- —Per-chunk emotion profiling with mean emotion vector across the episode
- —Keyword extraction and topic clustering (k-means, 6 clusters) per episode
- —Hybrid recommendation engine: an alpha-weighted blend of semantic cosine similarity and emotion vector distance
- —Episode Viewer with timeline, summary, and emotion profile panels
Challenges
Building a recommendation system that works on a small local library. Pure semantic similarity collapses when episodes cover overlapping topics. Blending emotion profile distance with semantic centroid distance, weighted by a tunable alpha, gives different results across episode types and made the recommendations worth exploring.
What I Learned
Chunk boundaries, timestamp alignment, embedding indices, and feature files all reference the same episode ID, and they drift apart fast. Getting that coordination right early saved me most of the debugging later.