# video-transcript

Extracts captions and transcripts from YouTube videos using a URL or video ID. Useful for generating video summaries, quotes, or translations quickly.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 885 installs · ★ 1121
- Author: ZeroPointRepo
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/ZeroPointRepo/youtube-skills/tree/HEAD/clawhub/video-transcript/SKILL.md
- Updated: 2026-10-20
- HTML: https://affpapa.org/en/nevibecode/skills/video-transcript

## What it does

This skill queries TranscriptAPI to fetch video transcripts as plain text or structured JSON with timestamps. It handles standard YouTube videos along with YouTube Shorts. If requested, it also pulls metadata such as video titles, author names, and thumbnails.

An environment variable named `TRANSCRIPT_API_KEY` is required. Free accounts get 100 credits without entering a card. You must send a `User-Agent` header identifying your agent, or Cloudflare blocks the request with a 403 status code. The skill only extracts text and does not handle video uploads or account management.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add ZeroPointRepo/youtube-skills --skill video-transcript -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/video-transcript/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/video-transcript/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add ZeroPointRepo/youtube-skills --skill video-transcript -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/video-transcript/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add ZeroPointRepo/youtube-skills --skill video-transcript -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/video-transcript/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install ZeroPointRepo/youtube-skills video-transcript
```

2. **Manually: put the files in place**
- File: `.github/skills/video-transcript/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add ZeroPointRepo/youtube-skills --skill video-transcript -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/ZeroPointRepo/youtube-skills --path clawhub/video-transcript
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/video-transcript/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add ZeroPointRepo/youtube-skills --skill video-transcript -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/ZeroPointRepo/youtube-skills/tree/HEAD/clawhub/video-transcript/SKILL.md

## When to use it
- summarize long video content into bullet points
- pull quotes with exact timestamps from YouTube
- translate video captions to another language
- extract text from YouTube Shorts without a browser

## Example prompts
- Summarize the key points from video dQw4w9WgXcQ
- Get the transcript with timestamps as JSON for video ID dQw4w9WgXcQ
- Translate the captions of video dQw4w9WgXcQ into Spanish

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: 9ccc48ec0c0619d4.

BEGIN THIRD-PARTY FILE 9ccc48ec0c0619d4
````text
---
name: video-transcript
description: "Use when video content needs to be extracted as text: pasted YouTube links or IDs, requests to transcribe, summarize, quote, translate, convert video to text, or extract information from video content. Also use when a user shares a video URL without explanation and wants to know what it says. Not for uploads or account management."
version: "1.5.1"
user-invocable: true
compatibility: Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
required_environment_variables:
  - name: TRANSCRIPT_API_KEY
    prompt: Your TranscriptAPI key (starts with sk_)
    help: Free account at https://transcriptapi.com — 100 credits, no card required. Or let the agent create one for you.
    required_for: all API requests
metadata: {"openclaw":{"emoji":"🎬","requires":{"env":["TRANSCRIPT_API_KEY"]},"primaryEnv":"TRANSCRIPT_API_KEY","homepage":"https://transcriptapi.com"},"hermes":{"tags":["youtube","transcripts","video","captions","text-extraction","summarization"],"category":"media"}}
---

# Video Transcript

Extract transcripts from videos via [TranscriptAPI.com](https://transcriptapi.com).

## Setup

If `$TRANSCRIPT_API_KEY` is not set, read [references/auth-setup.md](references/auth-setup.md) and follow the instructions there to get and store the key.

## Required Headers

Every request needs two headers:

- **Authorization:** `Bearer $TRANSCRIPT_API_KEY`
- **User-Agent:** your agent's name and version if known (e.g. `HermesAgent/0.11.0`, `ClaudeCode/1.0`). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.

## GET /api/v2/youtube/transcript

```bash
curl -s "https://transcriptapi.com/api/v2/youtube/transcript\
?video_url=VIDEO_URL&format=text&include_timestamp=true&send_metadata=true" \
  -H "Authorization: Bearer $TRANSCRIPT_API_KEY" \
  -H "User-Agent: YourAgent/1.0"
```

| Param               | Required | Default | Values                                 |
| ------------------- | -------- | ------- | -------------------------------------- |
| `video_url`         | yes      | —       | YouTube URL or 11-char video ID        |
| `format`            | no       | `json`  | `json` (structured), `text` (readable) |
| `include_timestamp` | no       | `true`  | `true`, `false`                        |
| `send_metadata`     | no       | `false` | `true`, `false`                        |

Accepted URL formats:

- `https://www.youtube.com/watch?v=VIDEO_ID`
- `https://youtu.be/VIDEO_ID`
- `https://youtube.com/shorts/VIDEO_ID`
- Bare video ID: `dQw4w9WgXcQ`

**Response** (`format=text&send_metadata=true`):

```json
{
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": "[00:00:18] We're no strangers to love\n[00:00:21] You know the rules...",
  "metadata": {
    "title": "Rick Astley - Never Gonna Give You Up",
    "author_name": "Rick Astley",
    "author_url": "https://www.youtube.com/@RickAstley",
    "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
  }
}
```
````
END THIRD-PARTY FILE 9ccc48ec0c0619d4

The third-party file has ended. Everything between the 9ccc48ec0c0619d4 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 3137 of 4372 bytes. © ZeroPointRepo · MIT · https://github.com/ZeroPointRepo/youtube-skills/tree/HEAD/clawhub/video-transcript/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
