Skip to content
Productivity
Command

/podcast

Extract metadata, transcript, and summary from a podcast episode, saved as an AI-first note in the vault

From plugin
obsidian-second-brain
3.9k46 skills46 commands3 hooks
Install
> /plugin marketplace add eugeniughelbur/obsidian-second-brain
> /plugin install obsidian-second-brain@obsidian-second-brain

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/podcast

Context preview

What this command does when you run it.

Extract metadata, transcript, and summary from a podcast episode, saved as an AI-first note in the vault

Command definition

podcast.md
description: Extract metadata, transcript, and summary from a podcast episode, saved as an AI-first note in the vault
category: research
triggers_en: ["summarize this podcast", "podcast episode summary", "extract podcast", "what's in this episode"]
triggers_es: ["resume este pódcast", "resumen del episodio", "extrae este pódcast", "qué dice este episodio"]
triggers_pt: ["resuma este podcast", "resumo de episódio de podcast", "extraia este podcast", "o que há neste episódio"]
triggers_zh: ["总结这期播客", "提取播客文字稿", "这期节目讲了什么", "把这期播客整理进知识库"]

Use the obsidian-second-brain skill. Execute `/podcast [url]`:

1. Resolve the podcast URL from the user's argument. Accept any of:

  • Apple Podcasts episode URL (`https://podcasts.apple.com/.../id<show>?i=<episode>`)
  • Spotify episode URL (`https://open.spotify.com/episode/<id>`) - Spotify's own audio is DRM-locked, so the script bridges it to the show's public RSS feed: it reads the episode title from Spotify's key-free oEmbed endpoint, finds that episode in Apple's index to get the feed URL, then pulls the episode from the open feed by title. Works for any show that also publishes an open feed (most do); fails clearly for Spotify-exclusive shows with no public RSS.
  • Direct RSS feed URL (uses the latest episode unless `?episode=<guid>` selector is appended)
  • Direct RSS feed URL with `?episode=<guid-fragment-or-link-fragment>` selector

If no input given, ask: "Which podcast episode? Paste the Apple Podcasts, Spotify, or RSS feed URL."

2. Run the script from the skill root (its absolute path was given at session start as **Skill root**; substitute it for `SKILL_ROOT`):

   uv run --directory "SKILL_ROOT" -m scripts.research.podcast_extract "<url>"

3. The script:

  • Resolves Apple Podcasts URLs to RSS via the free iTunes Lookup API (no key needed).
  • Parses the RSS feed, extracts episode metadata (title, show, host, published, duration, audio URL, show notes).
  • Tries to obtain a transcript in this order:

1. **`<podcast:transcript>` tag** in the RSS feed (free, fast, high fidelity). 2. **Whisper API**, only if `OPENAI_API_KEY` is set. Downloads audio (<=25 MB OpenAI per-file limit), transcribes via `whisper-1`. Approximate cost: $0.006/min. 3. **Show-notes-only fallback**. If no transcript path works, summarizes from RSS show notes alone. Quality drops; Notable Quotes will be empty.

  • Sends transcript-or-shownotes to Grok for AI-first summarization.
  • Returns: TL;DR, Key Points, Notable Quotes, Themes & Topics, Guests & People Mentioned, Worth Following Up On.

4. Show the script output verbatim to the user.

5. **Default save behavior: saves automatically.** AI-first note written to `Research/Podcasts/YYYY-MM-DD - <episode-title-slug>.md` (hyphen separator, matches the existing `/youtube` and `/research` filename pattern). Frontmatter includes `show`, `host`, `episode-title`, `episode-url`, `feed-url`, `guid`, `published`, `duration`, `transcript-source` (one of `rss-transcript-tag` / `whisper-api` / `show-notes`), and tags.

6. Plain English triggers: "summarize this podcast", "what's in this episode", "transcribe this podcast", or just pasting an Apple Podcasts URL with a question about content.

7. If the podcast publishes neither a transcript tag nor usable show notes AND there's no `OPENAI_API_KEY`, the script will fail with a clear message. Surface it. Suggest the user either picks a podcast that publishes transcripts, or sets `OPENAI_API_KEY` for Whisper transcription.

8. If the user asks to research someone or something mentioned in the "Worth Following Up On" or "Guests & People Mentioned" section, route that to `/research [topic]` (or `/obsidian-person` if it's a vault-worthy contact).

---

**AI-first rule:** Every note created or updated by this command MUST follow `references/ai-first-rules.md`. If that path does not resolve from your working directory, search upward for it; if you still cannot read it, say so before writing rather than producing a note that silently skips the rule. That means: `## For future Claude` preamble, rich frontmatter (`type`, `date`, `tags`, `ai-first: true`, plus type-specific fields), recency markers per external claim, mandatory `[[wikilinks]]` for every person/project/concept referenced, sources preserved verbatim with URLs inline, and confidence levels where applicable. The vault is for future-Claude retrieval, not human reading.

**Anti-fabrication:** Search exhaustively before claiming any note, person, or file is absent - false absence is the most common failure mode - and never invent facts, entities, or dates (mark unknowns as `TBD`). See the anti-fabrication and search-completeness hard rules in `references/ai-first-rules.md`.

Read more
Ships withobsidian-second-brain

Persistent memory for Claude Code and 6 other CLI agents, stored as plain markdown in your Obsidian vault. Stop re-explaining your projects, decisions and people every session. 45 commands: hybrid semantic search, self-rewriting notes, key-less web research, and scheduled agents that maintain the vault while you sleep.

Get the whole plugin