Overview
Runs python -m summarizer to transcribe videos and summarize them using a configurable LLM. Supports 12 summary styles and multiple providers. For full documentation see martino.docs.buildwithfern.com.
Never 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 1 — Run the CLI:
python -m summarizer --source "VIDEO_URL"
The tool uses the default provider from summarizer.yaml. No extra flags needed for basic usage.
Step 2 — Read the output file:
The CLI prints the saved filename. Read it from summaries/:
[+] Saved watch_20260207_234533.md
# Read: summaries/watch_20260207_234533.md
Step 3 — Show the result to the user.
File Locations
All paths are relative to the project root (where setup.py is). The local config file is summarizer.yaml. Do NOT look in your home directory or the skill directory.
| File |
Location |
| Config |
./summarizer.yaml |
| API keys |
./.env |
| Prompt templates |
./summarizer/prompts.json |
| Output summaries |
./summaries/<filename>.md |
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 or auto (uses first available caption track, lets Whisper detect language) |
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 |
--visual |
Send video directly to a video-capable model (skips transcription) |
False |
--verbose, -v |
Detailed progress output |
False |
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 |
Distill Wisdom with diagrams |
Textual insights with optional Mermaid diagrams |
Examples
# Basic YouTube summary
python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID"
# Specific provider
python -m summarizer --source "URL" --provider gemini
# Extract key insights
python -m summarizer --source "URL" --prompt-type "Distill Wisdom"
# Fact-check with Perplexity
python -m summarizer \
--source "URL" \
--base-url "https://api.perplexity.ai" \
--model "sonar-pro" \
--prompt-type "Fact Checker"
# Mermaid diagram from a lecture
python -m summarizer --source "URL" --provider gemini --prompt-type "Mermaid Diagram"
# Visual mode (sends video to a vision-capable model, skips transcription)
python -m summarizer --source "URL" --provider nvidia --visual
# Local file
python -m summarizer --type "Local File" --source "./lecture.mp4" --provider groq
# Batch process
python -m summarizer --source "URL1" "URL2" "URL3" --provider gemini
# No config file (all explicit)
python -m summarizer \
--source "URL" \
--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
Multi-Step Workflow
For comprehensive analysis, chain multiple styles on the same video:
Summarization — quick overview
Distill Wisdom — extract key insights
Fact Checker (with Perplexity) — verify claims
Mermaid Diagram — visual reference
Warnings
- Windows +
--no-save: Do NOT use --no-save on Windows — Unicode output crashes stdout. Always let the tool save to file, then read it.
- Social media: TikTok, Instagram, Twitter/X, Reddit, and Facebook are handled by yt-dlp by default. Cobalt is only used as a fallback if yt-dlp fails or does not support the URL.
- Transcription fallback: If YouTube captions are unavailable, the tool automatically falls back to audio download + Whisper transcription.
- Cloud Whisper: Requires a Groq API key (free tier available).
- Use
--verbose for detailed progress and debugging.
1---2name: summarize3description: Transcribe and summarize videos from YouTube, local files, Google Drive, Dropbox, and social media platforms (TikTok, Instagram, Twitter/X, Reddit) using any OpenAI-compatible LLM. Use when asked to summarize, analyze, extract insights, fact-check, or create study materials from video content.4license: MIT5---67## Overview89Runs `python -m summarizer` to transcribe videos and summarize them using a configurable LLM. Supports 12 summary styles and multiple providers. For full documentation see [martino.docs.buildwithfern.com](https://martino.docs.buildwithfern.com).1011**Never fetch, scrape, or download video URLs directly (e.g. with WebFetch or curl). The CLI handles all downloading, transcription, and summarization internally.**1213## Quick Start1415**Step 1 — Run the CLI:**1617```bash18python -m summarizer --source "VIDEO_URL"19```2021The tool uses the default provider from `summarizer.yaml`. No extra flags needed for basic usage.2223**Step 2 — Read the output file:**2425The CLI prints the saved filename. Read it from `summaries/`:2627```28[+] Saved watch_20260207_234533.md29# Read: summaries/watch_20260207_234533.md30```3132**Step 3 — Show the result to the user.**3334## File Locations3536All paths are relative to the **project root** (where `setup.py` is). The local config file is `summarizer.yaml`. Do NOT look in your home directory or the skill directory.3738| File | Location |39|------|----------|40| Config | `./summarizer.yaml` |41| API keys | `./.env` |42| Prompt templates | `./summarizer/prompts.json` |43| Output summaries | `./summaries/<filename>.md` |4445## CLI Reference4647```48python -m summarizer [OPTIONS]49```5051### Required5253| Flag | Description |54|------|-------------|55| `--source` | One or more video URLs or file paths |5657### Provider Options5859| Flag | Description | Default |60|------|-------------|---------|61| `--provider` | Named provider from `summarizer.yaml` | `default_provider` from YAML |62| `--base-url` | API endpoint URL (overrides provider) | From YAML |63| `--model` | Model identifier (overrides provider) | From YAML |64| `--api-key` | API key (overrides `.env` auto-matching) | Auto from `.env` |6566### Source Options6768| Flag | Description | Default |69|------|-------------|---------|70| `--type` | `YouTube Video`, `Video URL`, `Local File`, `Google Drive Video Link`, `Dropbox Video Link` | `YouTube Video` |71| `--force-download` | Skip YouTube captions, download audio instead | `False` |72| `--transcription` | `Cloud Whisper` (Groq API) or `Local Whisper` | `Cloud Whisper` |73| `--whisper-model` | `tiny`, `base`, `small`, `medium`, `large` | `tiny` |74| `--language` | Language code or `auto` (uses first available caption track, lets Whisper detect language) | `auto` |7576### Processing Options7778| Flag | Description | Default |79|------|-------------|---------|80| `--prompt-type` | Summary style (see Styles below) | From YAML defaults |81| `--chunk-size` | Characters per text chunk | From YAML defaults |82| `--parallel-calls` | Concurrent API requests | `30` |83| `--max-tokens` | Max output tokens per chunk | `4096` |8485### Output Options8687| Flag | Description | Default |88|------|-------------|---------|89| `--output-dir` | Directory to save summaries | `summaries` |90| `--output-format` | `markdown`, `json`, or `html` | `markdown` |91| `--no-save` | Print to stdout only, don't save file | `False` |92| `--visual` | Send video directly to a video-capable model (skips transcription) | `False` |93| `--verbose`, `-v` | Detailed progress output | `False` |9495### Config Options9697| Flag | Description |98|------|-------------|99| `--config` | Path to config file (default: auto-detect) |100| `--no-config` | Ignore config file, use CLI args only |101| `--init-config` | Generate example `summarizer.yaml` and exit |102103## Summary Styles104105Use with `--prompt-type`. Defined in `summarizer/prompts.json`.106107| Style | Purpose |108|-------|---------|109| `Questions and answers` | Q&A extraction from content |110| `Summarization` | Standard summary with title |111| `Distill Wisdom` | Ideas, quotes, and references extraction |112| `DNA Extractor` | Core truth distilled to 200 words max |113| `Fact Checker` | Claim verification with TRUE/FALSE/MISLEADING labels |114| `Tutorial` | Step-by-step instructions from content |115| `Research` | Deep analysis with broader context |116| `Reflections` | Philosophical extensions beyond what is said |117| `Mermaid Diagram` | Visual concept map in Mermaid.js syntax |118| `Essay Writing in Paul Graham Style` | 250-word essay in Paul Graham's style |119| `Only grammar correction with highlights` | Grammar cleanup with bold highlights |120| `Distill Wisdom with diagrams` | Textual insights with optional Mermaid diagrams |121122## Examples123124```bash125# Basic YouTube summary126python -m summarizer --source "https://youtube.com/watch?v=VIDEO_ID"127128# Specific provider129python -m summarizer --source "URL" --provider gemini130131# Extract key insights132python -m summarizer --source "URL" --prompt-type "Distill Wisdom"133134# Fact-check with Perplexity135python -m summarizer \136 --source "URL" \137 --base-url "https://api.perplexity.ai" \138 --model "sonar-pro" \139 --prompt-type "Fact Checker"140141# Mermaid diagram from a lecture142python -m summarizer --source "URL" --provider gemini --prompt-type "Mermaid Diagram"143144# Visual mode (sends video to a vision-capable model, skips transcription)145python -m summarizer --source "URL" --provider nvidia --visual146147# Local file148python -m summarizer --type "Local File" --source "./lecture.mp4" --provider groq149150# Batch process151python -m summarizer --source "URL1" "URL2" "URL3" --provider gemini152153# No config file (all explicit)154python -m summarizer \155 --source "URL" \156 --base-url "https://openrouter.ai/api/v1" \157 --model "google/gemini-2.0-flash-exp:free" \158 --api-key "sk-or-v1-YOUR_KEY" \159 --prompt-type "Tutorial" \160 --no-config161```162163## Multi-Step Workflow164165For comprehensive analysis, chain multiple styles on the same video:1661671. `Summarization` — quick overview1682. `Distill Wisdom` — extract key insights1693. `Fact Checker` (with Perplexity) — verify claims1704. `Mermaid Diagram` — visual reference171172## Warnings173174- **Windows + `--no-save`**: Do NOT use `--no-save` on Windows — Unicode output crashes stdout. Always let the tool save to file, then read it.175- **Social media**: TikTok, Instagram, Twitter/X, Reddit, and Facebook are handled by **yt-dlp** by default. Cobalt is only used as a fallback if yt-dlp fails or does not support the URL.176- **Transcription fallback**: If YouTube captions are unavailable, the tool automatically falls back to audio download + Whisper transcription.177- **Cloud Whisper**: Requires a Groq API key (free tier available).178- Use `--verbose` for detailed progress and debugging.