executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
conference-transcribeTranscribe a multi-talk conference livestream or long YouTube video into separate per-talk transcripts. Parses timestamps from the video description to split talks, downloads audio/video, transcribes each segment, then uses an LLM to clean up and format the transcripts with key takeaways and frequent timestamps. Use when user says "transcribe this conferenc…
Independent GitHub snapshot · Automated classification · Original documentation governs
Input: a YouTube URL with chapter timestamps or another multi-talk recording.
Transcribe a multi-talk conference livestream into individual, cleaned-up per-talk markdown files with key takeaways and frequent timestamps.
This skill was born from a real transcription session. Here's what worked and what didn't:
yt-dlp --write-sub --write-auto-sub --sub-lang en to grab captions directly, then parse the VTT file.yt-dlp --download-sections to download individual talk clips as MP4 (for archiving/sharing), parallelized with ThreadPoolExecutor(max_workers=2).ffmpeg -c:a libopus -b:a 32k gets 1 hour of audio down to ~14MB (under Groq/OpenAI's 25MB limit).metadata.json from yt-dlp --write-info-json gives structured chapter data that's easier to parse than the description text.pip install fights with macOS externally-managed-environment (PEP 668). Need uv venv or --break-system-packages.mlx-whisper model downloads are huge (~1.5GB for large-v3-turbo) and get throttled without HF_TOKEN.faster-whisper on CPU is very slow for 7+ hours of audio.Has YouTube captions? (check with yt-dlp --list-subs)
YES -> Use YouTube captions (fastest, free, no setup)
NO -> Has Groq/OpenAI API key?
YES -> Use Groq API (whisper-large-v3-turbo, nearly free, very fast)
NO -> Has local Whisper installed?
YES -> Use faster-whisper or mlx-whisper
NO -> Install via uv: `uv venv .venv && source .venv/bin/activate && uv pip install faster-whisper`
which yt-dlp || echo "MISSING: brew install yt-dlp"
which ffmpeg || echo "MISSING: brew install ffmpeg"
which jq || echo "MISSING: brew install jq"
# Check for API keys (optional but recommended)
[ -n "$GROQ_API_KEY" ] && echo "Groq: ready" || echo "Groq: not set (needed for Whisper API)"
[ -n "$ANTHROPIC_API_KEY" ] && echo "Anthropic: ready" || echo "Anthropic: not set (needed for cleanup)"
VIDEO_URL="$1" # YouTube URL from user
# Download metadata + captions (no video)
yt-dlp --write-info-json --skip-download \
--write-sub --write-auto-sub --sub-lang en \
-o "media/%(id)s" "$VIDEO_URL"
This produces:
media/<id>.info.json -- full metadata including chaptersmedia/<id>.en-orig.vtt or media/<id>.en.vtt -- auto-captionsRead the .info.json file and extract chapters. Filter out breaks, untitled segments, etc.
Create a talks.json manifest:
[
{
"index": 1,
"title": "Speaker Name: Talk Title",
"speaker": "Speaker Name",
"slug": "01-speaker-name",
"source_chapter_start": "00:24:25",
"source_chapter_end": "00:42:39",
"start_seconds": 1465,
"end_seconds": 2559,
"duration_seconds": 1094
}
]
If no chapters in metadata, fall back to parsing the video description for timestamp lines matching patterns like:
HH:MM:SS - Speaker Name: Talk TitleHH:MM:SS Speaker Name (Company): DescriptionIf YouTube captions are available, parse the VTT file:
append_without_overlap pattern).[HH:MM:SS | +MM:SS] (absolute stream time | relative to talk start).Output format:
# Speaker Name: Talk Title
- Source: https://youtube.com/watch?v=ID&t=1465s
- Source range: 00:24:25 - 00:42:39
- Duration: 00:18:14
- Transcript source: YouTube auto-captions
## Timestamped Transcript
[00:24:26 | +00:00:01] Good morning everyone...
[00:24:54 | +00:00:29] Next paragraph of text...
If no YouTube captions, transcribe from audio:
yt-dlp -f bestaudio -x --audio-format wav -o "full_audio.%(ext)s" "$VIDEO_URL"ffmpeg -i full_audio.wav -ss "$START" -to "$END" -ac 1 -ar 16000 "segments/${SLUG}.wav"
ffmpeg -i "segments/${SLUG}.wav" -ac 1 -ar 16000 -c:a libopus -b:a 32k "segments/${SLUG}.ogg"
curl -s https://api.groq.com/openai/v1/audio/transcriptions \
-H "Authorization: Bearer $GROQ_API_KEY" \
-F file="@segments/${SLUG}.ogg" \
-F model="whisper-large-v3-turbo" \
-F language="en" \
-F response_format="verbose_json" \
-F 'timestamp_granularities[]=segment'
For archiving individual talk videos:
yt-dlp -f 91 \
--downloader ffmpeg \
--downloader-args "ffmpeg_i:-allowed_extensions ALL" \
--download-sections "*${START}-${END}" \
-o "clips/${SLUG}.%(ext)s" \
"$VIDEO_URL"
Run with ThreadPoolExecutor(max_workers=2) -- more than 2 concurrent yt-dlp downloads tends to get throttled.
Send each raw transcript to Claude (or another LLM) for cleanup. Use 3 concurrent API calls.
System prompt for cleanup:
You are an expert transcript editor. Take this raw auto-caption transcript and produce a clean, readable document.
Rules:
1. KEEP all timestamps in [HH:MM:SS | +MM:SS] format. Include them every 30-60 seconds.
2. Fix transcription errors: proper nouns, technical terms, company names, jargon.
3. Add paragraph breaks at natural topic transitions.
4. Remove filler words (um, uh, like, you know) unless they add meaning.
5. Preserve the speaker's voice -- clean up, don't rewrite.
6. For multi-speaker segments, use [Speaker Name]: format.
Output format:
# Talk Title
**Speaker** -- Role/Company
**Event**: {event name and date}
## Key Points
- 4-8 bullet points of key takeaways
## Timestamped Reading Transcript
[Content with timestamps, paragraphs, and light line-wrapping for readability]
Organize into:
transcripts/
raw/ -- unedited VTT-parsed or Whisper output
cleaned/ -- LLM-cleaned markdown
clips/ -- individual talk MP4s (optional)
talks.json -- manifest with metadata
reports/
talk-manifest.md -- summary table
For the common case of a YouTube conference stream with chapters and auto-captions:
# 1. Grab metadata + captions
yt-dlp --write-info-json --skip-download --write-auto-sub --sub-lang en -o "media/%(id)s" "$URL"
# 2. Build talks.json from chapters in info.json
python3 scripts/build_transcripts.py
# 3. Download individual clips (parallel, optional)
python3 scripts/download_clips.py
# 4. Clean up transcripts with LLM
python3 scripts/cleanup_transcripts.py
The build_transcripts.py and cleanup_transcripts.py scripts handle VTT parsing, deduplication, timestamp formatting, and LLM cleanup. See the AIE Europe project for reference implementations.