Skip to main content

Video

Process a video URL — transcribe, summarize, and output to terminal, Linear, or Obsidian with executive summary, chapters, and references.

Video Skill

Process a video URL into a structured summary with executive summary, chapters, transcript, and references. Output to terminal, Linear issue, or Obsidian vault note.

Scope: This skill covers video-to-knowledge processing — download, transcribe, summarize, and format. It is NOT about video editing, encoding, or streaming. For Linear issue management beyond video, see Linear MCP directly.

Usage

/video <url>                          # process + print summary to terminal
/video <url> --linear [ISSUE-ID]      # create/update Linear issue
/video <url> --obsidian               # create Obsidian note in Videos/New/
/video --obsidian-triage              # batch-process untitled notes in vault root
/video --people-backfill              # add profile images to People pages missing them

Pipeline

All modes share the same processing pipeline (except --obsidian-triage and --obsidian-watched which operate on existing notes).

Step 1: Process Video

MANIFEST=$(bash <skill-dir>/process_video.sh "<url>")

This produces:

  • manifest.json — metadata, paths to all artifacts
  • video.mp4 — downloaded video
  • audio.wav — extracted audio
  • video.jpg or thumbnail.jpg — thumbnail image
  • video.info.json — yt-dlp metadata (YouTube sources)
  • transcript.txt — Whisper transcription
  • segments.json — timestamped transcript segments

Step 2: Read Artifacts

Read the manifest, transcript, and segments files. For YouTube videos, also read info.json for metadata.

Step 3: Generate Content

Using the transcript and metadata, generate:

  1. Executive Summary — numbered list, 3-7 items capturing the key takeaways. Each item is one sentence. Focus on what the viewer would want to know without watching the full video.

  2. Chapters — structured timeline of the video:

    • YouTube with chapters: Use chapters from manifest chapters array
    • YouTube without chapters: AI-generate 3-7 chapters from transcript by identifying topic shifts
    • Non-YouTube: AI-generate 3-7 chapters from transcript segments

    Each chapter has: start timestamp, title, one-sentence description.

  3. References — extract any URLs, tools, libraries, or resources mentioned in the transcript. List as markdown links. Omit section if no references found.

YouTube Timestamp Links

For YouTube sources, chapter timestamps link directly to the video:

https://youtu.be/{video_id}?t={seconds}

Where {seconds} is start_time as integer. Format display time as M:SS (e.g., 2:15).

For non-YouTube sources, use plain timestamps without links: **[M:SS Title]**.

Output Routing

Terminal (default)

Print to stdout:

  • Executive Summary (numbered list)
  • Chapters with timestamps
  • References
  • Note: do NOT print the full transcript to terminal — it's too long. Mention that it's available in the work directory.

Linear (--linear)

Read formatters/linear.md for the full Linear formatting rules, layout, and issue creation/update process.

Obsidian (--obsidian, --obsidian-triage, --obsidian-watched)

Read formatters/obsidian.md for the full Obsidian note formatting, triage, and watched-move logic.

Non-YouTube Handling

The pipeline gracefully degrades for non-YouTube sources:

Capability YouTube Non-YouTube
Thumbnail yt-dlp --write-thumbnail ffmpeg frame at 10%
Title From info.json AI-generated from transcript
Chapters From metadata or AI-generated AI-generated only
Timestamp links youtu.be/{id}?t= deep links Plain timestamps
Video ID From info.json Empty
Duration From info.json From ffprobe

Config Files

.claude/linear.json (in repo root)

Required for --linear mode. See formatters/linear.md for details.

{
  "teamId": "TEAM-xxx",
  "teamKey": "RAJ",
  "projectId": "PROJ-xxx",
  "milestone": "M3: Members"
}

.claude/supabase-assets.json (symlinked from ~/.claude/supabase-assets.json)

Required for --linear mode thumbnail uploads and People page avatar uploads. Points to the centralized rajababa-assets Supabase project (shared across all repos).

{
  "supabaseUrl": "https://xxx.supabase.co",
  "supabaseAnonKey": "eyJ..."
}

Dependencies

  • yt-dlp — video download + metadata extraction
  • ffmpeg / ffprobe — audio extraction, thumbnail fallback, duration detection
  • Whisper — speech-to-text transcription (via venv/)
  • jq — JSON parsing of info.json and manifest
  • Obsidian CLI (1.12.4+) — for --obsidian modes. Enable in Obsidian → Settings → General → Command line interface
  • Linear MCP — for --linear mode issue creation/updates
  • Supabase Storage — for --linear mode thumbnail uploads and People page avatars (centralized rajababa-assets project, private assets bucket)

Manifest Schema

{
  "url": "<original-url>",
  "work_dir": "<path>",
  "video": "<path-to-mp4>",
  "audio": "<path-to-wav>",
  "thumbnail": "<path-to-jpg-or-empty>",
  "thumbnail_url": "<remote-thumbnail-url-or-empty>",
  "info_json": "<path-to-info.json>",
  "transcript": "<path-to-transcript.txt>",
  "segments": "<path-to-segments.json>",
  "title": "Video Title",
  "duration": 623,
  "video_id": "dQw4w9WgXcQ",
  "extractor": "youtube",
  "chapters": [
    {"start_time": 0, "end_time": 120, "title": "Introduction"},
    {"start_time": 120, "end_time": 340, "title": "Main Topic"}
  ],
  "created_at": "2026-03-15T..."
}

Search Framework Explorer

Search agents, skills, and standards