CommunityWriting & Editinggithub.com

BingWuJ/podcast2md-skill

Convert a podcast episode link into a full transcript organized by chapters (local CapsWriter-Offline speech recognition, produces chapters.md, not a summary). Use when a user provides a podcast/audio link and asks for transcription, transcript, or writing it up, or asks

What is podcast2md-skill?

This skill, podcast2md, transforms a podcast episode URL or direct audio link (supported by yt-dlp) into a full, chapter-organized transcript saved as chapters.md. It runs entirely locally using CapsWriter-Offline (fun_asr_nano) for speech recognition, ensuring no data leaves your machine. The script automatically launches the necessary server and client processes. It is designed for developers and power users who need accurate, non-summarized transcripts for further processing or analysis. The skill supports podcast pages and direct audio URLs, and it preserves the original chapter breaks from the podcast. It is particularly useful for long-form content (over 1 hour), where transcription can take 40–90 minutes on CPU. The skill also includes guidance for handling local audio files, Bilibili subtitles, and other edge cases, making it a complete solution for local audio transcription needs.

Works with~Claude Code~Codex CLI~Cursor
npx skills add BingWuJ/podcast2md-skill

Installed? Explore more Writing & Editing skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

podcast2md — Podcast Episode Link → Chapter Transcript

Purpose

  • Input: A podcast episode page or direct audio URL supported by yt-dlp
  • Output: <out-dir>\<slug>\chapters.md — a full transcription split by the show's existing chapters; no summary, no fabricated content
  • Engine: Local CapsWriter-Offline (fun_asr_nano), script automatically launches server/client

Running (use the deployed copy, must be in the same directory as start_server.exe)

python "D:\iStall\CapsWriter-Offline\podcast2md.py" "episode-URL"
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "episode-URL" --transcribe-timeout 10800
  • Source repo: D:\iStall\podcast2md\ (podcast2md.py + README.md + PODCAST2MD.md). Edit only the repo version, then copy it to D:\iStall\CapsWriter-Offline\ for deployment.
  • Full parameter table, pipeline details, and exit codes: read D:\iStall\podcast2md\PODCAST2MD.md as needed; do not read the whole thing by default.

Key Parameters

ParameterDefaultDescription
--out-dir<script-dir>\workOutput in work\<slug>\chapters.md
--forceoffDelete existing episode directory and re-run; discards manual edits
--polishoffbasic only removes filler words via rules, not model-based polishing; use off for faithful original
--server-timeout600sWait time for server startup
--transcribe-timeout7200sTranscription wait; increase for long episodes (e.g., 10800)

Gotchas (read before running)

  • Long audio (>1h) takes tens of minutes to transcribe: run as a background process + poll logs, don't wait in the foreground and hit tool timeouts.
  • Server stays resident after transcription (reuse for faster next run); exit via tray menu.
  • Exit codes: 3=download failed, 4=server failed, 5=transcription failed, 6=output already exists/locked, 7=split or validation failed.
  • Logs: <out-dir>\_podcast2md_server.log and <slug>\logs\.
  • ffmpeg must be in PATH, otherwise client transcription will fail.
  • Speaker diarization is not performed; multi-speaker transcripts require post-processing.

Local Verified Facts (verified 2026-10-19, cite directly without re-probing)

  • ffmpeg 8.1.2 is in PATH — prerequisite for client file transcription is met; if unsure, run ffmpeg -version to check, don't infer
  • No dedicated NVIDIA GPU; transcription runs on CPU: a 30–60 minute show takes about 10–30 minutes, 1+ hour takes 40–90 minutes; FunASR-Nano tested: a 95-minute recording pure transcription approximately 46 minutes (about 0.5x real-time, including model loading, see work\full.out.log 2026-10-17)
  • FunASR-Nano reference script tested characteristics: 15-second segments (60-second segments repeat "um"), JSONL incremental disk writing for crash recovery, silence segments skipped by energy threshold
  • Bilibili subtitle coverage: Official/UP CC subtitles are not universal, AI subtitles are more common — first probe with yt-dlp --list-subs then decide the route, don't assume coverage

Local Audio / Adjacent Scenario Division

  • Local audio files (recordings, downloaded mp3/wav, no link): Do not use this CLI. Use FunASR-Nano: venv D:\iStall\FunASR-Nano\.venv, weights D:\iStall\model-cache\huggingface\local\Fun-ASR-Nano-2512-hf; long audio must be split into segments for recognition (60-second segments repeat "um"), see D:\iStall\FunASR-Nano\work\full_transcribe.py.
  • Bilibili and other video with subtitles: First probe for subtitles (yt-dlp --list-subs); if CC/AI subtitles exist, pull them directly to form the text, no need to run speech recognition.
  • Subtitle to article (remove timestamps, create prose): That is the srt-translator workflow, not this CLI.

Related Skills