conference-transcribe
Skill176 starsChanged 7 months agoMITView on GitHub
Transcribe 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 conference", "split this livestream into talks", "transcribe each talk separately", or provides a YouTube URL of a multi-hour event stream with chapter timestamps.
- Reads credentials
- Installs packages
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
All told, setting up local Whisper from scratch took longer than just using YouTube captions.
- Very specific: line 89
Read the .info.json file and extract chapters.
- Very specific: line 91
Create a talks.json manifest:
- Distinctive: line 108
If no chapters in metadata, fall back to parsing the video description for timestamp lines matching patterns like:
- Distinctive: line 114
If YouTube captions are available, parse the VTT file:
- Very specific: line 120
Write each talk as a raw transcript file with dual timestamps: [HH:MM:SS | +MM:SS] (absolute stream time | relative to talk start).
- Distinctive: line 140
If no YouTube captions, transcribe from audio:
- Distinctive: line 151
If ogg > 25MB, further split into 10-min chunks.
- Very specific: line 178
Run with ThreadPoolExecutor(max_workers=2) -- more than 2 concurrent yt-dlp downloads tends to get throttled.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Conference Transcribe
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.
Lessons Learned (from AIE Europe Day 1, April 2026)
This skill was born from a real transcription session. Here's what worked and what didn't:
What Worked
- YouTube auto-captions as primary source -- YouTube's English auto-captions (VTT) are surprisingly good and instant. No download wait, no model download, no GPU needed. Prefer this over Whisper for YouTube videos that have captions available.
yt-dlp --write-sub --write-auto-sub --sub-lang ento grab captions directly, then parse the VTT file.yt-dlp --download-sectionsto download individual talk clips as MP4 (for archiving/sharing), parallelized withThreadPoolExecutor(max_workers=2).- Parsing the video description for chapter timestamps -- the description is the ground truth for talk boundaries.
- Two-pass transcript pipeline: raw VTT parse -> LLM cleanup. The raw parse handles deduplication and timestamp bucketing; the LLM handles readability, proper nouns, key takeaways, and formatting.
- Opus compression for cloud API uploads:
ffmpeg -c:a libopus -b:a 32kgets 1 hour of audio down to ~14MB (under Groq/OpenAI's 25MB limit). metadata.jsonfromyt-dlp --write-info-jsongives structured chapter data that's easier to parse than the description text.
What Didn't Work
- Local Whisper (any variant) on a fresh machine is painful:
pip installfights with macOS externally-managed-environment (PEP 668). Needuv venvor--break-system-packages.mlx-whispermodel downloads are huge (~1.5GB for large-v3-turbo) and get throttled withoutHF_TOKEN.faster-whisperon CPU is very slow for 7+ hours of audio.- All told, setting up local Whisper from scratch took longer than just using YouTube captions.
- Groq API without a key -- need to ask user upfront.
- Parallel Whisper on Apple Silicon -- MLX uses the GPU, so parallel workers contend. Sequential is better for local models.
- Large WAV files for API upload -- 16kHz mono WAV is ~1.9MB/min. A 30-min talk is 57MB, over the 25MB API limit. Must compress to opus/ogg first.
Decision Tree: Which Transcription Backend?
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`Step-by-Step Workflow
Step 0: Check Prerequisites
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)"Step 1: Get Video Metadata and Captions
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.vttormedia/<id>.en.vtt-- auto-captions
Step 2: Parse Chapter Timestamps into Talk Manifest
Read 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): Description
Step 3: Build Raw Transcripts (Caption Path)
If YouTube captions are available, parse the VTT file:
- Parse all VTT cues (timestamp + text).
- For each talk in the manifest, select cues within the talk's time range.
- Deduplicate overlapping text -- YouTube VTT cues often repeat words from the previous cue. Use a sliding window word-match approach (see
append_without_overlappattern). - Bucket cues into ~30-second paragraphs for readability.
- Write each talk as a raw transcript file with dual timestamps:
[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...Step 3 (alt): Build Raw Transcripts (Whisper/API Path)
If no YouTube captions, transcribe from audio:
- Download audio:
yt-dlp -f bestaudio -x --audio-format wav -o "full_audio.%(ext)s" "$VIDEO_URL" - Split into per-talk segments using ffmpeg:
ffmpeg -i full_audio.wav -ss "$START" -to "$END" -ac 1 -ar 16000 "segments/${SLUG}.wav" - Compress for API upload:
ffmpeg -i "segments/${SLUG}.wav" -ac 1 -ar 16000 -c:a libopus -b:a 32k "segments/${SLUG}.ogg" - If ogg > 25MB, further split into 10-min chunks.
- Transcribe via Groq API (preferred) or other backend:
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' - Reassemble chunks with offset correction for absolute timestamps.
- Parallelize: 3 concurrent API calls is safe for Groq rate limits.
Step 4: Download Video Clips (Optional, Parallel)
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.
Step 5: LLM Cleanup Pass
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]Step 6: Write Final Output
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 tableQuick Start (Copy-Paste)
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.pyThe 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.
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 1
- biyearly-mesothelioma790/skills★ 099% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository101 other files it gives its agents.
- AGENTS.mdAGENTS.md
- accelevents-apiSkill
- accelevents-speaker-syncSkill
- agents-sdkSkill
- ai-devblogSkill
- ai-engineeringSkill
- ai-readmeSkill
- align-meSkill
- annotated-video-productionSkill
- antislop-codebaseSkill
- app-ux-paradigmsSkill
- autoreviewSkill
- babysit-runsSkill
- blog-system-designSkill
- cassandra-creatorSkill
- ceo-creatorSkill
- claude-session-introspectSkill
- cli-uxSkill
- cloudflare-do-turn-based-multiplayerSkill
- cloudflare-email-serviceSkill
- cloudflare-one-migrationsSkill
- cloudflare-oneSkill
- cloudflare-production-builderSkill
- cloudflareSkill
- conference-developer-endpointsSkill
- coordinateSkill
- data-chatbotsSkill
- data-visualization-qualitySkill
- deep-trajectory-analysisSkill
- design-apps-with-imagegenSkill
- design-preferencesSkill
- diy-netlifySkill
- download-videoSkill
- download-x-videoSkill
- durable-objectsSkill
- europe-developer-apiSkill
- face-matchingSkill
- forgeSkill
- future-onlySkill
- generalizeSkill
- gsuite-setupSkill
- keep-it-simpleSkill
- latent-space-thumbnail-directorSkill
- live-ai-pipelinesSkill
- location-inputSkill
- long-running-operation-uxSkill
- media-heavy-workflowsSkill
- media-to-wiki-pipelineSkill
- media-transformSkill
- mobile-nativeSkill
- mobile-webapp-uxSkill
- multimodal-extractionSkill
- new-mac-setupSkill
- next-stepsSkill
- observability-hardeningSkill
- person-profile-writingSkill
- podcast-publishing-assistantSkill
- productionize-app-with-servicesSkill
- programmatic-agentsSkill
- provision-model-keysSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

