Unlimited, batch transcribe YouTube videos and playlists into accurate text in any language in just seconds.
Transcribe. Summarize. Translate. Chat.
An AI-powered video analysis tool that transcribes, summarizes, translates, and provides interactive chat about YouTube videos using Google Gemini API and multilingual AI models.
- π₯ YouTube Transcription: Extract transcripts using local Whisper AI model (no API keys needed!)
- β±οΈ Real-time Progress: Server-Sent Events (SSE) for live transcription progress updates
- π AI Summarization: Generate summaries using Gemini AI or multilingual mBART models
- π Keyword Extraction: Automatically extract key topics and keywords (via Python backend)
- π Multilingual Translation: Translate content into 15+ languages
- π¬ Interactive Chat: Ask questions about video content with AI-powered responses
- π¨ Modern UI: Beautiful, responsive interface with dark mode support
- π GPU Acceleration: Automatic GPU detection and utilization for faster processing
This project consists of two main components:
- Frontend (React + TypeScript + Vite): User interface
- Python Backend (
backend/app.py): Provides video transcription, multilingual summarization, and keyword extraction
π For detailed system architecture documentation, see docs/ARCHITECTURE.md
- Node.js 18+ (for frontend only)
- Python 3.10+ (required for backend - transcription, summarization, and keywords)
- FFmpeg (required for audio processing)
- Gemini API Key (optional - only needed for translation and chat features)
Get TubeScribe AI up and running in minutes! Follow these steps:
git clone https://github.com/Duzttt/TubeScribe-AI.git
cd tubescribe-aiThe Python backend handles transcription, summarization, and keyword extraction using local AI models (no API keys needed for these features).
Check Prerequisites:
- β
Python 3.10+ installed (
python --version) - β
FFmpeg installed (
ffmpeg -version)- Windows:
winget install ffmpegor download from ffmpeg.org and add to PATH - macOS:
brew install ffmpeg - Linux:
sudo apt install ffmpeg(Ubuntu/Debian) orsudo yum install ffmpeg(RHEL/CentOS)
- Windows:
Choose Your Setup Method:
π Option A: Automated Scripts (Recommended - Easiest)
Windows (PowerShell):
.\scripts\start-python-backend.ps1Windows (CMD):
scripts\start-python-backend.batLinux/Mac:
chmod +x scripts/start-python-backend.sh
./scripts/start-python-backend.shNote: If you encounter permission errors on Windows:
.\scripts\fix-permissions.ps1π§ Option B: Manual Setup
# Create virtual environment (recommended)
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Start the server (from project root)
cd backend
uvicorn app:app --host 0.0.0.0 --port 8000 --reloadπ³ Option C: Docker
# Build the image (from project root)
docker build -f backend/Dockerfile -t tubescribe-python-backend backend
# Run the container
docker run -p 8000:8000 --memory="4g" tubescribe-python-backendVerify Backend is Running:
- Open
http://localhost:8000in your browser - You should see a JSON response with service info and model status
- Check
http://localhost:8000/health- should return{"status": "healthy"}
β° First Run: The backend will automatically download AI models (~2-3GB) on first startup. This may take several minutes.
Install Dependencies:
cd frontend
npm installConfigure Environment Variables:
Create a .env.local file in the frontend directory:
VITE_API_KEY=your_gemini_api_key_hereNote: The Gemini API key is optional. You need it only for:
- Translation features
- Interactive chat
Transcription and summarization work without it (uses local Python backend).
Get a Gemini API Key (Optional):
- Visit Google AI Studio
- Create a new API key
- Add it to
frontend/.env.local
Start Development Server:
cd frontend
npm run devThe frontend will be available at http://localhost:5173
-
Backend Check:
- Visit
http://localhost:8000- should show service info - Visit
http://localhost:8000/health- should return{"status": "healthy"}
- Visit
-
Frontend Check:
- Open
http://localhost:5173in your browser - You should see the TubeScribe AI interface
- Open
-
Test Transcription:
- Paste a YouTube URL in the input field
- Click "Transcribe"
- Wait for the transcript to appear (first run may take longer as models load)
- π Detailed Setup: See docs/PYTHON_BACKEND_README.md for advanced configuration
- π GPU Setup: See docs/GPU_SETUP.md to enable GPU acceleration
- π§ Model Options: See docs/MODEL_OPTIONS.md for alternative AI models
- β Troubleshooting: Check the Troubleshooting section below
VITE_API_KEY=your_gemini_api_key_hereThe Python backend can be configured via environment variables (optional):
PORT=8000
HOST=0.0.0.0
SUMMARIZATION_MODEL=facebook/mbart-large-50-many-to-many-mmt # Optional: change summarization modelAvailable Summarization Models:
facebook/mbart-large-50-many-to-many-mmt(default, multilingual, 50+ languages)facebook/bart-large-cnn(English only, faster, smaller)google/pegasus-xsum(English, abstractive summaries)t5-baseort5-large(General purpose, multilingual with proper tokenizer)
-
Transcription:
- Python backend downloads audio from YouTube using yt-dlp
- Whisper AI model transcribes the audio locally (no API keys needed!)
- Progress is tracked in real-time via Server-Sent Events (SSE)
- Transcripts include timestamps for easy navigation
-
Summarization:
- Uses Python backend with mBART model for multilingual summarization (50+ languages)
- KeyBERT extracts key topics and keywords from transcripts
- All processing happens locally - no external API calls needed
-
Translation: Uses Gemini API to translate transcripts/summaries (optional - requires API key)
-
Chat: Uses Gemini API with video context for interactive Q&A (optional - requires API key)
tubescribe-ai/
βββ backend/ # Python backend
β βββ app.py # FastAPI application
β βββ summary.py # Summarization service
β βββ requirements.txt # Python dependencies
β βββ Dockerfile # Docker configuration
β βββ test_tubescribe.py # Test suite
βββ frontend/ # React frontend
β βββ components/ # React components
β β βββ ChatInterface.tsx
β β βββ KeywordsDisplay.tsx
β β βββ Menu.tsx
β β βββ ResultCard.tsx
β β βββ YouTubeInput.tsx
β βββ services/ # Frontend services
β β βββ geminiService.ts
β β βββ summarizationService.ts
β βββ App.tsx # Main app component
β βββ index.tsx # Entry point
β βββ package.json # Frontend dependencies
β βββ vite.config.ts # Vite configuration
βββ docs/ # Documentation
β βββ GPU_SETUP.md
β βββ MODEL_OPTIONS.md
β βββ ... (other docs)
βββ scripts/ # Helper scripts
β βββ start-python-backend.sh
β βββ start-python-backend.bat
βββ README.md
GET /- Service info and model statusGET /health- Health check endpointPOST /api/transcribe- Transcribe YouTube video (returns transcript with timestamps)GET /api/progress/{video_id}- Get transcription progress (polling endpoint)GET /api/progress/{video_id}/stream- Server-Sent Events (SSE) stream for real-time progress updatesPOST /summarize- Summarize text and extract keywords (multilingual support)
See docs/PYTHON_BACKEND_README.md for detailed API documentation.
# Build frontend
cd frontend
npm run build
# The built files will be in the frontend/dist/ directoryThe models used in this project do not support Malay language. While Malay may appear in some language lists, the underlying AI models (mBART-50, BART, and Whisper) do not provide reliable support for Malay transcription, summarization, or translation. Users processing Malay content may experience reduced accuracy, poor summarization results, or translation errors.
For more details, see docs/MODEL_OPTIONS.md.
- See docs/PYTHON_BACKEND_README.md for detailed troubleshooting
- Ensure you have at least 4GB RAM available (8GB+ recommended for optimal performance)
- First run will download ~2-3GB of model files (Whisper + mBART + KeyBERT)
- GPU setup: See docs/GPU_SETUP.md for CUDA installation and configuration
- Model options: See docs/MODEL_OPTIONS.md for alternative model configurations
- Ensure the Python backend is running on port 8000
- Check that FFmpeg is installed and accessible in your PATH
- Verify GPU availability with
python check_gpu.py(GPU speeds up transcription significantly) - Some videos may be unavailable or blocked (403 errors) - the backend will try multiple strategies automatically
- First transcription may take longer as models load into memory
- For long videos, transcription can take 1-2x the video duration on CPU, much faster on GPU
- Clear browser cache
- Check browser console for errors
- Ensure all environment variables are set correctly
[Your License Here]
Contributions are welcome! Please feel free to submit a Pull Request.