Communitygithub.com

video-notes

Convierte una grabación de pantalla narrada, una demo de producto o cualquier video que el usuario señale en una lista numerada con marcas de tiempo e imágenes fijas, todo en esta máquina. Úsalo cuando el usuario diga 'revisa el archivo de video', 'dejé comentarios como video', 'grabé comentarios', 'mira este video', 'analiza esta demo' o arrastre un archivo .mov, .mp4 o .webm.

¿Qué es video-notes?

Esta habilidad transforma grabaciones de pantalla narradas en listas de tareas accionables con marcas de tiempo e imágenes fijas clave, todo ejecutándose localmente en la máquina del usuario sin enviar datos a la nube. Utiliza Whisper para transcripción y ffmpeg para extraer fotogramas, generando un archivo de notas estructurado junto al video original. Es ideal para desarrolladores que reciben feedback en video y necesitan extraer puntos de acción concretos, demos de producto para documentar flujos, o cualquier situación donde se requiera analizar un video narrativo. Soporta plataformas de agentes de IA como Claude Code, Cursor, Codex, y cualquier setup que permita ejecutar scripts de Python y comandos del sistema. Su flujo de trabajo incluye la transcripción local (con modelos base.en o turbo), la generación de imágenes fijas de 1600px, y la creación de un archivo markdown con listas numeradas por regiones de pantalla, secciones de elementos pendientes y dudas. Toda la información se procesa en la máquina local, respetando la privacidad y sin depender de APIs externas.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/weeeha/video-notes/tree/HEAD/skills/video-notes

Preguntar en tu IA favorita

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

Documentación

Video Notes

El usuario graba comentarios como una grabación de pantalla mientras habla sobre ellos: una sola toma, de unos pocos minutos, a menudo repitiendo un punto cuando el cursor se retrasa. El entregable es una lista de tareas que otra sesión pueda ejecutar sin ver el video. Whisper y ffmpeg se ejecutan localmente; no se envía ningún video ni audio a una API de voz o visión en la nube.

Pasos

  1. Ejecuta el helper (está junto a este archivo).
    python3 "<carpeta de esta skill>/video-notes.py" "<video>"
    
    Reutiliza <video>.srt si existe junto al archivo; de lo contrario, ejecuta whisper --model base.en en CPU (aproximadamente 2.5 min por cada 5 min de video en un portátil Apple Silicon). La salida se guarda en <nombre>.notes/: transcript.md (una fila por segmento fusionado con un nombre de fotograma) e imágenes fijas de 1600 px. Cuando <nombre>.notes/ es más reciente que el video, se reutiliza tal cual; --force lo reconstruye, --model turbo cuando la transcripción base es confusa, --every 10 para una demo sin narración, --sheet para hojas de contacto 2x2, --max-row 5 para más fotogramas cuando el habla y la pantalla se mueven rápido (las filas tienen un límite de 8 s, un fotograma por fila), --max-frames 40 por defecto.
  2. Lee transcript.md, luego los fotogramas. Con --sheet, hojea primero sheet_NN.jpg (cuatro fotogramas por lectura; los mosaicos van de izquierda a derecha, de arriba abajo, en orden de fotogramas, así que la hoja 01 contiene los fotogramas 1 a 4 y su mosaico superior izquierdo es el más antiguo), luego lee el fotograma individual para cada fila cuyas palabras apunten a la pantalla ("esta área", "aquí", "estos dos iconos") o cuyo texto deba leerse. Una hoja localiza; solo un fotograma individual es evidencia para una etiqueta o tamaño.
  3. Escribe <nombre>.notes.md junto al video, por ruta absoluta, sea cual sea el directorio de trabajo de la sesión. Formato:
    # <nombre del video> · <fecha de grabación> · <duración> · <aplicación o URL visible en los fotogramas>
    
    ## Lista de tareas
    ### <región de pantalla, nombrada como se lee en pantalla: Panel izquierdo, Encabezado, Panel de configuración>
    1. [mm:ss] <arreglo imperativo en una oración>. Dijo: "<cita textual corta>". Fotograma: fotograma_mmss.jpg
    2. ...
    
    ## Pendiente
    <elementos marcados como "después", "eventualmente", "ahora no", mismo formato de línea>
    
    ## Dudas
    <una línea por elemento que necesita respuesta del usuario>
    
    La numeración es continua en toda la lista, para que el usuario pueda responder "el 3 y el 7". Las regiones siguen el orden en que se visitaron. Una nota repetida es un solo elemento, con "dicho 3 veces" añadido cuando la repetición es relevante.
  4. Responde con la ruta del archivo, los encabezados de región con recuentos de elementos y los primeros tres elementos. No preguntes nada a menos que Dudas tenga entradas.
  5. Cuando el repositorio que renderiza la pantalla esté abierto, añade ## Dónde en el código: número de elemento y ruta de archivo, encontrado buscando los nombres de componentes y etiquetas visibles en los fotogramas. Omite la sección cuando no hay repositorio; nunca adivines una ruta.

Reglas

  • El texto ilegible en una imagen fija se vuelve a capturar, nunca se infiere: --width 2400, o un recorte de ffmpeg de la región.
  • La carpeta .notes/ y .notes.md permanecen junto al video. Dentro de un repositorio, esa carpeta debe ignorarse (.git/info/exclude), para que una grabación grande nunca entre en git.
  • Demo de competidor o producto: mismos pasos, y la lista dice "qué hacen" en lugar de "arreglar".
  • La transcripción se ejecuta con los modelos Whisper locales en ~/.cache/whisper. No se usa API de voz en la nube, ni API de visión; el modelo de la sesión lee las imágenes fijas.

Verificación final

  • transcript.md generado y cada fotograma leído antes de escribir un elemento
  • <nombre>.notes.md escrito: numeración global, regiones en orden de visita, marca de tiempo y fotograma en cada elemento
  • Repeticiones colapsadas, Pendiente y Dudas separadas de la lista de tareas
  • Ningún video o audio enviado fuera de la máquina

Skills relacionados