Two-skill presentation system: analyze your speaking style into a rhetoric knowledge vault, then create new presentations that match your documented patterns. Includes an 88-entry Presentation Patterns taxonomy for scoring, brainstorming, and go-live preparation.
96
Quality
96%
Does it follow best practices?
Impact
96%
1.57xAverage score across 15 eval scenarios
yt-dlp --write-auto-sub --sub-lang en --skip-download --sub-format vtt \
-o "{vault_root}/transcripts/{youtube_id}" "https://www.youtube.com/watch?v={youtube_id}"The .vtt file contains timestamps, cue position markers, and duplicate lines. Clean it before analysis:
\d{2}:\d{2}.*-->)align:start position:0%){vault_root}/transcripts/{youtube_id}.txtUse if yt-dlp fails (e.g., no auto-captions available):
"{python_path}" -c "
from youtube_transcript_api import YouTubeTranscriptApi
transcript = YouTubeTranscriptApi.get_transcript('{youtube_id}', languages=['en'])
for entry in transcript:
print(entry['text'])
" > "{vault_root}/transcripts/{youtube_id}.txt"Where {python_path} is config.python_path from the tracking database.
This produces clean text directly — no VTT cleanup needed.
"{python_path}" -m gdown "https://drive.google.com/uc?id={google_drive_id}" \
-O "{vault_root}/slides/{google_drive_id}.pdf"Where {python_path} is config.python_path from the tracking database.
Then read the PDF to understand slide content and visual structure.
When no PDF or PPTX is available, download the video to extract slides from frames.
mkdir -p "{vault_root}/slides-rebuild/{youtube_id}"
yt-dlp -f "bestvideo[height<=720][ext=mp4]+bestaudio[ext=m4a]/best[height<=720][ext=mp4]/best[height<=720]" \
--merge-output-format mp4 \
-o "{vault_root}/slides-rebuild/{youtube_id}/{youtube_id}.mp4" \
"https://www.youtube.com/watch?v={youtube_id}"After download, run the extraction script from references/video-slide-extraction.md.
The script extracts frames, detects the slide region, deduplicates, and produces a
PDF at slides/{youtube_id}.pdf. Delete the video after extraction to save space.
For processing many playlist talks at once, download videos in parallel:
# Download up to 3 videos concurrently
for yt_id in ID1 ID2 ID3 ...; do
(
yt-dlp -f "bestvideo[height<=720][ext=mp4]+bestaudio[ext=m4a]/best[height<=720]" \
--merge-output-format mp4 \
-o "{vault_root}/slides-rebuild/${yt_id}/${yt_id}.mp4" \
"https://www.youtube.com/watch?v=${yt_id}" 2>/dev/null
echo "Downloaded: ${yt_id}"
) &
# Limit concurrency
[ $(jobs -r -p | wc -l) -ge 3 ] && wait -n
done
waitThen run the extraction script on each downloaded video sequentially.
Install with Tessl CLI
npx tessl i jbaruch/speaker-toolkit@0.6.2evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
skills
presentation-creator
references
patterns
build
deliver
prepare
rhetoric-knowledge-vault