Skip to main content

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

  1. Clone the repository:
git clone https://github.com/ajxd2/playlist-summarizer.git
cd playlist-summarizer
  1. Install dependencies using uv:
uv sync
  1. (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
  1. 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

  1. Select "Fetch playlist" from the main menu
  2. Enter the YouTube playlist URL
  3. Specify the output directory (defaults to transcripts/{playlist_id}/)
  4. Transcripts will be saved as .txt files

Summarize Playlists

  1. Select "Summarize playlist" from the main menu
  2. Enter the directory path containing transcripts (defaults to transcripts/)
  3. Choose the Ollama model to use (e.g., gemma3:4b, llama3.1:8b, qwen2.5:7b)
  4. Specify the output directory for summaries (defaults to summaries/)
  5. Select a playlist folder
  6. Choose which videos to summarize (use space to select/deselect)
  7. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

playlist_summarizer-0.1.0.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

playlist_summarizer-0.1.0-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

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

Hashes for playlist_summarizer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d4cf083e94b434630618b6443080a11dd5751facc57c6f6ba62809638309c156
MD5 0a7e47c3c4ab07c9f26e1166a552a538
BLAKE2b-256 95e1d2ffdd9da9284727af7fe970f5e6e41cbe86fdf40b82c4e01d7885691a21

See more details on using hashes here.

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

Hashes for playlist_summarizer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c197dfe5464066850dc4f1abfe4d007401c1d20a7210caa96d5a4aeabd1ed8f4
MD5 244ef4de38499e8523e822cdeaa8c15f
BLAKE2b-256 fc9880cb453d291730e2a0a74564e648a5faf1ee663740f2e2a998bf13416bec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page