bulk-summarize
Bulk YouTube video summarizer for research. Scans channels and playlists for videos matching keywords, then uses AI to create detailed summaries.
Perfect for:
- Podcast research and episode digests
- Conference talk compilations
- Tutorial series notes
- Any YouTube-based research project
Features
- Keyword filtering - Only summarize videos matching your search terms
- Per-source checkpoints - Each source tracks its own progress in its folder
- Organized output - Summaries grouped by source in separate directories
- Configurable prompts - Customize what the AI extracts from each video
- Combined output - Merge all summaries into a single searchable document
Installation
Prerequisites
-
Bun - JavaScript runtime
curl -fsSL https://bun.sh/install | bash
-
yt-dlp - YouTube metadata downloader
# macOS
brew install yt-dlp
# or pip
pip install yt-dlp
-
summarize - AI summarization CLI (GitHub)
# See https://summarize.sh for installation
# Requires API key (OpenAI, Anthropic, etc.)
Install bulk-summarize
Option 1: Download binary (easiest)
Download the latest release for your platform from Releases:
# macOS (Apple Silicon)
curl -L https://github.com/smerchek/bulk-summarize/releases/latest/download/bulk-summarize-darwin-arm64 -o /usr/local/bin/bulk-summarize
chmod +x /usr/local/bin/bulk-summarize
# macOS (Intel)
curl -L https://github.com/smerchek/bulk-summarize/releases/latest/download/bulk-summarize-darwin-x64 -o /usr/local/bin/bulk-summarize
chmod +x /usr/local/bin/bulk-summarize
# Linux
curl -L https://github.com/smerchek/bulk-summarize/releases/latest/download/bulk-summarize-linux-x64 -o /usr/local/bin/bulk-summarize
chmod +x /usr/local/bin/bulk-summarize
Option 2: From source (requires Bun)
git clone https://github.com/smerchek/bulk-summarize.git
cd bulk-summarize
bun install
bun link --global
Verify installation:
bulk-summarize --help
Quick Start
# 1. Initialize project
bulk-summarize init
# 2. Edit bulk-summarize.json (add sources, keywords)
# 3. Scan for matching videos
bulk-summarize scan
# 4. Summarize pending videos
bulk-summarize summarize
# 5. Combine into one document
bulk-summarize combine
Usage
bulk-summarize [options] <command> [args]
Commands:
init [name] Create starter config file
scan Scan sources for videos matching keywords
summarize Summarize pending videos
combine Combine all summaries into one document
status Show progress for all sources
list List configured sources
reset [source] Reset checkpoint (all or specific source)
help Show help
Options:
-c, --config <file> Config file (default: bulk-summarize.json)
-o, --output-dir <dir> Output directory (overrides config)
-s, --source <id> Target specific source
-n, --limit <n> Limit videos to process
-d, --delay <ms> Delay between videos (default: 1000ms)
-p, --parallel <n> Concurrent summarizations (default: 1)
--output <file> Output file for combine
Output Structure
Each source gets its own folder with checkpoint and summaries:
summaries/
podcast-name/
.checkpoint.json # Tracks pending/done/errors
abc123.md # Video summaries
def456.md
another-channel/
.checkpoint.json
ghi789.md
Configuration
{
"name": "My Research",
"keywords": ["topic1", "topic2"],
"sources": [
{
"id": "channel-id",
"name": "Channel Name",
"url": "https://www.youtube.com/@ChannelHandle",
"enabled": true,
"keywords": ["override", "keywords"]
}
],
"settings": {
"maxVideosPerSource": 50,
"summaryLength": "xl",
"summaryPrompt": "Extract key insights. Ignore ads.\n\nTitle: {title}",
"outputDir": "summaries",
"model": "cli/claude/haiku"
}
}
Settings
| Field | Description |
|---|
keywords | Default keywords. Videos matching ANY keyword included. Empty = all videos |
summaryLength | short, medium, long, xl, xxl |
summaryPrompt | AI instructions. {title} and {source} are replaced |
maxVideosPerSource | Limit per source |
model | Override summarize.sh model (e.g. cli/claude/haiku) |
Source Options