# Video Transcripts

Transcribe a supplied local or linked video with Gemini and check the transcript...

- Repository: https://github.com/udecode/dotai (1161 stars)
- Category: Git and review
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add udecode/dotai --skill video-transcripts -g -a claude-code -y`
Codex: `npx skills add udecode/dotai --skill video-transcripts -g -a codex -y`
Cursor: `npx skills add udecode/dotai --skill video-transcripts -g -a cursor -y`
Gemini CLI: `npx skills add udecode/dotai --skill video-transcripts -g -a gemini-cli -y`

## Description

Transcribe a supplied local or linked video with Gemini and check the transcript against one frame per second, when a recording's contents are needed as evidence, such as a bug recording on an issue, PR or comment, or a question about what a video shows.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Video Transcripts

## Quick Start

Run the helper once per relevant video. `<skill>` is this skill's directory:

```bash
bash <skill>/scripts/generate_video_transcript.sh \
  "https://uploads.linear.app/.../screen-recording.mov" \
  --title "PDF preview hyperlinks trigger leave-page modal"
```

Or for a GitHub attachment:

```bash
bash <skill>/scripts/generate_video_transcript.sh \
  "https://github.com/user-attachments/assets/..." \
  --title "Slash menu loses selection after confirm"
```

Or for a Screencastify watch page:

```bash
bash <skill>/scripts/generate_video_transcript.sh \
  "https://app.screencastify.com/watch/..." \
  --title "Bulk send expands filtered recipients"
```

Or for a local file:

```bash
bash <skill>/scripts/generate_video_transcript.sh \
  "/absolute/path/to/video.mov" \
  --title "Preview hyperlink exits workflow"
```

For auth-gated Linear uploads, the helper automatically retries with cookies from the local Linear desktop app on macOS. For private GitHub asset URLs, it retries with `GITHUB_TOKEN`, `GH_TOKEN`, or `gh auth token` when available.

The helper also cuts the video into one frame per second and prints `Frames: <dir>` on stderr. `<dir>/frames/tSSSS.png` is the frame at second SSSS, so `[01:12]` is `t0072.png`, and each `<dir>/sheet-SSSS-SSSS.png` shows the nine seconds its name spans in one image. Pass `--frames <dir>` to choose the directory. For a local video without Gemini, run `bash <skill>/scripts/video_frames.sh <video> --output <dir>`.

The transcript is a draft until Workflow step 3 checks it against the frames.

## Use This When

- A GitHub or Linear issue, PR, or comment includes a screen recording.
- An attachment URL points to `uploads.linear.app`.
- An attachment URL points to a GitHub attachment or private GitHub asset host.
- A tracker links to a public Screencastify watch page.
- You need timeline-style transcript lines, not a vague summary.
- You want the result in this exact XML shape:

The rest: https://github.com/udecode/dotai/blob/HEAD/skills/video-transcripts/SKILL.md
