一键导入
youtube-transcriber
Capture transcripts from YouTube videos. Uses YouTube captions when available, falls back to local Whisper transcription.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Capture transcripts from YouTube videos. Uses YouTube captions when available, falls back to local Whisper transcription.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.
Get clean, LLM-ready transcripts from any YouTube video. No timestamps, no clutter — just the text, ready to paste into any AI workflow. Falls back to local Whisper when captions aren't available.
基于 SOC 职业分类
| name | youtube-transcriber |
| description | Capture transcripts from YouTube videos. Uses YouTube captions when available, falls back to local Whisper transcription. |
| emoji | 📝 |
Capture transcripts from any YouTube video URL. The service fetches official YouTube captions when available, or transcribes locally using Whisper.
Use when the user wants to:
Before making any API calls, check if the service is available:
curl -s http://127.0.0.1:19720/api/health | jq -r '.status'
"healthy" — you're ready to go, skip to the API section."unhealthy" — check .checks[] for which component failed.The service requires these system dependencies:
Install system dependencies (macOS):
brew install yt-dlp ffmpeg
Install system dependencies (Ubuntu/Debian):
sudo apt install ffmpeg
pip install yt-dlp
Then clone and set up the service:
git clone https://github.com/lifesized/youtube-transcriber.git
cd youtube-transcriber
npm run setup # Installs deps, creates Python venv with Whisper, initializes database
npm run dev # Starts the service at http://127.0.0.1:19720
npm run setup handles everything: Node dependencies, Python virtual environment, Whisper installation, Prisma database initialization, and .env configuration.
If the service was previously set up but isn't running:
cd youtube-transcriber
npm run dev
After starting, confirm everything is working:
curl -s http://127.0.0.1:19720/api/health | jq .
All checks should show "status": "pass". If any show "fail", run npm run test:setup for detailed diagnostics.
Base URL: http://127.0.0.1:19720
curl -X POST 'http://127.0.0.1:19720/api/transcripts' \
-H 'Content-Type: application/json' \
-d '{"url": "YOUTUBE_URL"}'
Response:
{
"id": "abc123",
"title": "Video Title",
"author": "Channel Name",
"videoUrl": "https://youtube.com/watch?v=...",
"transcript": "[{\"text\":\"Hello\",\"startMs\":0,\"durationMs\":1500}]",
"source": "youtube_captions"
}
The transcript field is JSON. Parse it to get segments with text, startMs, and durationMs.
curl 'http://127.0.0.1:19720/api/transcripts'
curl 'http://127.0.0.1:19720/api/transcripts?q=QUERY'
curl 'http://127.0.0.1:19720/api/transcripts/ID'
curl -X DELETE 'http://127.0.0.1:19720/api/transcripts/ID'
def format_transcript(transcript_json):
import json
segments = json.loads(transcript_json)
lines = []
for seg in segments:
ms = seg['startMs']
mins, secs = ms // 60000, (ms % 60000) // 1000
lines.append(f"[{mins}:{secs:02d}] {seg['text']}")
return "\n".join(lines)
When user asks to transcribe a video:
curl -s http://127.0.0.1:19720/api/health | jq -r '.status'/api/transcriptsRESP=$(curl -s -X POST 'http://127.0.0.1:19720/api/transcripts' \
-H 'Content-Type: application/json' \
-d '{"url": "USER_URL"}')
TITLE=$(echo "$RESP" | jq -r '.title')
echo "Captured: $TITLE"
echo "$RESP" | jq -r '.transcript' | python3 -c "
import json, sys
for s in json.load(sys.stdin):
m, sec = s['startMs']//60000, (s['startMs']%60000)//1000
print(f'[{m}:{sec:02d}] {s[\"text\"]}')
"
| Error | Cause | Fix |
|---|---|---|
| Connection refused | Service not running | cd youtube-transcriber && npm run dev |
| 400 | Invalid URL format | Ask user for a valid youtube.com or youtu.be URL |
| 404 | Video not found | Video may be private or deleted |
| 429 | Rate limited | Wait 30–60 seconds and retry |
| 503 (health) | Dependency missing | Run npm run test:setup for diagnostics |