video-lens

Installation
SKILL.md

Quick reference

Step 4 is the authoritative spec. This block is a compaction-safety net — if it diverges from Step 4, trust Step 4.

Render payload must include all of: VIDEO_ID, VIDEO_TITLE, VIDEO_URL, SUMMARY, KEY_POINTS, TAKEAWAY, OUTLINE, DESCRIPTION_SECTION. GENERATION_DATE (YYYY-MM-DD) and META_LINE are optional — omit GENERATION_DATE and the renderer defaults to today. Build via Write to the PAYLOAD_PATH from Step 1, then render_report.py --payload-file <path> --output-dir <dir> — never heredoc.

Run python3 .../render_report.py --schema to print the live schema.

Script invocations (the -- guards video IDs that start with - — keep it):

  • python3 .../preflight.py -- "<url-or-id> [lang]"
  • python3 .../fetch_transcript.py -- <VIDEO_ID> [LANG_CODE]
  • python3 .../fetch_metadata.py -- <VIDEO_ID>
  • python3 .../transcribe_local.py [--language L] [--model M] -- <VIDEO_ID> (fallback only — see Step 2a fallback)
  • python3 .../render_report.py --payload-file <path> --output-dir <dir>
  • bash .../serve_report.sh <html-path> (bash script — never invoke with python3)

Bundled scripts

Six local scripts ship in ./scripts/: preflight.py, fetch_transcript.py, fetch_metadata.py, transcribe_local.py, render_report.py, serve_report.sh. No remote code is fetched at runtime. Network calls during a run: YouTube transcript and metadata fetches. When the local-transcription fallback runs: audio download from YouTube via yt-dlp, and a one-time Whisper model download (~1.5 GB for medium) from Hugging Face. Network calls when the user views the report in their browser: the YouTube iframe API and Google Fonts CSS.

Installs
638
GitHub Stars
110
First Seen
Mar 14, 2026
video-lens — kar2phi/video-lens