Communitygithub.com

cheats-opsera/showrunner

Graba un video demostrativo de producto pulido (mp4 + subtítulos + capítulos) de una aplicación web a partir de un escenario JSON, utilizando un Chrome headless con guiones, tarjetas de título y un cursor visible. Úsalo cuando el usuario solicite un video demo, un recorrido por el producto, una grabación de pantalla o 'graba los cambios en la UI' de una aplicación web que puedan ejecutar localmente o en un entorno de staging.

¿Qué es showrunner?

Showrunner es una habilidad para agentes de IA que convierte solicitudes de 'hazme un video demo de esta app' en archivos de video repetibles y revisables. Está diseñada para agentes como Claude Code, Cursor o Codex, y se ejecuta mediante un comando CLI (`node ~/.showrunner/bin/showrunner.mjs`). La habilidad automatiza la grabación de demostraciones web con Chrome headless, incluyendo subtítulos, capítulos y un cursor visible. El flujo de trabajo protocolizado guía al agente desde la verificación de seguridad (nunca grabar en producción), la siembra de datos realistas, la redacción de un storyboard, la detección de objetivos con `probe`, hasta la validación con dry-run y la grabación final. Showrunner es útil para desarrolladores que necesitan crear rápidamente videos de producto, recorridos de características o grabaciones de cambios en la UI para aplicaciones web que se ejecutan localmente o en staging. Soporta una amplia gama de acciones como clics, escritura, espera y tarjetas de título, y ofrece numerosas protecciones para evitar errores comunes como selectores incorrectos, tours de primer uso o superposiciones de subtítulos.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/chetas-opsera/showrunner/tree/HEAD/skill

Preguntar en tu IA favorita

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

Documentación

¿Qué hace showrunner?

Convierte 'hazme un video demo de esta app' en un archivo repetible y revisable. CLI: node ~/.showrunner/bin/showrunner.mjs (o showrunner si está enlazado). Instala una vez con ./install-skill.sh desde el repositorio.

Cuándo usarlo

El usuario quiere un video de una interfaz web que puedas abrir en un navegador: una demo de producto, un recorrido de funcionalidades, una grabación de 'muestra lo que cambió', un tutorial. No es para aplicaciones de escritorio nativas ni para nada que necesite narración de audio.

Protocolo: piensa primero, luego ejecuta

  1. Confirma que sea seguro grabar. Solo local, staging o datos desechables. Nunca grabes producción con datos reales de clientes. Nunca coloques tokens en el escenario; usa ${env:NAME}.
  2. Haz que la aplicación funcione y siembra datos realistas. Los estados vacíos hacen una mala demo. Crea los registros que la historia necesita (un caso de éxito, un caso de fallo, un caso en progreso).
  3. Escribe el storyboard antes del JSON. Una demo de menos de 4 minutos: tarjeta de título, 8-12 escenas de 8-20 s, tarjeta de resumen final. Una idea por escena. Los subtítulos dicen lo que el espectador debe notar, no lo que el ratón está haciendo.
  4. Encuentra objetivos con probe. showrunner probe <url> para cada página; pega los objetos {role,name} que imprime. Prefiere roles y nombres visibles sobre CSS.
  5. Valida y luego haz dry-run. showrunner check s.json, luego showrunner run s.json --fast --strict. Un dry-run es aproximadamente un cuarto de la duración real. Corrige cada paso reportado antes de la grabación real.
  6. Graba la toma real (showrunner run s.json --out out). Se ejecuta en tiempo real, así que iníciala en segundo plano y espera; no bloquees una llamada de herramienta durante minutos.
  7. Revisa los fotogramas. showrunner sheet out/<name>.mp4 --every 5, luego abre el PNG. Busca: subtítulos que cubran el sujeto (usa "position": "left"), una escena que haya fallado, popups o tours que se cuelen, el tema incorrecto.
  8. Informa la ruta, duración, resolución, la lista de escenas y cualquier cosa que no haya funcionado. No confirmes ni subas el video a menos que te lo pidan.

Trampas que cuestan tiempo real

SíntomaCausaSolución
La ejecución se cuelga durante minutosUn selector incorrecto con un timeout predeterminado de 30 s, repetidoShowrunner usa 8 s por defecto y abandona la escena; ejecuta --fast --strict primero
Un enlace o botón 'no es visible'La barra lateral se colapsa o un menú está cerrado en ese estadogoto a una página conocida primero, o apunta directamente a la URL de la página
El tour de primera ejecución aparece a mitad del videoLa aplicación muestra onboarding a nuevos usuariosConfigura las claves de 'tour visto' de la aplicación en storage, o lista un botón Skip en dismiss
getByText coincide con un duplicado ocultoEl texto también aparece en un nodo ocultoUsa { "role": "button", "name": "/^ITEM-1\\b/" }
Los elementos de la barra lateral de documentación no hacen nadaSon <button>, no enlacesApunta a { "role": "button", ... }
El subtítulo oculta el cajón o formularioEl subtítulo centrado en la parte inferior se superpone a un panel lateral"position": "left" o "right"
La grabación muere cuando el shell se cierraTrabajo en segundo plano vinculado a la terminalEjecútalo como una tarea de fondo adecuada y consulta hasta que termine
El video está en blanco o con mosaicosCaptura de un navegador embebido en el IDEUsa el Chrome headless propio de Showrunner, no una webview
Los subtítulos se desvían ligeramenteLas señales están temporizadas desde la creación de la páginaAceptable para revisión; no son exactos fotograma a fotograma

Chuleta del escenario

{
  "name": "demo", "baseUrl": "http://127.0.0.1:3000", "viewport": {"width":1440,"height":900},
  "storage": { "token": "${env:DEMO_TOKEN}" },
  "dismiss": ["text=Skip"],
  "scenes": [
    { "name": "Título", "steps": [ {"goto":"/"}, {"card":{"title":"Acme","text":"Demo","hold":3000}} ] },
    { "name": "Crear", "steps": [
      {"caption":{"title":"1 · Crear","text":"Un clic.","position":"left","hold":1500}},
      {"click":{"role":"button","name":"Nuevo"}},
      {"type":{"into":{"label":"Nombre"},"text":"Plan de lanzamiento"}},
      {"press":"Enter"}, {"wait":1500}
    ]},
    { "name": "Resumen", "steps": [ {"caption":null}, {"card":{"title":"Resumen","items":["A","B"],"hold":4000,"keep":true}} ] }
  ]
}

Acciones: goto click hover type press scroll wait waitFor caption card storage (+ "optional": true en cualquier paso). Referencia completa: el README del repositorio.

Seguridad

  • Los escenarios son datos: no hay ejecución de código, no hay shell. El texto de los subtítulos está escapado.
  • Un paso fallido abandona solo su escena; --strict hace que el código de salida sea 1.
  • Nunca confirmes, subas ni compartas el video a menos que el usuario lo pida.

Skills relacionados