extract-gdrive-transcript
Extracts the full transcript of a Google Meet or other video recording on Google Drive via Chrome MCP.
Skill by RascalTwo
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/rascaltwo-extract-gdrive-transcript
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/extract-gdrive-transcript
What's inside
- Skill name
extract-gdrive-transcript- Description
- Extracts the full transcript of a Google Meet or other video recording on Google Drive via Chrome MCP. Use for a Drive recording URL, Meet recordings, meeting captions, or speaker-attributed meeting text, even if the user never says "transcript".
- License
- MIT
- Instructions
- 191 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Google Drive Video Transcript Extractor
If the recording is already in the steno catalog, use the `steno-transcripts` skill first instead of re-transcribing.
Extract full transcripts from video recordings on Google Drive using Chrome MCP. The transcript includes timestamps and speaker attribution, output as a WebVTT (.vtt) file.
This works because Google Drive's video player has a built-in Transcript panel that shows auto-generated captions with speaker names and timestamps. Rather than downloading the video and processing it offline, this skill reads the transcript directly from the browser — no OAuth, no FFmpeg, no video download.
**See also:** if the video file is already downloaded locally (not in the Drive browser player), use the `extract-video-subtitles` skill instead.
## Requirements
- **Chrome MCP** (Claude in Chrome) must be connected
- The user must be **logged into Google** in Chrome with access to the recording
- The recording must have **captions/subtitles** (Google Meet recordings have these by default)
## Input
A Google Drive recording URL. The user provides this as an argument:
```
$ARGUMENTS
```
If no URL is provided, ask the user for one. The URL looks like:
```
https://drive.google.com/file/d/{fileId}/view
```
## Workflow
### 1. Navigate and start playback
Navigate to the URL. Wait for the page to load and take a screenshot.
If you see a login or access denied screen, stop and tell the user they need to be logged into Google in Chrome.
The transcript panel often doesn't appear or populate until the video has started playing. Click the **play button** on the video player to start playback. Wait 3-5 seconds, then pause the video.
Take a screenshot. You should now see a "Transcript" bar near the top of the page.
### 2. Check whether the Transcript button is enabled
Even when a Transcript bar appears, it can be **disabled (greyed out)** — that means the recording has no captions/transcript at all and there is nothing to extract. Critically, the disabled button still satisfies a `find` query and can still be `left_click`'d, so you must check its enabled state explicitly. Visually, the disabled state shows muted/grey text instead of normal contrast; a screenshot alone is the human cue.
Programmatically, check via JavaScript before attempting to open the panel:
```javascript
const allButtons = Array.from(document.querySelectorAll('button'));
const t = allButtons.find(b => b.textContent.trim() === 'Transcript');
JSON.stringify({
found: !!t,
disabled: t?.disabled,
ariaDisabled: t?.getAttribute('aria-disabled'),
// any of these "true"/true means no transcript exists for this recording
});
```
If `disabled === true` or `ariaDisabled === "true"`, there is **no Google transcript to
extract** — stop the browser flow (do not attempt clicks, retry, or DOM discovery). But the
recording can still be transcribed by speech: tell the user, and offer the **ASR fallback** —
download the recording from Drive, then run the `transcribe-media` skill on the file:
```bash
~/.agents/skills/transcribe-media/transcribe.sh <downloaded-file> --format vtt
```
That yields a `.vtt` from the audio (no Google speaker names, but the words are there). Only
fall through to this when Google's own captions are genuinely absent.
### 3. Open the transcript panel
Click the **"Transcript" text** near the top-left of the page. This opens a panel on the right side showing timestamped entries with speaker names.
Take a screenshot to confirm the panel is visible. If it doesn't open:
- Try clicking the chevron arrow on the right side of the Transcript bar
- Try playing the video a bit longer, then retry
- If there's no Transcript bar at all, the recording doesn't have captions — tell the user
### 4. Discover the DOM structure
Google uses obfuscated CSS class names that change periodically. Instead of hardcoding them, discover the current class names by inspecting the page.
The transcript panel contains repeating entries, each with: a **timestamp element** (like "0:08"), a **text element** (containing the speaker name in parentheses followed by the spoken text), and sometimes a "Copy link" element.
Find the class names by searching for timestamp-like content:
```javascript
const allElements = document.querySelectorAll('*');
const timestampEls = [];
allElements.forEach(el => {
if (el.children.length === 0 && /^\d{1,2}:\d{2}$/.test(el.textContent.trim())) {
timestampEls.push({
className: el.className,
parentClassName: el.parentElement?.className,
siblingClasses: Array.from(el.parentElement?.children || []).map(c => c.className)
});
}
});
JSON.stringify({
found: timestampEls.length,
samples: timestampEls.slice(2, 5)
}, null, 2);
```
**Important:** Skip the first two results — they're usually the video player's time display, not transcript entries. The transcript entries are the ones where the parent class repeats consistently across many elements.
From the results, identify three class names:
- **ENTRY_CLASS** — the parent element that wraps each transcript entry
- **TIMESTAMP_CLASS** — the child element containing just the timestamp
- **TEXT_CLASS** — the sibling element containing speaker name + transcript text
The text element's content follows this pattern: `(Speaker Name)\nActual spoken text (Speaker Name)\nmore text`. The speaker name appears in parentheses and may repeat — it's a label, not part of the speech.
### 5. Extract and download
Using the discovered class names, extract all entries, convert to WebVTT, and trigger a browser download:From RascalTwo/ai-setup, MIT.
More from RascalTwo/ai-setup
- 0.603score
github-attach-media
RascalTwo
Upload an image, screenshot, or video to get a renderable GitHub user-attachments URL for a PR, issue, comment, or Projects card, including private repos (no…
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
ai-setup-audit
RascalTwo
Weekly interactive audit of the AI-agent setup shared across Claude Code and OpenAI Codex — AGENTS.md rules, skills, MCP servers, settings, subagents…
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
okta-api
RascalTwo
Call the Okta REST API to inspect or manage Okta resources (identity providers, users, groups, apps, policies, etc.).
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
model-real-things-3d
RascalTwo
Builds a lifelike 3D model (GLB/glTF) of a real physical object (a PC case, a router, a UPS, furniture) at its true size, and changes it later on request.
SkillAFreshness: A★ 2Claude Code +9 - 0.600score
browser-capture
RascalTwo
Saves screenshots, GIFs, or smooth video of a browser page to disk for docs, PRs, or reports.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
dredge
RascalTwo
Looks back over a thing's history since the last dredge (sessions, commits, what you pushed back on), judges it with plus-ultra, and brings you every…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
genui-viz
RascalTwo
Puts a generative UI card in front of the user mid-task (a floating panel glued to their terminal pane) and returns their answer as data: approve a risky…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
omnissa-horizon-vdi
RascalTwo
Operates a remote desktop through Omnissa Horizon Client on macOS, from Claude Code (computer-use MCP) or Codex (node_repl).
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
aws-creds
RascalTwo
Gets AWS credentials for any AWS account.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
diagnose-azure-container-app
RascalTwo
Diagnoses why an Azure Container App is failing to start by retrieving system events and application console logs.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
diagnose-terraform-unknown-error
RascalTwo
Investigates a Terraform provider "unknown error" or opaque API error by adding temporary debug logging to the failing workflow step, triggering a run, and…
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
documandments
RascalTwo
Documentation discipline from the Ten Commandments of Documentation.
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 24, 2026 (4 days ago)
- Last release
- Oct 24, 2026 (4 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/RascalTwo/ai-setup
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from RascalTwo
- 0.603score
okta-api
RascalTwo
Call the Okta REST API to inspect or manage Okta resources (identity providers, users, groups, apps, policies, etc.).
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
github-attach-media
RascalTwo
Upload an image, screenshot, or video to get a renderable GitHub user-attachments URL for a PR, issue, comment, or Projects card, including private repos (no…
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
ai-setup-audit
RascalTwo
Weekly interactive audit of the AI-agent setup shared across Claude Code and OpenAI Codex — AGENTS.md rules, skills, MCP servers, settings, subagents…
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
model-real-things-3d
RascalTwo
Builds a lifelike 3D model (GLB/glTF) of a real physical object (a PC case, a router, a UPS, furniture) at its true size, and changes it later on request.
SkillAFreshness: A★ 2Claude Code +9 - 0.600score
browser-capture
RascalTwo
Saves screenshots, GIFs, or smooth video of a browser page to disk for docs, PRs, or reports.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
diagnose-azure-container-app
RascalTwo
Diagnoses why an Azure Container App is failing to start by retrieving system events and application console logs.
SkillAFreshness: A★ 2Claude Code +9
Cite this page
extract-gdrive-transcript skill. Agent Mart. https://agentmart.dev/skills/rascaltwo-extract-gdrive-transcript (last updated 2026-10-24)