Paste any YouTube URL β get an intelligent summary in seconds.
Supports any language Β· Full playlists Β· 4 summary styles Β· Timestamped key moments
People waste hours watching long YouTube videos just to extract a few key points. Creators post hour-long tutorials, lectures, and podcasts β but viewers often only need the core idea in 2 minutes.
YouTube Summarizer solves this by turning any YouTube video or playlist into a clean, structured summary β in seconds, in any language.
- 4 Summary Styles β Bullet points, short (3β5 sentences), detailed, or timestamped key moments
- Multilingual β Auto-detects spoken language (Urdu, Hindi, Spanish, etc.), always outputs English
- Playlist Support β Summarizes up to 10 videos in a playlist with a combined overview
- Smart Transcript Pipeline β Uses YouTube captions first (instant), falls back to Groq Whisper AI only when needed
- Long Video Support β Automatically chunks transcripts so even hour-long videos work
- In-Memory Cache β Same video won't be re-processed, responses are instant on repeat
- Download Summaries β Save any summary as a
.txtfile
YouTube URL
β
βΌ
FastAPI Backend (Render)
β
βββ Step 1: youtube-transcript-api βββΊ Captions found β instant transcript β
β (no download, no FFmpeg, works everywhere)
β
βββ Step 2: Groq Whisper (fallback) βββΊ No captions? Download audio β transcribe
β
βΌ
Chunk long transcripts (prevents LLM context overflow)
β
βΌ
Groq LLaMA 3.3 70B (summarize with chosen style)
β
βΌ
React Frontend (Vercel) βββΊ Display + Download
Why not just use yt-dlp for everything?
YouTube actively blocks audio downloads from cloud server IPs (Render, Railway, etc.). Using youtube-transcript-api as the primary method means the app reliably works in production. Whisper is kept as a real fallback for videos that genuinely have no captions.
| Layer | Technology |
|---|---|
| Frontend | React 18 + Vite |
| Backend | FastAPI + Python 3.11 |
| Transcription (primary) | youtube-transcript-api β no download needed |
| Transcription (fallback) | Groq Whisper whisper-large-v3 |
| Summarization | Groq LLaMA 3.3 llama-3.3-70b-versatile |
| Backend hosting | Render.com (Docker) |
| Frontend hosting | Vercel |
youtube-summarizer/
βββ backend/
β βββ main.py # FastAPI app, routes, in-memory cache
β βββ pipeline/
β β βββ transcript.py # youtube-transcript-api (primary method)
β β βββ whisper_fallback.py # Groq Whisper (fallback for no-caption videos)
β β βββ summarizer.py # LLaMA 3.3 + transcript chunking logic
β β βββ utils.py # URL parsing, video ID extraction, playlist helpers
β βββ requirements.txt
β βββ Dockerfile
β βββ .env.example
βββ frontend/
β βββ src/
β β βββ App.jsx # Main UI component
β β βββ App.css # Dark theme styling
β βββ package.json
β βββ .env.example
βββ render.yaml # Render deployment config
βββ README.md
- Python 3.11+
- Node.js 18+
- Groq API key (free)
git clone https://github.com/muneeracodes/youtube-summarizer.git
cd youtube-summarizercd backend
python -m venv venv
# Windows
venv\Scripts\activate
# Mac/Linux
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env β add your GROQ_API_KEY
uvicorn main:app --reload
# β http://localhost:8000cd frontend
npm install
cp .env.example .env.local
# Edit .env.local β set VITE_API_URL=http://localhost:8000
npm run dev
# β http://localhost:5173- Go to render.com β New β Web Service
- Connect your GitHub repo
- Set Root Directory β
backend - Set Environment β
Docker - Add env var:
GROQ_API_KEY= your key - Add env var:
ALLOWED_ORIGINS= your Vercel URL - Deploy β copy the service URL
- Go to vercel.com β Add New Project β import repo
- Set Root Directory β
frontend - Add env var:
VITE_API_URL= your Render URL - Deploy
| Variable | Required | Description |
|---|---|---|
GROQ_API_KEY |
β | Free at console.groq.com |
ALLOWED_ORIGINS |
β | Your Vercel URL (for CORS) |
| Variable | Required | Description |
|---|---|---|
VITE_API_URL |
β | Your Render backend URL |
{
"url": "https://www.youtube.com/watch?v=VIDEO_ID",
"style": "bullets"
}Styles: bullets Β· short Β· detailed Β· timestamps
Response:
{
"video_id": "VIDEO_ID",
"title": "Video Title",
"summary": "- Key point one\n- Key point two...",
"transcript_method": "captions",
"cached": false
}{
"url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"style": "short"
}Returns { "status": "ok" } β used by Render for health checks.
