A monorepo for YouTube playlist transcript fetching and AI-powered summarization
Project description
Playlist Summarizer
A monorepo containing tools for fetching YouTube playlist transcripts and generating AI-powered summaries using local or cloud-based LLM models via Ollama.
Packages
| Package | Description |
|---|---|
playlist-summarizer-core |
Core library for transcript fetching and AI summarization |
playlist-summarizer-cli |
Command-line interface for the summarizer |
Features
- ๐ฅ Fetch Playlists: Download transcripts from YouTube playlists
- ๐ค AI Summarization: Generate summaries using Ollama models (local or cloud)
- ๐ Markdown Output: Clean, structured summaries in Markdown format
- ๐ฏ Selective Processing: Choose which videos to summarize
- ๐ Progress Tracking: Real-time progress bars and status updates
- ๐ Secure Prompts: Hardened system prompts resistant to injection attacks
- ๐จ Rich CLI: Beautiful terminal interface with colors and formatting
Requirements
- Python 3.14+
- Ollama installed and running (for local models)
- Or Ollama Cloud API key (for cloud models)
Quick Start
- Clone the repository:
git clone https://github.com/ajxd2/playlist-summarizer.git
cd playlist-summarizer
- Install dependencies using
uv:
uv sync
- (Optional) Set up environment variables:
cp .env.example .env
# Edit .env and add:
# OLLAMA_HOST=http://localhost:11434 # Optional, defaults to localhost
# OLLAMA_API_KEY=your_api_key_here # Required for cloud models
- Run the CLI:
uv run playlist-summarizer
Project Structure
playlist-summarizer/
โโโ packages/
โ โโโ core/ # Core library
โ โ โโโ src/
โ โ โ โโโ playlist_summarizer_core/
โ โ โ โโโ __init__.py
โ โ โ โโโ fetcher.py # YouTube transcript fetching
โ โ โ โโโ summarizer.py # AI summarization logic
โ โ โโโ pyproject.toml
โ โ โโโ README.md
โ โโโ cli/ # CLI application
โ โโโ src/
โ โ โโโ playlist_summarizer_cli/
โ โ โโโ __init__.py
โ โ โโโ __main__.py
โ โ โโโ main.py # CLI entry point
โ โโโ pyproject.toml
โ โโโ README.md
โโโ transcripts/ # Downloaded transcripts (gitignored)
โโโ summaries/ # Generated summaries (gitignored)
โโโ pyproject.toml # Workspace configuration
โโโ uv.lock # Dependency lock file
โโโ README.md
Usage
Using the CLI
Run the CLI application:
uv run playlist-summarizer
Fetch Playlist Transcripts
- Select "Fetch playlist" from the main menu
- Enter the YouTube playlist URL
- Specify the output directory (defaults to
transcripts/{playlist_id}/) - Transcripts will be saved as
.txtfiles
Summarize Playlists
- Select "Summarize playlist" from the main menu
- Enter the directory path containing transcripts (defaults to
transcripts/) - Choose the Ollama model to use (e.g.,
gemma3:4b,llama3.1:8b,qwen2.5:7b) - Specify the output directory for summaries (defaults to
summaries/) - Select a playlist folder
- Choose which videos to summarize (use space to select/deselect)
- Optionally create a master summary of all video summaries
Using the Core Library
from playlist_summarizer_core import get_playlist_videos, get_transcript, Summarizer
# Fetch transcripts
videos = get_playlist_videos("https://www.youtube.com/playlist?list=...")
for video in videos:
transcript = get_transcript(video)
print(f"{video.title}: {len(transcript)} characters")
# Summarize content
summarizer = Summarizer(model="gemma3:4b")
summary = summarizer.summarize("Your transcript text...")
Configuration
Environment Variables
OLLAMA_HOST- Ollama server URL (default:http://localhost:11434)OLLAMA_API_KEY- API key for Ollama Cloud (required for cloud models)
Default Directories
- Transcripts:
transcripts/ - Summaries:
summaries/
Development
Setup Development Environment
uv sync
Run from Source
# Run CLI
uv run playlist-summarizer
# Or run as module
uv run python -m playlist_summarizer_cli
Working with Individual Packages
# Work on core package
cd packages/core
uv sync
# Work on CLI package
cd packages/cli
uv sync
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. See CONTRIBUTING.md for guidelines.
Author
Anthony Kovach - aj@ajxd2.dev
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file playlist_summarizer-0.1.0.tar.gz.
File metadata
- Download URL: playlist_summarizer-0.1.0.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4cf083e94b434630618b6443080a11dd5751facc57c6f6ba62809638309c156
|
|
| MD5 |
0a7e47c3c4ab07c9f26e1166a552a538
|
|
| BLAKE2b-256 |
95e1d2ffdd9da9284727af7fe970f5e6e41cbe86fdf40b82c4e01d7885691a21
|
File details
Details for the file playlist_summarizer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: playlist_summarizer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c197dfe5464066850dc4f1abfe4d007401c1d20a7210caa96d5a4aeabd1ed8f4
|
|
| MD5 |
244ef4de38499e8523e822cdeaa8c15f
|
|
| BLAKE2b-256 |
fc9880cb453d291730e2a0a74564e648a5faf1ee663740f2e2a998bf13416bec
|