PTENES
Agent Skill · /watch

Tu agente ve el video; no lo adivina por el título.

Pega una URL o un archivo y haz la pregunta. El agente obtiene los subtítulos, extrae fotogramas, transcribe el audio y lee cada fotograma como imagen. Responde como si hubiera visto el video.

# pega la URL + la pregunta
/watch https://youtu.be/… o que acontece em 0:30?

▸ yt-dlp   subtítulos encontrados (auto)
▸ ffmpeg   42 frames · scene-aware
▸ transc.   captions · 0:00 → 3:12
▸ Claude leyó 42 imágenes + transcript

→ Em 0:30 aparece o menu de config,
   e a narração explica o passo 2…
Qué es

Una entrada de video para tu agente

El agente lee páginas, ejecuta scripts y navega repositorios. Lo que él no hace de fábrica es ver un video. Esta skill le da ese sentido: Python puro con la biblioteca estándar para orquestar yt-dlp + ffmpeg + una API Whisper opcional.

👁️ Ve y escucha

Fotogramas extraídos como JPEG + transcripción con marcas de tiempo. El agente da Read en cada fotograma: la imagen se incorpora directamente al contexto y se alinea con lo que se dijo.

🌐 Cualquier fuente

URL de YouTube, TikTok, Loom, X, Vimeo, Twitch y cientos de sitios más mediante yt-dlp — o un archivo local .mp4 .mov .mkv .webm.

🧩 Multi-host

Una carpeta de skill autocontenida se instala en Claude Code, Codex, Cursor, Copilot, Gemini CLI y más de 50 hosts de Agent Skills. Sin configuración para empezar.

Cómo funciona

Primero los subtítulos; descarga solo lo necesario

La prioridad es gastar lo mínimo: en el modo transcript, una URL con subtítulos se devuelve sin descargar ningún video. Cuando se necesitan frames, descarga y extrae solo los que requiere la ejecución.

URL / archivo + pregunta→ yt-dlp · subtítulos→ ffmpeg · fotogramas→ deduplicación→ transcripción→ Claude Read→ respuesta + marcas de tiempo→ limpieza

1 · Descarga

yt-dlp revisa primero si hay subtítulos. Si existen (y estás en modo transcripción), no se descarga ningún video.

2 · Frames

ffmpeg extrae fotogramas clave rápidamente (efficient) o frames por corte de escena (balanced), 512px, 2 fps máx. En efficient, solo extrae los keyframes que el propio video ya guarda cada ~1s (-skip_frame nokey) — sin volver a decodificar y comparar cuadro a cuadro, por eso es mucho más rápido que el análisis completo de escenas.

3 · Deduplicación

Cada frame se convierte en una miniatura y se compara con el último que se conservó; si la diferencia de píxeles está por debajo del umbral, se descarta el cuadro (diapositiva sin movimiento, pantalla estática) antes de contabilizar el presupuesto: solo cuenta un frame que realmente cambia.

4 · Transcripción

Primero, subtítulos nativos (gratis); si faltan, extrae el audio mono de 16 kHz y envíalo a Whisper (Groq u OpenAI).

Requisitos previos

Dos dependencias y una clave opcional

Los subtítulos cubren la mayoría de los videos públicos gratis. La clave de Whisper solo se usa cuando el video realmente no tiene subtítulos (archivos locales, algunos TikToks/Vimeos).

⚙️ yt-dlp + ffmpeg

Se instalan en la primera ejecución. En macOS, automáticamente vía brew; Linux/Windows imprimen el comando exacto. Las próximas veces, el preflight es una consulta <100 ms.

# preflight + instalador (idempotente)
python3 scripts/setup.py

🔑 Clave Whisper (opcional)

Groq (preferido — más barato y rápido, whisper-large-v3) o OpenAI (whisper-1). Sin clave, los videos sin subtítulos devuelven solo frames.

# ~/.config/watch/.env  (modo 0600)
GROQ_API_KEY=...
# o
OPENAI_API_KEY=...
Guía de uso · paso a paso

Desde la instalación hasta la primera respuesta

Instala en tu herramienta, pega una URL y pregunta. El resto —subtítulos, descarga, fotogramas, transcripción— lo resuelve el script.

1

Instalar en Claude Code

Agrega el marketplace local e instala el plugin. Luego actualiza con /plugin update watch@claude-video.

/plugin marketplace add inematds/claude-video
/plugin install watch@claude-video
2

…o en Codex, Cursor, Copilot, Gemini CLI (+50)

La CLI de Agent Skills detecta los hosts y copia toda la skill. -g instálala globalmente; elimínala para limitarla al proyecto.

npx skills add inematds/claude-video -g  # global para tu usuario
3

Ver

Fuente (URL o ruta) + la pregunta. Si no haces ninguna pregunta, genera un resumen estructurado con los momentos clave.

