Podscope
Point it at YouTube videos and it transcribes them, segments the transcript into topics, summarizes each topic two different ways, pulls out named entities, and tracks which entities keep recurring across videos — all running locally, at zero API cost.
An adaptive threshold instead of a fixed one
Topic segmentation runs first, grouping contiguous transcript segments by embedding similarity. Instead of one fixed similarity cutoff, each video gets its own threshold — mean + std_multiplier × stdev of that video's own adjacent-segment distances — because a short conversational clip and a long-form narration have genuinely different similarity distributions, and a single fixed cutoff either over-splits one or under-splits the other. Abstractive summarization then runs once per topic group rather than once per raw ASR segment, so the local Ollama model sees a full topic's worth of dialogue instead of a disconnected fragment.
Transcription, topic segmentation, dual summarization, NER — no paid APIs.faster-whisper and a local Ollama model do the work a hosted API usually would.
Scoring the summaries, not just producing them
Each abstractive summary is scored against the exact transcript text it was generated from by word-count compression ratio — how much shorter the summary is than its source. A lower ratio means more aggressive compression. It's computed only for the abstractive summary, since the extractive one is a sentence lifted verbatim from the transcript rather than a generated compression, so the same comparison wouldn't mean anything there.
Built for cross-video patterns, not one video
Everything — transcripts, entities, topic groups, summary metrics — lands in an Apache Iceberg lakehouse via PySpark, which is what makes cross-video entity co-occurrence analysis possible: which people, places, and things keep showing up together across an entire channel, not just within a single episode. That graph is browsable directly in Neo4j.