CommunityProgramación y desarrollogithub.com

akimov121-hub/watch

Reproduce cualquier vídeo desde una URL (YouTube, Loom, una grabación de Zoom, un mp4 directo) — no solo la transcripción, sino lo que realmente se MUESTRA en pantalla. Los fotogramas se extraen por detección de cambios de escena (ffmpeg scene detection), no por temporizador, por lo que no se pierden gráficos, demos, ediciones ni b-roll. Audio: subtítulos mediante yt-dlp primero, Whisper como respaldo. Úsalo cuando el usuario escriba /watch <url> o pida "ver este vídeo", "revisar esta grabación/llamada/clase", "qué se muestra en pantalla". Disparadores: /watch, watch this vi

¿Qué es watch?

Este skill (akimov121-hub/watch) permite a un agente de IA, como Claude, "ver" vídeos completos extrayendo fotogramas clave mediante detección de cambios de escena y una transcripción del audio. A diferencia de muchos skills que solo procesan el texto, este analiza también el contenido visual: diapositivas, código, interfaces de usuario, demos y b-roll. Soporta YouTube, Loom, grabaciones de Zoom y archivos mp4 directos. Usa `ffmpeg` para la detección de escenas, `yt-dlp` para subtítulos (con respaldo de OpenAI Whisper), y maneja las defensas modernas de YouTube (cookies, PO-token, n-challenge) a través de un script wrapper. Está diseñado para ser invocado con el comando `/watch <url>` o frases como "mira este vídeo". Tras el análisis, el agente devuelve un resumen TL;DR, conceptos clave con marcas de tiempo, observaciones visuales que no están en el texto y momentos destacados. También puede guardar el análisis en una base de conocimiento (Obsidian) previa confirmación del usuario.

Compatible con✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/akimov121-hub/watch/tree/main

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

watch — Claude ve un vídeo de principio a fin

Divide un vídeo en lo que Claude lee de forma nativa: imágenes de fotogramas (vistas con la herramienta Read) + una transcripción (texto). El resultado es entender no solo las palabras, sino lo que sucede en pantalla.

Bilingüe. Esta es la versión en español. El espejo en ruso es SKILL.ru.md. Trabaja en el idioma que use el usuario; el flujo de trabajo y los comandos son idénticos.

Dependencias (instaladas una vez mediante install.sh)

Compruébalo con: command -v yt-dlp ffmpeg whisper node.

  • yt-dlp → ~/.local/bin/yt-dlp (bajo Python 3.12 en ~/.local/python312 — el Python del sistema suele ser demasiado antiguo; las versiones recientes de yt-dlp necesitan 3.10+);
  • ffmpeg → desde imageio-ffmpeg, enlazado simbólicamente a ~/.local/bin/ffmpeg;
  • whisper → openai-whisper (bajo el Python del sistema; el modelo se descarga en el primer uso);
  • node → ~/.local/node (v24) — necesario para sortear las defensas de YouTube.

Para YouTube específicamente, install.sh también configura:

  • un proveedor de PO-token (bgutil), compilado en modo script bajo ~/.local/bgutil-pot/server/build/;
  • un runtime Node.js + un componente EJS, para resolver el n-challenge de YouTube;
  • cookies de una cuenta de YouTube con sesión iniciada, en ~/.config/watch/cookies.txt.

Si las cookies caducan (YouTube vuelve a pedir "confirma que no eres un robot"), pide al usuario que vuelva a exportar cookies.txt con una extensión del navegador como "Get cookies.txt LOCALLY" y la coloque en ~/.config/watch/cookies.txt.

Descarga siempre a través del envoltorio bash ~/.claude/skills/watch/yt.sh … — que añade las banderas correctas de YouTube automáticamente. Para URLs de mp4 directo/Loom/Zoom las banderas adicionales son inofensivas.

Flujo de trabajo

1. Preparación

  • Crea una carpeta de trabajo: mkdir -p /tmp/watch/<slug> (slug = nombre corto a partir de la URL/tema).
  • Analiza la URL (YouTube / Loom / enlace de compartición de Zoom / archivo de vídeo directo). Un archivo local omite los pasos de descarga — trabaja con él directamente.

2. Transcripción — subtítulos primero (gratis, cuando están disponibles)

