A command-line tool that summarizes YouTube videos using AI. It extracts transcripts from YouTube videos and generates structured summaries using OpenAI, Anthropic, or OpenRouter (300+ models).
pip install youtube-summariserNote:
youtube-summariser(British),youtube-summarizer(American), andys(short alias) commands are all available.
Or install from source:
git clone https://github.com/weijianzhg/youtube-summariser
cd youtube-summariser
pip install -e .Run the interactive setup to configure your API keys:
youtube-summariser initThis guides you through:
- Selecting your default provider (Anthropic, OpenAI, or OpenRouter)
- Entering your API key (securely masked)
- Optionally configuring additional providers
youtube-summariser initSettings are saved to a platform-appropriate location:
- macOS/Linux:
~/.youtube-summariser/config.yaml - Windows:
%APPDATA%\youtube-summariser\config.yaml
Re-run init anytime to update your settings.
# For Anthropic (default provider)
export ANTHROPIC_API_KEY=your_anthropic_api_key
# For OpenAI
export OPENAI_API_KEY=your_openai_api_key
# For OpenRouter (access 300+ models)
export OPENROUTER_API_KEY=your_openrouter_api_keyOr create a .env file in your working directory.
- Environment variables (highest priority)
- User config file (
~/.youtube-summariser/config.yaml) - Bundled defaults
The default provider is Anthropic. You can change this via init or override per command using --provider.
# Interactive configuration
youtube-summariser init
# Same command with the short alias
ys init
# Summarize a video (saves to auto-generated filename)
youtube-summariser "https://www.youtube.com/watch?v=VIDEO_ID"
# Specify output filename
youtube-summariser "https://youtu.be/VIDEO_ID" -o my_summary.md
# Print to terminal only (no file saved)
youtube-summariser "https://youtube.com/watch?v=VIDEO_ID" --no-save
# Use a specific provider
youtube-summariser "https://youtu.be/VIDEO_ID" --provider openai
# Use OpenRouter with access to 300+ models
youtube-summariser "https://youtu.be/VIDEO_ID" --provider openrouterDon't have a URL? Search for videos by title:
# Interactive selection (shows top 5 results)
youtube-summariser search "How to make mass"
# Auto-select first result
youtube-summariser search "Python tutorial" --first
# Show more results
youtube-summariser search "cooking recipes" --max-results 10Summarize every video published on a channel:
youtube-summariser channel "https://www.youtube.com/@CHANNEL"For large channels, limit the run to the most recent videos:
youtube-summariser channel "https://www.youtube.com/@CHANNEL" --max-videos 10Each video goes through the same transcript and LLM summarization pipeline as the
single-video command. Summaries are saved individually under channel-summaries/ by
default. Use --output-dir to choose another directory.
Note: Without
--max-videos, the command processes every video on the channel. This can take a long time and make many LLM API calls on a large channel.
| Command | Description |
|---|---|
init |
Interactive setup for API keys and preferences |
summarise |
Summarize a YouTube video (also aliased as summarize) |
search |
Search YouTube by title and summarize |
channel |
Summarize all or the most recent videos from a channel |
You can also pass a URL directly without the summarise subcommand for convenience.
| Flag | Description |
|---|---|
-o, --output |
Specify output filename (default: YYYY-MM-DD__video-title-slug__video-id.md) |
--no-save |
Print summary to terminal without saving to file |
--provider |
LLM provider to use: openai, anthropic, or openrouter |
--no-stream |
Disable streaming output |
--first, -1 |
Auto-select first search result (search command only) |
--max-results |
Number of search results to display (default: 5) |
--max-videos |
Maximum recent channel videos to summarize (default: all) |
--output-dir |
Directory for channel summary files (default: channel-summaries) |
-v, --version |
Show version number |
-h, --help |
Show help message |
In zsh, unquoted YouTube URLs containing ? are treated as glob patterns before the CLI runs.
Use one of these approaches:
# Escape ? in the URL
ys https://www.youtube.com/watch\?v=VIDEO_ID
# Or disable globbing for this command
noglob ys https://www.youtube.com/watch?v=VIDEO_IDTo make this convenient permanently, add to ~/.zshrc:
ys() { noglob command ys "$@"; }Summary files are saved as Obsidian-friendly markdown (.md) with YAML frontmatter:
---
title: "Video Title"
url: "https://www.youtube.com/watch?v=VIDEO_ID"
video_id: VIDEO_ID
channel: "Channel Name"
published_at: 2026-07-20
created: 2026-07-28
content_type: tutorial
series: "Example Course"
series_index: 2
concepts:
- "gradient descent"
- "backpropagation"
prerequisites:
- "basic calculus"
tags:
- youtube
- summary
- "machine-learning"
- "neural-networks"
model: "anthropic/claude-sonnet-4-5-20250929"
---
# Video Title
## TL;DR
...
## Key Takeaways
- Insight with a linked timestamp [12:34](https://www.youtube.com/watch?v=VIDEO_ID&t=754)
## Detailed Summary
...
## Notable Quotes
...Generated notes include normalized tags and structured properties for Obsidian.
- Python 3.10+
- An API key for OpenAI, Anthropic, or OpenRouter
See CONTRIBUTORS.md for people whose code, feedback, and ideas have helped shape YouTube Summariser.
MIT License - see LICENSE for details.