Video Summarizer
Overview
This skill transcribes and summarizes video content by running the python -m summarizer CLI tool. It handles YouTube (captions or audio), local files, Google Drive, and Dropbox. Transcripts are chunked, processed in parallel through an OpenAI-compatible LLM, and merged into a final summary.
IMPORTANT: Always use the CLI command below. Never try to fetch, scrape, or download video URLs directly (e.g., with webfetch or curl). The CLI handles all downloading, transcription, and summarization internally.
Quick Start (Step-by-Step)
Follow these steps exactly:
Step 1 -- Run the CLI:
python -m summarizer --source "VIDEO_URL"
The tool uses the default provider from summarizer.yaml (already configured). No extra flags needed for basic usage.
Step 2 -- Read the output file:
The CLI prints the output filename on success. It is always saved inside the summaries/ subdirectory relative to the project working directory. For example:
[+] Saved watch_20260207_234533.md
The full path to read is: summaries/watch_20260207_234533.md
Step 3 -- Show the result to the user.
That's it. Three steps.
Where Files Live
All paths are relative to the project working directory (where summarizer.yaml and setup.py are).
| File | Location |
|---|---|
| Config | ./summarizer.yaml |
| API keys | ./.env |
| Prompt templates | ./summarizer/prompts.json |
| Output summaries | ./summaries/<filename>.md |
| CLI entry point | python -m summarizer |
Do NOT look for .env or config files in your home directory or in the skill directory. They are in the project root.
CLI Reference
python -m summarizer [OPTIONS]
Required
| Flag | Description |
|---|---|
--source |
One or more video URLs or file paths |
Provider Options
| Flag | Description | Default |
|---|---|---|
--provider |
Named provider from summarizer.yaml |
default_provider from YAML |
--base-url |
API endpoint URL (overrides provider) | From YAML |
--model |
Model identifier (overrides provider) | From YAML |
--api-key |
API key (overrides .env auto-matching) |
Auto from .env |
Source Options
| Flag | Description | Default |
|---|---|---|
--type |
YouTube Video, Video URL, Local File, Google Drive Video Link, Dropbox Video Link |
YouTube Video |
--force-download |
Skip YouTube captions, download audio instead | False |
--transcription |
Cloud Whisper (Groq API) or Local Whisper |
Cloud Whisper |
--whisper-model |
tiny, base, small, medium, large |
tiny |
--language |
Language code for captions (e.g., en, it, es) |
auto |
Processing Options
| Flag | Description | Default |
|---|---|---|
--prompt-type |
Summary style (see Styles below) | From YAML defaults |
--chunk-size |
Characters per text chunk | From YAML defaults |
--parallel-calls |
Concurrent API requests | 30 |
--max-tokens |
Max output tokens per chunk | 4096 |
Output Options
| Flag | Description | Default |
|---|---|---|
--output-dir |
Directory to save summaries | summaries |
--output-format |
markdown, json, or html |
markdown |
--no-save |
Print to stdout only, don't save file | False |
--verbose, -v |
Detailed progress output | False |
Warning: Do NOT use --no-save on Windows. There is a known encoding bug where Unicode characters in the summary crash stdout output. Always let the tool save to a file, then read the file.
Config Options
| Flag | Description |
|---|---|
--config |
Path to config file (default: auto-detect) |
--no-config |
Ignore config file, use CLI args only |
--init-config |
Generate example summarizer.yaml and exit |
Summary Styles
Use with --prompt-type. Defined in summarizer/prompts.json.
| Style | Purpose |
|---|---|
Questions and answers |
Q&A extraction from content |
Summarization |
Standard summary with title |
Distill Wisdom |
Ideas, quotes, and references extraction |
DNA Extractor |
Core truth distilled to 200 words max |
Fact Checker |
Claim verification with TRUE/FALSE/MISLEADING labels |
Tutorial |
Step-by-step instructions from content |
Research |
Deep analysis with broader context |
Reflections |
Philosophical extensions beyond what is said |
Mermaid Diagram |
Visual concept map in Mermaid.js syntax |
Essay Writing in Paul Graham Style |
250-word essay in Paul Graham's style |
Only grammar correction with highlights |
Grammar cleanup with bold highlights |
Examples
Summarize a YouTube video (simplest form)
python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID"
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Specify a provider
python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID" --provider gemini
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Extract key insights with Distill Wisdom
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--provider openrouter \
--prompt-type "Distill Wisdom"
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Fact-check video claims using Perplexity
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--base-url "https://api.perplexity.ai" \
--model "sonar-pro" \
--prompt-type "Fact Checker"
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Generate a Mermaid diagram from a lecture
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--provider gemini \
--prompt-type "Mermaid Diagram"
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Summarize a local file
python -m summarizer \
--type "Local File" \
--source "./lecture.mp4" \
--provider groq
# Output: summaries/lecture_YYYYMMDD_HHMMSS.md
Batch-process multiple videos
python -m summarizer \
--source "URL1" "URL2" "URL3" \
--provider gemini \
--prompt-type "Summarization"
# Output: one file per URL in summaries/
Use without config file (all flags explicit)
python -m summarizer \
--source "https://youtube.com/watch?v=VIDEO_ID" \
--base-url "https://openrouter.ai/api/v1" \
--model "google/gemini-2.0-flash-exp:free" \
--api-key "sk-or-v1-YOUR_KEY" \
--prompt-type "Tutorial" \
--no-config
# Output: summaries/watch_YYYYMMDD_HHMMSS.md
Reading the Output
After running the CLI, always read the output file from summaries/:
# The CLI prints something like:
# [+] Saved watch_20260207_234533.md
#
# The file is at:
summaries/watch_20260207_234533.md
Use the Read tool on the full path: summaries/<filename> (relative to project root).
Multi-Step Workflow
For comprehensive analysis, chain multiple styles on the same video:
- Start with
Summarizationfor a quick overview - Use
Distill Wisdomto extract key insights - Run
Fact Checker(ideally with Perplexity) to verify claims - Generate a
Mermaid Diagramfor visual reference
Error Handling
- If no API key is found, the tool checks
.envfor a key matching the provider URL keyword - If YouTube captions are unavailable, the tool falls back to audio download + Whisper transcription
- Use
--verboseto see detailed progress and debug issues - Cloud Whisper requires a Groq API key (free tier available)
Configuration Files
All in the project working directory:
summarizer.yaml: Provider definitions (base_url, model, chunk-size) and defaults.env: API keys, auto-matched by URL keyword (e.g.,generativelanguage = YOUR_KEY)summarizer/prompts.json: Prompt templates using{text}as transcript placeholder
Testing
python -m pytest tests/ -v