bash ~/.claude/skills/watch/yt.sh --write-subs --write-auto-subs --sub-langs "en,ru" \
  --skip-download --convert-subs srt -o "/tmp/watch/<slug>/subs.%(ext)s" "<URL>"

Si aparece un .srt, esa es una transcripción lista con marcas de tiempo — úsala.

3. Descargar el vídeo (necesario tanto para fotogramas como para el respaldo de Whisper)

bash ~/.claude/skills/watch/yt.sh -f "bv*[height<=480]+ba/b[height<=480]/18/best" \
  -o "/tmp/watch/<slug>/video.%(ext)s" "<URL>"

Obtendrás un .mp4 o .webm — usa el nombre de archivo real de ahora en adelante (video.*). Si no hubo subtítulos, transcribe el audio con Whisper (modelo small; base es más rápido para una prueba breve):

whisper "/tmp/watch/<slug>/video.webm" --model small --language en \
  --output_format srt --output_dir "/tmp/watch/<slug>/"

La primera ejecución descarga el modelo (~460 MB para small) — es normal, una sola vez. Omite --language en para audio no inglés, o establece el código de idioma correcto. Whisper es lento: un clip de 34 minutos tarda varios minutos — ejecútalo en segundo plano.

4. Fotogramas POR CAMBIO DE ESCENA (el paso clave — no por temporizador)

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "select='gt(scene,0.3)',showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"
  • Umbral 0.3 — ajústalo entre 0.2–0.4 para la densidad de escenas (un umbral más bajo = más fotogramas).
  • Obtén la marca de tiempo de cada fotograma desde el registro showinfo (pts_time) en scenes.log.
  • Si hay demasiados fotogramas (un vídeo largo), conserva entre 60 y 150 de los más informativos, eliminando los que estén muy juntos en el tiempo. Decodificar un vídeo largo lleva tiempo — ejecútalo en segundo plano.

RESPALDO — si hay muy pocas escenas (0–2 fotogramas). El metraje suave y sin cortes (una sola toma continua, un dron, una cabeza parlante) produce pocos cambios de escena. En ese caso, muestrea a un intervalo fijo:

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "fps=1/5,scale=960:-1,showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"

Ajusta el intervalo (1/5 = un fotograma cada 5 s) a la duración del vídeo para mantenerte en ~150 fotogramas. La marca de tiempo del i-ésimo fotograma = i × intervalo.

4a. YouTube: por qué todo pasa por yt.sh

YouTube (2025+) requiere estos tres elementos a la vez, o recibirás HTTP 403 / "no eres un robot" / "solo imágenes":

  1. cookies de una cuenta con sesión iniciada (~/.config/watch/cookies.txt);
  2. un PO-token (prueba de origen) — generado localmente por bgutil (modo script, Node);
  3. resolver el n-challenge — un runtime Node + un componente EJS (--remote-components ejs:github). Todo esto ya está integrado en yt.sh — solo llámalo. Las fuentes mp4/Loom/Zoom directas no tienen estas defensas. Si vuelve a pedir "confirma que no eres un robot", las cookies caducaron — pide un cookies.txt nuevo.

5. Análisis

  • Lee la transcripción (.srt).
  • Mira los fotogramas extraídos (visión, mediante la herramienta Read): diapositivas, código, demos, gráficos.
  • Vincula lo visual con la transcripción usando las marcas de tiempo.

6. Informe

Entrega:

  • un TL;DR (3–5 líneas);
  • conceptos clave con marcas de tiempo;
  • lo que se muestra EN PANTALLA que no está en el texto (gráficos, interfaces, demos);
  • momentos destacados / citas con marcas de tiempo.

7. Guardar en una base de conocimiento (pregunta primero)

Pregunta: "¿Guardar este análisis en tu base de conocimiento (Obsidian)?" Si es afirmativo, escribe una nota en markdown en la carpeta correspondiente con enlaces a notas relacionadas. No guardes sin confirmación.

Reglas

  • Los archivos de trabajo van a una carpeta temporal /tmp/watch/<slug> — no ensucies el proyecto.
  • No publiques ni envíes nada externamente sin una solicitud explícita.
  • No eludas un vídeo privado que requiera inicio de sesión — informa al usuario en su lugar.

Skills relacionados