Skills Agentes

Baoyu Youtube Transcript

Descarga transcripciones/subtítulos e imágenes de portada de vídeos de YouTube por URL o ID, con soporte de idiomas, traducción, capítulos e identificación de hablantes.

Estrellas
25k

en todo el repo

Actividad
38

0–100, la ruta de este skill

Actualizado
hace 4 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
2.4k tok

117 tok en reposo

Paquete
9 archivos

68 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add JimLiu/baoyu-skills --skill baoyu-youtube-transcript --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests, reads environment config.

Qué hace

  • Descarga transcripciones/subtítulos de vídeos de YouTube por URL o ID, con timestamps, capítulos y traducción
  • Descarga la imagen de portada (thumbnail) del vídeo
  • Identifica hablantes en la transcripción usando un sub-agente de IA con etiquetas de tipo Speaker Name
  • Cachea metadatos y transcripción cruda para reformatear rápido sin volver a llamar a la red
  • Exporta en formato Markdown o SRT

Úsalo cuando

  • El usuario pide obtener/descargar una transcripción, subtítulos o captions de YouTube
  • El usuario pide la imagen de portada o thumbnail de un vídeo de YouTube
  • El usuario da una URL de YouTube y quiere el texto o el título/capítulos extraídos

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Descárgame la transcripción de este vídeo de YouTube
    • Consígueme los subtítulos en español de este video
    • Quiero la miniatura/portada de este vídeo de YouTube
    • Genera un SRT con los capítulos y hablantes identificados de este video

    SKILL.md

    En inglés

    YouTube Transcript

    Downloads transcripts (subtitles/captions) from YouTube videos. Works with both manually created and auto-generated transcripts. No API key or browser required — uses YouTube's InnerTube API directly and automatically falls back to yt-dlp when YouTube blocks the direct API path.

    Fetches video metadata and cover image on first run, caches raw data for fast re-formatting.

    Script Directory

    Scripts in scripts/ subdirectory. {baseDir} = this SKILL.md's directory path. Resolve ${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bun. Replace {baseDir} and ${BUN_X} with actual values.

    Script Purpose
    scripts/main.ts Transcript download CLI

    Usage

    # Default: markdown with timestamps (English)
    ${BUN_X} {baseDir}/scripts/main.ts <youtube-url-or-id>
    
    # Specify languages (priority order)
    ${BUN_X} {baseDir}/scripts/main.ts <url> --languages zh,en,ja
    
    # Without timestamps
    ${BUN_X} {baseDir}/scripts/main.ts <url> --no-timestamps
    
    # With chapter segmentation
    ${BUN_X} {baseDir}/scripts/main.ts <url> --chapters
    
    # With speaker identification (requires AI post-processing)
    ${BUN_X} {baseDir}/scripts/main.ts <url> --speakers
    
    # SRT subtitle file
    ${BUN_X} {baseDir}/scripts/main.ts <url> --format srt
    
    # Translate transcript
    ${BUN_X} {baseDir}/scripts/main.ts <url> --translate zh-Hans
    
    # List available transcripts
    ${BUN_X} {baseDir}/scripts/main.ts <url> --list
    
    # Force re-fetch (ignore cache)
    ${BUN_X} {baseDir}/scripts/main.ts <url> --refresh
    

    Options

    Option Description Default
    <url-or-id> YouTube URL or video ID (multiple allowed) Required
    --languages <codes> Language codes, comma-separated, in priority order en
    --format <fmt> Output format: text, srt text
    --translate <code> Translate to specified language code
    --list List available transcripts instead of fetching
    --timestamps Include [HH:MM:SS → HH:MM:SS] timestamps per paragraph on
    --no-timestamps Disable timestamps
    --chapters Chapter segmentation from video description
    --speakers Raw transcript with metadata for speaker identification
    --exclude-generated Skip auto-generated transcripts
    --exclude-manually-created Skip manually created transcripts
    --refresh Force re-fetch, ignore cached data
    -o, --output <path> Save to specific file path auto-generated
    --output-dir <dir> Base output directory youtube-transcript

    Optional Environment Variables

    Variable Description
    YOUTUBE_TRANSCRIPT_COOKIES_FROM_BROWSER Passed to yt-dlp --cookies-from-browser during fallback, e.g. chrome, safari, firefox, or chrome:Profile 1

    Input Formats

    Accepts any of these as video input:

    • Full URL: https://www.youtube.com/watch?v=dQw4w9WgXcQ
    • Short URL: https://youtu.be/dQw4w9WgXcQ
    • Embed URL: https://www.youtube.com/embed/dQw4w9WgXcQ
    • Shorts URL: https://www.youtube.com/shorts/dQw4w9WgXcQ
    • Video ID: dQw4w9WgXcQ

    Output Formats

    Format Extension Description
    text .md Markdown with frontmatter (incl. description), title heading, summary, optional TOC/cover/timestamps/chapters/speakers
    srt .srt SubRip subtitle format for video players

    Output Directory

    youtube-transcript/
    ├── .index.json                          # Video ID → directory path mapping (for cache lookup)
    └── {channel-slug}/{title-full-slug}/
        ├── meta.json                        # Video metadata (title, channel, description, duration, chapters, etc.)
        ├── transcript-raw.json              # Raw transcript snippets from YouTube API (cached)
        ├── transcript-sentences.json        # Sentence-segmented transcript (split by punctuation, merged across snippets)
        ├── imgs/
        │   └── cover.jpg                    # Video thumbnail
        ├── transcript.md                    # Markdown transcript (generated from sentences)
        └── transcript.srt                   # SRT subtitle (generated from raw snippets, if --format srt)
    
    • {channel-slug}: Channel name in kebab-case
    • {title-full-slug}: Full video title in kebab-case

    The --list mode outputs to stdout only (no file saved).

    Caching

    On first fetch, the script saves:

    • meta.json — video metadata, chapters, cover image path, language info
    • transcript-raw.json — raw transcript snippets from YouTube API ({ text, start, duration }[])
    • transcript-sentences.json — sentence-segmented transcript ({ text, start: "HH:mm:ss", end: "HH:mm:ss" }[]), split by sentence-ending punctuation (.?!…。?! etc.), timestamps proportionally allocated by character length, CJK-aware text merging
    • imgs/cover.jpg — video thumbnail

    Subsequent runs for the same video use cached data (no network calls). Use --refresh to force re-fetch. If a different language is requested, the cache is automatically refreshed.

    When YouTube returns anti-bot / blocked responses on the direct InnerTube path, the script retries with alternate client identities and then falls back to yt-dlp if available. If fallback is needed but yt-dlp is unavailable, the agent should decide how to make yt-dlp available and continue rather than pushing the installation decision to the user.

    SRT output (--format srt) is generated from transcript-raw.json. Text/markdown output uses transcript-sentences.json for natural sentence boundaries.

    Workflow

    When user provides a YouTube URL and wants the transcript:

    1. Run with --list first if the user hasn't specified a language, to show available options
    2. Always single-quote the URL when running the script — zsh treats ? as a glob wildcard, so an unquoted YouTube URL causes "no matches found": use 'https://www.youtube.com/watch?v=ID'
    3. Default: run with --chapters --speakers for the richest output (chapters + speaker identification)
    4. The script auto-saves cached data + output file and prints the file path
    5. For --speakers mode: after the script saves the raw file, follow the speaker identification workflow below to post-process with speaker labels

    When user only wants a cover image or metadata, running the script with any option will also cache meta.json and imgs/cover.jpg.

    When re-formatting the same video (e.g., first text then SRT), the cached data is reused — no re-fetch needed.

    Chapter & Speaker Workflow

    Chapters (--chapters)

    The script parses chapter timestamps from the video description (e.g., 0:00 Introduction), segments the transcript by chapter boundaries, groups snippets into readable paragraphs, and saves as .md with a Table of Contents. No further processing needed.

    If no chapter timestamps exist in the description, the transcript is output as grouped paragraphs without chapter headings.

    Speaker Identification (--speakers)

    Speaker identification requires AI processing. The script outputs a raw .md file containing:

    • YAML frontmatter with video metadata (title, channel, date, cover, description, language)
    • Video description (for speaker name extraction)
    • Chapter list from description (if available)
    • Raw transcript in SRT format (pre-computed start/end timestamps, token-efficient)

    After the script saves the raw file, spawn a sub-agent (use a cheaper model like Sonnet for cost efficiency) to process speaker identification:

    1. Read the saved .md file
    2. Read the prompt template at {baseDir}/prompts/speaker-transcript.md
    3. Process the raw transcript following the prompt:
      • Identify speakers using video metadata (title → guest, channel → host, description → names)
      • Detect speaker turns from conversation flow, question-answer patterns, and contextual cues
      • Segment into chapters (use description chapters if available, else create from topic shifts)
      • Format with **Speaker Name:** labels, paragraph grouping (2-4 sentences), and [HH:MM:SS → HH:MM:SS] timestamps
    4. Overwrite the .md file with the processed transcript (keep the YAML frontmatter)

    When --speakers is used, --chapters is implied — the processed output always includes chapter segmentation.

    Error Cases

    Error Meaning
    Transcripts disabled Video has no captions at all
    No transcript found Requested language not available
    Video unavailable Video deleted, private, or region-locked
    IP blocked Too many requests, try again later
    Age restricted Video requires login for age verification
    bot detected The script retries alternate clients and then yt-dlp; if fallback tooling is missing, the agent should resolve that itself, otherwise if it still fails try YOUTUBE_TRANSCRIPT_COOKIES_FROM_BROWSER=safari (or your browser)

    Reproducido de JimLiu/baoyu-skills bajo licencia MIT. Leer esta página en markdown.

    Archivos

    9 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere `bun` o `npx` instalado; si YouTube bloquea el acceso directo, hace fallback a `yt-dlp` (opcionalmente con cookies de navegador vía YOUTUBE_TRANSCRIPT_COOKIES_FROM_BROWSER).

    Variables de entorno:BUN_XINNERTUBE_URLWATCH_URLYOUTUBE_TRANSCRIPT_COOKIES_FROM_BROWSER

    Detalles

    Creador
    JimLiu
    Categoría
    Productividad
    Licencia
    MIT
    Recursos incluidos
    scripts en typescript
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de JimLiu/baoyu-skills

    Este repo incluye 22 skills. Si instalas uno, normalmente ya tienes los demás.

    Generación de imágenes con IA usando OpenAI GPT Image 2, Azure OpenAI, Google, OpenRouter, DashScope, Z.AI GLM-Image, MiniMax, Jimeng, Seedream, Replicate y Agnes; soporta texto a imagen, referencias, aspectos y lotes.

    Costo de contexto al activarse
    5.2k tok
    Tamaño del paquete
    49 archivos
    Última actualización
    el mes pasado
    diseno ui

    Publica contenido en WeChat Official Account (微信公众号) vía API o Chrome CDP, con posts de artículo (文章) o de imagen-texto (贴图/图文).

    Costo de contexto al activarse
    3.7k tok
    Tamaño del paquete
    29 archivos
    Última actualización
    hace 2 meses
    redaccion contenido

    Convierte los chats de un grupo de WeChat en un resumen estructurado usando el binario local wx-cli, con historial, perfiles de usuario y memoria de hechos por grupo entre ejecuciones.

    Costo de contexto al activarse
    8.3k tok
    Tamaño del paquete
    6 archivos
    Última actualización
    el mes pasado
    productividad

    Publica contenido y artículos en X (Twitter): posts normales con imágenes/vídeos y X Articles en Markdown, vía plugin Chrome de Codex, Computer Use o scripts CDP.

    Costo de contexto al activarse
    4.4k tok
    Tamaño del paquete
    16 archivos
    Última actualización
    el mes pasado
    marketing

    Genera portadas de artículos con 5 dimensiones (tipo, paleta, renderizado, texto, mood), combinando 11 paletas y 7 estilos de renderizado, en formatos cinematic, widescreen o square.

    Costo de contexto al activarse
    4.5k tok
    Tamaño del paquete
    35 archivos
    Última actualización
    hace 2 meses
    diseno ui

    Analiza la estructura del artículo, identifica dónde faltan apoyos visuales y genera ilustraciones combinando Tipo × Estilo × Paleta. Úsalo para "ilustrar artículo", "añadir imágenes" o "为文章配图".

    Costo de contexto al activarse
    4.3k tok
    Tamaño del paquete
    37 archivos
    Última actualización
    hace 2 meses
    redaccion contenido