{"id":37078453,"url":"https://github.com/ajxd2/playlist-summarizer","last_synced_at":"2026-01-14T09:11:01.619Z","repository":{"id":329074695,"uuid":"1117339170","full_name":"AJXD2/playlist-summarizer","owner":"AJXD2","description":"A Python CLI tool that fetches YouTube playlist transcripts and generates AI-powered summaries using local or cloud-based LLM models via Ollama.","archived":false,"fork":false,"pushed_at":"2025-12-19T03:09:51.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-20T19:39:56.294Z","etag":null,"topics":["automation","cli","ollama","python","summarizer","transcription","youtube"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AJXD2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-16T07:11:15.000Z","updated_at":"2025-12-18T07:57:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/AJXD2/playlist-summarizer","commit_stats":null,"previous_names":["ajxd2/playlist-summarizer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/AJXD2/playlist-summarizer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AJXD2%2Fplaylist-summarizer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AJXD2%2Fplaylist-summarizer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AJXD2%2Fplaylist-summarizer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AJXD2%2Fplaylist-summarizer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AJXD2","download_url":"https://codeload.github.com/AJXD2/playlist-summarizer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AJXD2%2Fplaylist-summarizer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28414851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cli","ollama","python","summarizer","transcription","youtube"],"created_at":"2026-01-14T09:11:00.923Z","updated_at":"2026-01-14T09:11:01.612Z","avatar_url":"https://github.com/AJXD2.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Playlist Summarizer\n\nA monorepo containing tools for fetching YouTube playlist transcripts and generating AI-powered summaries using local or cloud-based LLM models via Ollama.\n\n## Packages\n\n| Package | Description |\n|---------|-------------|\n| [`playlist-summarizer-core`](./packages/core) | Core library for transcript fetching and AI summarization |\n| [`playlist-summarizer-cli`](./packages/cli) | Command-line interface for the summarizer |\n\n## Features\n\n- 📥 **Fetch Playlists**: Download transcripts from YouTube playlists\n- 🤖 **AI Summarization**: Generate summaries using Ollama models (local or cloud)\n- 📝 **Markdown Output**: Clean, structured summaries in Markdown format\n- 🎯 **Selective Processing**: Choose which videos to summarize\n- 📊 **Progress Tracking**: Real-time progress bars and status updates\n- 🔒 **Secure Prompts**: Hardened system prompts resistant to injection attacks\n- 🎨 **Rich CLI**: Beautiful terminal interface with colors and formatting\n\n## Requirements\n\n- Python 3.14+\n- [Ollama](https://ollama.com/) installed and running (for local models)\n- Or Ollama Cloud API key (for cloud models)\n\n## Quick Start\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/ajxd2/playlist-summarizer.git\ncd playlist-summarizer\n```\n\n2. Install dependencies using `uv`:\n```bash\nuv sync\n```\n\n3. (Optional) Set up environment variables:\n```bash\ncp .env.example .env\n# Edit .env and add:\n# OLLAMA_HOST=http://localhost:11434  # Optional, defaults to localhost\n# OLLAMA_API_KEY=your_api_key_here     # Required for cloud models\n```\n\n4. Run the CLI:\n```bash\nuv run playlist-summarizer\n```\n\n## Project Structure\n\n```\nplaylist-summarizer/\n├── packages/\n│   ├── core/                    # Core library\n│   │   ├── src/\n│   │   │   └── playlist_summarizer_core/\n│   │   │       ├── __init__.py\n│   │   │       ├── fetcher.py   # YouTube transcript fetching\n│   │   │       └── summarizer.py # AI summarization logic\n│   │   ├── pyproject.toml\n│   │   └── README.md\n│   └── cli/                     # CLI application\n│       ├── src/\n│       │   └── playlist_summarizer_cli/\n│       │       ├── __init__.py\n│       │       ├── __main__.py\n│       │       └── main.py      # CLI entry point\n│       ├── pyproject.toml\n│       └── README.md\n├── transcripts/                 # Downloaded transcripts (gitignored)\n├── summaries/                   # Generated summaries (gitignored)\n├── pyproject.toml               # Workspace configuration\n├── uv.lock                      # Dependency lock file\n└── README.md\n```\n\n## Usage\n\n### Using the CLI\n\nRun the CLI application:\n```bash\nuv run playlist-summarizer\n```\n\n#### Fetch Playlist Transcripts\n\n1. Select \"Fetch playlist\" from the main menu\n2. Enter the YouTube playlist URL\n3. Specify the output directory (defaults to `transcripts/{playlist_id}/`)\n4. Transcripts will be saved as `.txt` files\n\n#### Summarize Playlists\n\n1. Select \"Summarize playlist\" from the main menu\n2. Enter the directory path containing transcripts (defaults to `transcripts/`)\n3. Choose the Ollama model to use (e.g., `gemma3:4b`, `llama3.1:8b`, `qwen2.5:7b`)\n4. Specify the output directory for summaries (defaults to `summaries/`)\n5. Select a playlist folder\n6. Choose which videos to summarize (use space to select/deselect)\n7. Optionally create a master summary of all video summaries\n\n### Using the Core Library\n\n```python\nfrom playlist_summarizer_core import get_playlist_videos, get_transcript, Summarizer\n\n# Fetch transcripts\nvideos = get_playlist_videos(\"https://www.youtube.com/playlist?list=...\")\nfor video in videos:\n    transcript = get_transcript(video)\n    print(f\"{video.title}: {len(transcript)} characters\")\n\n# Summarize content\nsummarizer = Summarizer(model=\"gemma3:4b\")\nsummary = summarizer.summarize(\"Your transcript text...\")\n```\n\n## Configuration\n\n### Environment Variables\n\n- `OLLAMA_HOST` - Ollama server URL (default: `http://localhost:11434`)\n- `OLLAMA_API_KEY` - API key for Ollama Cloud (required for cloud models)\n\n### Default Directories\n\n- Transcripts: `transcripts/`\n- Summaries: `summaries/`\n\n## Development\n\n### Setup Development Environment\n\n```bash\nuv sync\n```\n\n### Run from Source\n\n```bash\n# Run CLI\nuv run playlist-summarizer\n\n# Or run as module\nuv run python -m playlist_summarizer_cli\n```\n\n### Working with Individual Packages\n\n```bash\n# Work on core package\ncd packages/core\nuv sync\n\n# Work on CLI package\ncd packages/cli\nuv sync\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## Author\n\nAnthony Kovach - [aj@ajxd2.dev](mailto:aj@ajxd2.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajxd2%2Fplaylist-summarizer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajxd2%2Fplaylist-summarizer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajxd2%2Fplaylist-summarizer/lists"}