--- type: project name: radio-show display_name: The Computer Guru Show last_compiled: 2026-05-24 compiled_by: DESKTOP-0O8A1RL/claude-main sources: - projects/radio-show/post-show-workflow.md - projects/radio-show/audio-processor/README.md - projects/radio-show/session-logs/2026-04-27-qa-extraction-cohost-indexing.md - projects/radio-show/session-logs/2026-05-01-ui-redesign-recovery.md --- # The Computer Guru Show ## Overview "The Computer Guru Show" is Mike Swanson's radio program. The project covers two distinct workstreams: 1. **Audio Processor** — Automated pipeline that processes raw broadcast recordings (with commercials) into podcast-ready audio, transcripts, speaker-diarized segments, and a searchable SQLite archive. 2. **Post-Show Content Workflow** — Process for turning each episode into an episode page (website), forum discussion thread (Flarum), and 1–3 deep-dive blog posts within 48 hours of air. **Status:** Active development. Audio processor pipeline functional with 572 episodes indexed locally on BEAST. FastAPI browse/search UI redesigned (2026-05-01). Jupiter deployment has a known audio-file gap (open). Post-show workflow documented but not yet fully automated. Archive spans 2010–2018 (no 2013 season), 579 MP3s, ~30–40 GB. --- ## Tech Stack | Layer | Technology | |---|---| | Transcription | faster-whisper (`large-v3`, CTranslate2 + CUDA), int8_float16, batched | | Speaker diarization | pyannote.audio 3.1 (WavLM embeddings) | | Audio processing | ffmpeg, pydub, librosa | | Audio fingerprinting | chromaprint | | Voice activity detection | silero-vad | | ML / classification | scikit-learn (break pattern classifier) | | Content analysis | Ollama — `qwen3:14b` (narrative/summary), local LLM | | Archive database | SQLite with FTS5 (segments, Q&A pairs) | | Web server | FastAPI + uvicorn (embedded HTML templates) | | Hardware (primary) | DESKTOP-0O8A1RL — RTX 5070 Ti Laptop GPU | | Hardware (secondary) | GURU-BEAST-ROG — RTX 4090 (benchmark pending) | --- ## Architecture ### Audio Processor Pipeline ``` Raw MP3 (full broadcast with commercials) | +-- 1. Transcription: faster-whisper large-v3 (63.8x realtime on 5070 Ti) | Output: word-level timestamps, language detection | +-- 2. Speaker Diarization: pyannote.audio 3.1 (209.7x realtime on 5070 Ti) | 10s windows / 5s hop, midpoint boundary resolution at load time | Speaker profiles: host (Mike, era-specific embeddings), co-hosts, callers | +-- 3. Segment Detection: Multi-signal classifier (6 signals, combined weighted score) | Signals: fingerprint match (0.30), speaker identity (0.25), | audio characteristics (0.20), break pattern (0.15), structural heuristics (0.10) | Element library: SQLite fingerprints.db + learning/discovery system | +-- 4. Commercial Removal: ffmpeg — stitch segments, EBU R128 normalize | +-- 5. Segment Splitting: ffmpeg — individual MP3s per segment, ID3 tags, chapter markers | +-- 6. Content Analysis: Ollama qwen3:14b Output: episode summary, per-segment summaries, key quotes, topic tags, suggested blog post topics, auto-filled post-show debrief ``` ### Key Thresholds | Parameter | Value | |---|---| | Host/co-host match threshold | 0.85 cosine similarity (WavLM) | | Tara (co-host) vs Mike separation | 0.698 cosine similarity | | CALLER minimum coverage in transcript segment | 4.0 seconds | | Promo score threshold | 2 (weighted signatures) | | Min Q&A question duration | 5.0s | | Min Q&A answer duration | 15.0s | | Max gap between Q and A | 30.0s | | Commercial break: min/max duration | 30s / 300s | | Combined confidence threshold (commercial) | 0.70 | ### Voice Profile System Bootstrapped from the 579-episode archive. Host (Mike) has era-specific embeddings (2010, 2014, 2018, 2026). Co-host Tara has 44 embeddings from 2 episodes. Unknown repeat voices are clustered and held for host review. ``` voice-profiles/ host-mike-swanson/ -- composite + era embeddings guests/.npy -- named guest embeddings (built over time) callers/regular-NNN.npy -- unnamed repeat callers unknown/cluster-NNN.npy -- unidentified voices appearing multiple times ``` ### Archive Index (SQLite) `archive.db` schema: `episodes`, `segments`, `segments_fts` (FTS5), `qa_pairs`, `qa_fts`. As of 2026-05-01 on BEAST: 572 episodes indexed. FTS5 search supports: segment text search, Q&A pair search, speaker filter. ### FastAPI Browse/Search UI Single-file server at `projects/radio-show/audio-processor/server/main.py`. Two embedded HTML templates: - `INDEX_HTML` — search/browse page with CSS custom property theme (`#c39733` accent), browse-mode toggle, Q&A pill badges. - `EPISODE_HTML` — episode detail page with sticky `