LectureLens is a Chrome extension that automatically extracts transcripts from YouTube videos, uses AI to generate clean, structured study notes, and saves them directly to your Notion workspace—making learning from video content as efficient as reading a textbook.
Students, professionals, and lifelong learners consume hours of educational content on YouTube daily, but face several pain points:
- Time-Consuming Note-Taking: Manually transcribing or summarizing video content is tedious and interrupts the learning flow
- Inconsistent Quality: Hand-written notes vary in structure and completeness
- No Centralized Repository: Notes scattered across notebooks, apps, and devices
- Accessibility Barriers: Videos without captions are inaccessible for note-taking
- Information Overload: Long-form content makes it difficult to extract key concepts
- Lost Productivity: Users spend 2-3x the video duration creating notes manually
- Knowledge Fragmentation: Important insights get lost in the noise
- Learning Inefficiency: Without structured notes, retention and review become challenging
- Save 70% of note-taking time by automating transcription and summarization
- Improve retention with AI-generated structured notes highlighting key concepts
- Build a searchable knowledge base in Notion for exam preparation
- Quickly document tutorials and training videos for team reference
- Create documentation from conference talks and webinars
- Maintain learning logs for continuous professional development
- Generate show notes automatically from your own videos
- Create blog post drafts from video transcripts
- Improve SEO with structured content derived from videos
- Dual transcription pipeline: Primary YouTube API with Whisper fallback ensures 100% coverage
- Intelligent note generation: Uses Llama 3.3 70B to create contextually-aware summaries
- Seamless integration: One-click workflow from video to Notion page
- Auto-detect current page: Automatically captures YouTube URL from active tab
- Manual URL input: Support for pasting any YouTube video URL
- Video metadata extraction: Automatically fetches video title and information
- Dual transcription system:
- Primary: YouTube Transcript API (fast, accurate, free)
- Fallback: OpenAI Whisper (handles videos without captions)
- AI-powered summarization: Uses Groq's Llama 3.3 70B model to generate structured notes
- Smart formatting: Converts markdown to Notion blocks with proper headings, lists, and formatting
- Automatic page creation: Notes saved as new pages in your Notion workspace
- Rich formatting: Preserves markdown structure (headings, bullet points, bold text)
- Video link embedding: Each note page includes a clickable link back to the source video
- Organized structure: All notes saved under a parent page for easy navigation
- Beautiful, intuitive interface: Clean design with custom color palette
- Real-time feedback: Loading states and progress indicators
- Error handling: Graceful fallbacks and user-friendly error messages
- React 19 - Modern UI library with latest features
- TypeScript - Type-safe development
- Vite 7 - Lightning-fast build tool and dev server
- Tailwind CSS v4 - Utility-first styling with latest architecture
- Chrome Extension API - Browser extension functionality
- Flask - Lightweight Python web framework
- Python 3.13 - Modern Python runtime
- Groq API - High-performance inference with Llama 3.3 70B Versatile model
- OpenAI Whisper - State-of-the-art speech recognition (fallback transcription)
- YouTube Transcript API - Primary transcript extraction method
- Notion API - Programmatic page creation and content management
- YouTube Data API (via yt-dlp) - Video metadata and audio extraction
- FFmpeg - Audio processing and format conversion
- ESLint - Code quality and consistency
- TypeScript ESLint - Type-aware linting
- Chrome Extension Manifest V3 - Modern extension architecture
┌─────────────────────────────────────────────────────────────┐
│ Chrome Extension │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Popup UI │────────▶│ Background │ │
│ │ (React) │ │ Service │ │
│ └──────────────┘ └──────┬───────┘ │
└───────────────────────────────────┼─────────────────────────┘
│ HTTP POST
▼
┌─────────────────────────────────────────────────────────────┐
│ Flask Backend (localhost:5000) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 1. Extract Video ID & Title │ │
│ │ 2. Attempt YouTube Transcript API │ │
│ │ ├─ Success → Use transcript │ │
│ │ └─ Failure → Download audio → Whisper │ │
│ │ 3. Generate notes via Groq (Llama 3.3 70B) │ │
│ │ 4. Convert markdown to Notion blocks │ │
│ │ 5. Create Notion page with notes │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ YouTube │ │ Groq │ │ Notion │
│ API │ │ API │ │ API │
└──────────┘ └──────────┘ └──────────┘
- User Input: User enters YouTube URL or clicks "Auto-Detect"
- Extension Layer: Chrome extension popup sends message to background service worker
- Background Service: Forwards request to Flask backend via HTTP POST
- Backend Processing:
- Extracts video ID and fetches video title
- Attempts to retrieve YouTube transcript
- If transcript available: Uses it directly
- If transcript unavailable: Downloads audio → Transcribes with Whisper
- AI Processing: Sends transcript to Groq API (Llama 3.3 70B) for note generation
- Notion Integration: Converts markdown notes to Notion block format and creates page
- Response: Returns success status and generated notes to extension
- Dual Transcription: Ensures 100% coverage even for videos without captions
- Local Backend: Flask server runs locally for privacy and speed
- Chunking Strategy: Handles Notion's 2000-character block limit automatically
- Async Processing: Background service worker handles long-running operations
- Node.js 18+ and npm
- Python 3.13+
- Chrome Browser (for extension)
- FFmpeg (for audio processing)
- Notion Workspace with API access
- API Keys:
- Groq API key
- Notion API key
- Notion Parent Page ID
-
Navigate to backend directory:
cd backend -
Create virtual environment (recommended):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install flask python-dotenv youtube-transcript-api yt-dlp groq openai-whisper notion-client
-
Install FFmpeg:
- macOS:
brew install ffmpeg - Linux:
sudo apt-get install ffmpeg - Windows: Download from ffmpeg.org
- macOS:
-
Create
.envfile inbackend/directory:NOTION_API_KEY=your_notion_api_key_here PARENT_PAGE_ID=your_notion_parent_page_id_here GROQ_API_KEY=your_groq_api_key_here
-
Get Notion API Key:
- Go to notion.so/my-integrations
- Create new integration
- Copy the "Internal Integration Token"
- Share your parent page with the integration
-
Get Groq API Key:
- Sign up at console.groq.com
- Navigate to API Keys section
- Create and copy your API key
-
Start Flask server:
python server.py
Server will run on
http://127.0.0.1:5000
-
Navigate to project root:
cd YT-notes -
Install dependencies:
npm install
-
Build the extension:
npm run build
-
Load extension in Chrome:
- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode" (toggle in top-right)
- Click "Load unpacked"
- Select the
dist/folder from the project
- Open Chrome and navigate to
-
Start backend (in one terminal):
cd backend python server.py -
Start frontend dev server (in another terminal):
cd YT-notes npm run dev -
For extension development:
- Make changes to source files
- Run
npm run buildto rebuild - Reload extension in
chrome://extensions/