/watch https://youtu.be/dQw4w9WgXcQ o que acontece no minuto 0:30?
/watch ~/Movies/screen-recording.mp4 quando a UI quebra?
/watch https://www.tiktok.com/@user/video/123 resume isso
4

Enfocarse en un fragmento (más fotogramas, menos tokens)

Cuando la pregunta sea sobre un momento, pasa --start/--end (acepta SS, MM:SS, HH:MM:SS). El presupuesto de frames se vuelve más denso y la transcripción se filtra al mismo intervalo.

/watch $URL --start 2:15 --end 2:45   # zoom en 30 s a 2 fps
/watch video.mp4 --start 50 --end 60   # últimos 10 s
/watch $URL --start 1:12:00           # desde 1h12m hasta el final
5

Ajustar el nivel de detalle (un dial)

Cambia fidelidad por velocidad y costo de tokens. Predeterminado balanced. Fija el valor predeterminado con WATCH_DETAIL= en el ~/.config/watch/.env.

ModoFotogramasUso
transcript0Solo transcripción; omite la descarga cuando hay subtítulos.
efficienthasta 50Keyframes rápidos (~0,5 s de extracción).
balancedhasta 100Fotogramas por corte de escena. Predeterminado.
token-burnersin límiteEscena, sin límite de duración: cobertura máxima en videos largos.
/watch $URL --detail efficient          # pasada rápida de 50 keyframes
/watch $URL --resolution 1024           # leer el texto en pantalla (diapositivas, terminal)
6

Obtener el fotograma que señala el habla ("mira aquí")

La selección por escena/keyframe puede pasar por alto cuando alguien señala la pantalla sin cambiar de escena: "mira aquí", "como están viendo", "fíjate en esto". El agente lee primero la transcripción, identifica esos momentos y vuelve a ejecutar con --timestamps para forzar un fotograma exactamente allí. Es criterio del agente, no una regex, y los fotogramas de pista se suman a lo que el --detail ya había elegido, sin que se descarten por el límite de presupuesto.

/watch $URL --detail transcript         # 1. primero, transcripción con marcas de tiempo
/watch $URL --timestamps 4:32,7:10,9:55 # 2. vuelve a ejecutar en los momentos en que lo que se dice apunta a la pantalla
Ejemplos

Para qué lo usa realmente la gente

La ventaja aparece cuando el cómo importa tanto como el qué — hooks de video, errores en grabaciones de pantalla, resúmenes de contenido largo.

🎯 Analizar contenido de terceros

Mira los primeros fotogramas y el inicio de la transcripción, y desglosa la estructura de un video viral, un anuncio creativo o la intro de un podcast.

/watch $URL qual foi o hook de abertura?

🐞 Diagnosticar un error

¿Recibiste una grabación de pantalla de algo que no funciona? Encuentra el fotograma donde aparece el problema y lo describe; muchas veces detecta la causa.

/watch bug-repro.mov o que está dando errado?

📝 Resumir un video

Extrae la estructura, los momentos clave y lo que realmente se dijo y se mostró. Más rápido que verlo a 2×.

/watch $URL resume isso

✂️ Filtrar el hype de una actualización

Reduce un "game-changer" a las pocas cosas que importan: sustancia sin diez minutos de introducción ni exageraciones.

/watch $URL o que é NOVO de verdade — pula o hype
Recursos · v0.2.0

Lo que ya está disponible

Skill autocontenida, solo con la biblioteca estándar. Cada línea de abajo describe un comportamiento que existe hoy, no una hoja de ruta futura.

Subtítulos
Primero, transcripción gratisyt-dlp obtiene subtítulos manuales o automáticos de la propia fuente. En el modo transcript, una URL con subtítulos ni siquiera descarga el video.
Whisper
Alternativa con auto-chunkingSin subtítulos, extrae el audio mono de 16 kHz y lo transcribe en Groq (preferido) u OpenAI. El audio de más de 25 MB se divide y se vuelve a unir automáticamente.
Fotogramas
Selector de 4 modos + máximo 2 fpstranscript, efficient (keyframes), balanced (escena) y token-burner (sin límite). Presupuesto de frames por duración para no exceder el contexto.
Dedup
Colapsa fotogramas casi idénticosCompara el brillo con el último fotograma conservado; una diapositiva quieta o una pantalla estática no consume el presupuesto. --no-dedup desactiva.
Enfoque
Ventana con --start/--endPresupuesto más denso en el fragmento solicitado; transcripción filtrada al mismo intervalo; las marcas de tiempo siempre corresponden al tiempo absoluto del video.
Pistas
Fotogramas por pista dedítica con --timestampsEl agente lee la transcripción, identifica dónde el habla señala la pantalla ("mira aquí", "como pueden ver") y fuerza un fotograma ahí, sumado a los que ya seleccionó por escena, sin que el recorte del presupuesto lo descarte.
Multi-host
Una skill, más de 50 hostsClaude Code (plugin/marketplace), Codex, Cursor, Copilot, Gemini CLI vía npx skills, y claude.ai por bundle .skill.