Chrome extension (Manifest V3) that captures visible Google Meet live captions in real time and exports them to text.
It does not use Meet APIs, microphone capture, or any backend service. It reads caption text that is already rendered in the Meet captions panel.
Active development.
- Real-time caption capture from Meet captions region.
- Speaker + text extraction using DOM structure patterns.
- Auto-enable captions when capture starts.
- Deduplication and same-speaker continuation merging.
- Session-based storage: each meeting is saved as a separate transcript session.
- Global transcript hub with:
- all sessions list
- per-session copy/download
- all-sessions copy/download
- transcript import from
.txt(disabled while live capture is running)
- Automation toggles in popup:
- auto-start capture when Meet is detected
- auto-save transcript on stop/leave/close (silent save)
- AI handoff from transcript page to:
- ChatGPT
- Claude
- Gemini
- Custom AI prompt buttons (persisted in local storage).
Click the extension icon while using Meet (or anytime) to open the popup.
Buttons
- Start capture — While you are on a Google Meet tab, starts recording captions into a session. The extension also tries to turn on Meet captions (CC) if they are off.
- Stop capture — Stops recording for the current flow; the session stays in the Transcript Hub.
- Open transcript hub — Opens the full Transcript Hub page in a new tab (all sessions, import/export, AI handoff).
- Download current session — Downloads the transcript for the active Meet tab’s current session as a
.txtfile (tab-separated format).
Automation toggles
- Auto-start on Meet — When enabled, capture starts automatically when you open or land on Google Meet (same idea as pressing Start capture).
- Auto-save on stop/leave — When enabled, the extension saves the current session as a
.txtfile when you stop capture, leave Meet, close the Meet tab, or similar lifecycle events (silent download, no extra prompt if the browser allows it).
Typical flow
- Join or start a meeting at
https://meet.google.com/. - Click Start capture (or rely on auto-start).
- Keep captions visible in Meet.
- Click Stop capture when you are done, or leave the meeting.
- Use Open transcript hub to review everything, copy, download, import, or send text to an AI provider.
The Transcript Hub is a dedicated page (opened from Open transcript hub in the popup). Everything is stored locally in the browser unless you explicitly send content to an AI site.
Overview
- Summary at the top: how many sessions you have, total lines, and whether any live capture is running.
- Sessions are grouped by meeting (meeting code from the URL) and time. Each session shows its lines with speaker and time, and a Live / Saved / Imported style status when relevant.
Global actions
- Copy all sessions — Copies a readable plain-text view of every session to the clipboard.
- Download all sessions — Downloads one
.txtfile that contains every session (with session headers). - Import transcript — Imports a
.txtfile (same tab-separated export format or simple lines) as a separate Imported session.
Per-session actions
- Copy — Copy that session only.
- Download — Save that session as
.txt. - Use in AI — Selects that session for the AI block below (same as picking it in the session dropdown).
- Remove / Close — Removes the session from storage. If it was never downloaded or auto-saved, you get a choice to save first or remove without saving.
AI Assistant handoff
- Choose Provider (ChatGPT, Claude, or Gemini) and Session.
- Preset buttons run common prompts (summaries, action items, etc.); Add your prompt lets you save custom buttons.
- Handoff opens the provider in a new tab. For ChatGPT, short payloads may open with a
?q=URL so the prompt is prefilled; longer transcripts use the paste helper (and clipboard fallback if the site UI changes).
Export format (popup downloads and hub downloads use this TSV style):
ISO_TIMESTAMP<TAB>SPEAKER<TAB>TEXT
Example:
2025-02-03T14:30:01.234Z Speaker Name Hello, this is caption text.
- Clone this repository.
- Open
chrome://extensions. - Enable
Developer mode. - Click
Load unpackedand select this repository folder.
- The extension stores pending prompt+transcript in
chrome.storage.local. - It opens the selected AI provider in a new tab.
ai-helper.jstries to insert text and submit.- If provider DOM changed and auto-submit fails, text is copied to clipboard as fallback.
Supported providers in current code:
https://chat.openai.com/*https://chatgpt.com/*https://claude.ai/*https://gemini.google.com/*
content.js- Locates Meet caption container:
[role="region"][aria-label="Captions"] - Parses caption rows using profile image + sibling structure
- Stabilizes rows (
STABILITY_MS) before commit - Deduplicates with seen-hash TTL cache (
SEEN_TTL_MS) - Sends
LINEandUPDATE_LAST_LINEmessages - Sends capture lifecycle signals (
CAPTURE_STARTED/CAPTURE_STOPPED)
- Locates Meet caption container:
background.js- Maintains session store in
chrome.storage.local - Tracks active capture per tab and session rotation on meeting changes
- Handles auto-start, auto-save, imports, and downloads
- Maintains session store in
popup.js- Start/stop capture
- Status/session count
- Auto-start and auto-save toggles
transcript.js- Renders all sessions grouped
- Copy/download/upload
- AI provider + prompt controls
manifest.json: extension config, permissions, content scripts, service workercontent.js: Meet caption capture/parsingbackground.js: transcript storage + download + runtime APIpopup.html,popup.js,styles.css: extension popup UItranscript.html,transcript.js: transcript page and AI controlsai-helper.js: AI site content script for paste/submitdefault-prompts.json: built-in AI prompt presetsuser-prompts.json: optional seed file for custom prompts
storage: session data, capture state, settings, AI preferencesdownloads: save transcript.txtclipboardWrite: fallback copy during AI handoffactiveTab: popup actions on current tabtabs: detect tab lifecycle for auto-start/session-finalizationhost_permissions:https://meet.google.com/*https://lh3.googleusercontent.com/*https://chat.openai.com/*https://chatgpt.com/*https://claude.ai/*https://gemini.google.com/*
Captions not detected, turn CC on- Ensure Meet captions are enabled and visible.
- Reload Meet tab and restart capture.
- Duplicate/split lines
- Capture uses row stabilization and merge logic; share a sample transcript in an issue if reproducible.
- AI auto-paste fails
- Provider UI likely changed; use clipboard fallback and file an issue.
- Zero-secrets design: this project must run locally without API keys, access tokens, or backend credentials.
- No microphone or audio recording.
- No backend upload by this extension.
- Data stays in browser local extension storage unless you explicitly send content to an AI website.
- Contributions that introduce mandatory server-side dependencies or required secrets are out of scope.
See SECURITY.md for vulnerability reporting.
See CONTRIBUTING.md.
Create a package locally:
node ./scripts/release/package-extension.jsOutput:
dist/meet-live-caption-saver-v<manifest.version>.zip
Platform-specific scripts are also available:
- Windows:
./scripts/release/package-extension.ps1 - Linux/macOS:
./scripts/release/package-extension.sh
Automated release flow:
- Bump
versioninmanifest.json. - Commit and tag (
vX.Y.Z). - Push branch and tag.
- GitHub Actions workflow
Release Packagebuilds ZIP and attaches it to the GitHub Release.
See CODE_OF_CONDUCT.md.
See LICENSE.
- Use at your own risk.
- You are responsible for complying with your organization policy and Google Meet terms.
- Not affiliated with Google or Google Meet.

