Extract, timestamp, and organize transcripts from YouTube videos and playlists. Powered by LLMs for intelligent summarization.
- YouTube Playlists — Process entire playlists in one command; each video gets its own transcript file.
- Timestamps — Include timestamps in transcripts for easy reference (
--timestamps). - Organized Output — Creates a folder per playlist/video with individual
.txtfiles named after each video title. - Combined Transcripts — Generates an
all_transcripts.txtmerging every video in a playlist. - Multiple Interfaces — CLI, interactive terminal UI, Python UI, Electron GUI, and Chrome/Firefox extension.
- LLM Summarization — Summarize with OpenAI, Gemini, Claude, Groq, local models, or OpenRouter free tier.
- Media-Aware — Auto-detects video/audio vs page content; supports podcasts, HLS, local files.
- Slide Extraction — Screenshot + OCR + timestamped cards for video sources.
- Node.js 24+
- yt-dlp (required for YouTube playlist/video extraction)
- ffmpeg (required for slides and media transcription)
# Install yt-dlp and ffmpeg (Windows — winget)
winget install yt-dlp ffmpeg
# macOS (Homebrew)
brew install yt-dlp ffmpeg# Clone the repo
git clone https://github.com/appo02/GymBro.git
cd GymBro
# Install dependencies
npm install
# or
pnpm install
# Build
pnpm buildpnpm summarize "https://youtu.be/dQw4w9WgXcQ" --extract --timestampspnpm extract:playlist "https://www.youtube.com/playlist?list=PLxxxxxx"This creates:
outputs/
└── Playlist Title/
├── Video 1 Title.txt
├── Video 2 Title.txt
├── Video 3 Title.txt
└── all_transcripts.txt ← combined file
# Node.js terminal UI
pnpm extract:ui-simple
# Python UI (no Node prompts dependency needed)
python scripts/playlist_ui.py
# Windows batch shortcut
scripts\playlist_ui.bat
# Electron GUI
pnpm start:guipnpm summarize "https://example.com" --model google/gemini-2.5-flashpnpm summarize "https://example.com" --length long
pnpm summarize "https://example.com" --length 20k| Input | Example |
|---|---|
| YouTube video | https://youtu.be/dQw4w9WgXcQ |
| YouTube playlist | https://www.youtube.com/playlist?list=... |
| Web page | https://example.com/article |
| Local file | /path/to/file.pdf |
| Audio/Video | /path/to/audio.mp3 |
| Podcast RSS | https://feeds.npr.org/500005/podcast.xml |
| HLS stream | https://example.com/master.m3u8 |
| Stdin | echo "text" | pnpm summarize - |
One-click summarizer for the current tab with a Side Panel/Sidebar.
- Install the CLI globally:
npm i -g @steipete/summarize - Install the extension from the Chrome Web Store
- Open Side Panel → copy token → run:
summarize daemon install --token <TOKEN>
Set your LLM API key:
# Environment variable (pick one)
export OPENAI_API_KEY=sk-...
export GEMINI_API_KEY=...
export GROQ_API_KEY=...
export OPENROUTER_API_KEY=...Or use the free tier:
summarize refresh-free # needs OPENROUTER_API_KEY
summarize "https://example.com" --model freescripts/
├── playlist-extract.js # Core playlist extraction logic
├── playlist-ui-simple.js # Interactive terminal UI (readline)
├── playlist-ui.js # Prompts-based terminal UI
├── playlist_ui.py # Python alternative UI
└── playlist_ui.bat # Windows batch launcher
apps/
├── gui/ # Electron desktop GUI
└── chrome-extension/ # Browser extension (Chrome + Firefox)
src/ # CLI + library source (TypeScript)
packages/core/ # Shared core library
outputs/ # Generated transcript files
| Command | Description |
|---|---|
pnpm build |
Build the project |
pnpm summarize <url> |
Summarize a URL (dev mode) |
pnpm extract:playlist <url> |
Extract playlist transcripts |
pnpm extract:ui-simple |
Interactive terminal extractor |
pnpm start:gui |
Launch Electron GUI |
pnpm test |
Run tests |
pnpm check |
Format + lint + typecheck + test |
- Playlist detection —
yt-dlpfetches playlist metadata (video titles, IDs, URLs). - Per-video extraction — Each video is processed through the summarize CLI with
--extract --timestamps. - File organization — Outputs are saved to
outputs/<playlist-name>/<video-title>.txt. - Combined file — All transcripts are concatenated into
all_transcripts.txtwith headers.
MIT