A Chrome extension that fact-checks Instagram Reels in real time using multimodal AI. It extracts video frames, transcribes audio, identifies health claims, and surfaces discrepancies — all while you scroll.
- The content script detects the active Reel and reads the video URL from the
<video>element. - It sends
REEL_DETECTED(withreelId,creator,videoUrl,durationMs) to the background service worker. - The background calls
POST /v1/analyze-reelon the local server. - The server uses
yt-dlpto download the video,ffmpegto extract up to 15 frames (every 2s), and optionally transcribes the audio via Groq Whisper. All of this is sent to Claude (vision) which returns:transcript[]— timestamped speechclaims[]— notable health/factual claims with reasoningdiscrepancies[]— mismatches between visuals, text, and audio
- Results are cached by
reelIdand broadcast to the content script and side panel. - The overlay and side panel render timestamp-synced transcripts, claim cards, and discrepancy alerts.
- Extension: Chrome MV3, React, TypeScript, Vite
- Server: Fastify, TypeScript, tsx
- AI: Claude Haiku (vision + analysis via Anthropic SDK), Groq Whisper (audio transcription, optional)
- Media: yt-dlp (download), ffmpeg (frame extraction + audio)
- UI Preview: Vite + React standalone app with mock data
extension/— MV3 extension (content script, background worker, overlay UI, side panel UI)server/— Fastify API (/v1/analyze-reel) + ffmpeg frame extraction + Claude vision clientpackages/preview/— Standalone UI preview with mockAnalyzeReelResponsedata
- Node.js 20+
- pnpm 9+
ffmpegon systemPATH— install guideyt-dlpon systemPATH— install guide- An
ANTHROPIC_API_KEY(required) - A
GROQ_API_KEY(optional — enables audio transcription)
Install system tools (macOS):
brew install ffmpeg yt-dlp1. Install dependencies:
pnpm install2. Configure environment:
cp .env.example .envEdit .env and fill in your keys:
ANTHROPIC_API_KEY=sk-ant-... # Required — Claude vision analysis
GROQ_API_KEY=gsk_... # Optional — audio transcription via Whisper
PORT=30013. Start the server:
cd server && pnpm dev4. Build the extension:
cd extension && pnpm build5. Load in Chrome:
- Go to
chrome://extensions - Enable Developer Mode (top right)
- Click Load unpacked and select the
extension/distfolder
6. Use it:
Open Instagram in Chrome and navigate to any Reel. The side panel will open automatically and populate with the analysis.
To see the UI with mock data:
cd packages/preview && pnpm devOpen http://localhost:5173 in your browser.
Request:
{
"reelId": "abc123",
"creator": "@creator",
"videoUrl": "https://instagram.com/reel/...",
"durationMs": 28400
}Response:
{
"reelId": "abc123",
"transcript": [{ "text": "line", "timestampMs": 2000 }],
"claims": [
{
"id": "claim-1",
"text": "claim text",
"reasoning": "why notable",
"authorSources": ["source mention"],
"timestampMs": 4000
}
],
"discrepancies": [
{
"description": "visual/text mismatch",
"frameTimestampMs": 6000,
"severity": "medium"
}
]
}Returns cached analysis if available, otherwise 404.