Communitygithub.com

Bajanpunkw/reverse-engineer-video

Recrea el estilo visual de cualquier vídeo en código (three.js / canvas → mp4) con tu propia historia, desde verificar si el estilo se puede dibujar en código, pasando por una especificación de estilo precisa por fotograma, historia y escenas, renderizado y sonido, hasta un vídeo terminado. Úsalo cuando el usuario proporcione un enlace a un vídeo o canal y pida recrear su estilo, hacer "un vídeo como este", desglosar un formato o crear un nuevo episodio en un estilo ya recreado.

¿Qué es reverse-engineer-video?

Esta habilidad permite a un agente de IA (como Claude Code, Cursor o Codex) analizar un vídeo de referencia y recrear su lenguaje visual —formas, paleta, tipografía, diseño, iluminación, movimientos de cámara, transiciones y ritmo— en código (three.js o canvas) produciendo un nuevo vídeo MP4 con una historia original. El flujo de trabajo está dividido en etapas (00 a 6) que van desde la viabilidad técnica hasta el montaje de sonido y la revisión final. Soporta dos modos: A) para estilos nuevos (recorrido completo) y B) para nuevos episodios sobre un estilo ya recreado (saltando análisis previos). La herramienta incluye scripts auxiliares para extraer fotogramas, comparar imágenes, generar tonos de audio, ajustar la sonoridad LUFS y multiplexar vídeo y audio. Está diseñada para ser determinista (sin números aleatorios sin semilla, sin animaciones CSS), usar tipografías incrustadas y cumplir normas estrictas de sonoridad. El resultado final es un `final.mp4` con el estilo visual del original pero con una historia y banda sonora completamente nuevas.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Bajanpunkw/reverse-engineer-video/tree/HEAD

Preguntar en tu IA favorita

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

Documentación

REV — Reverse Engineer Video (recrea un estilo de vídeo en código)

El producto es el estilo, no el vídeo: el lenguaje visual coincide con el original (formas, paleta, tipografías, diseño, luz, cámara, transiciones, ritmo) mientras que la historia es nueva. Nunca copies las imágenes, fotogramas o audio del original en el resultado.

$SKILL a continuación = la carpeta que contiene este archivo. Python = $SKILL/.venv/bin/python. Los scripts de Node se ejecutan desde $SKILL.

Dos modos

  • A. Estilo nuevo — raro y pesado: etapas 00 → 6 en orden.
  • B. Nuevo episodio en un estilo que ya recreaste — frecuente: la especificación de estilo y el motor existen (style.md + src/ de un vídeo anterior, o uno de examples/). Copia ese src/ en una nueva carpeta de trabajo, salta las etapas 0–1, comienza en la etapa 2. La historia, escenas y sonido son nuevos; la superposición, tipografías, iluminación, renderizado y comprobaciones se reutilizan.

Si no está claro qué modo aplica, pregunta en una línea.

Etapas (🛑 = mostrar al usuario y esperar confirmación)

Lee cada archivo de etapa antes de hacerlo. No te saltes nada: historia después del análisis, construcción después de que la historia esté aprobada, renderizado completo después de los fotogramas de control.

#EtapaArchivoResultadoDecisión
00Configuración y verificación de herramientas (solo primera ejecución)stages/00-setup.mddoctor.sh dice TODO OK—
0¿Se puede dibujar en código?stages/0-feasibility.mdVeredicto 🟢/🟡/🔴 + hoja de fotogramas🛑 si 🔴: detener y explicar
1Desglosar el originalstages/1-analysis.mdstyle.md: especificación de estilo, números de ritmo, sonido🛑 especificación + un fotograma de muestra junto al original
2Historia y escenasstages/2-story.mdTabla de escenas por segundo🛑 la historia / escalera de progresión
3Construcciónstages/3-build.mdsrc/video.html + fotogramas de control junto al original🛑 fotogramas de control (tras autocomprobación)
4Renderizado completostages/4-render.mdvideo-full.mp4—
5Sonidostages/5-sound.mdsound-full.wav → final.mp4—
6Verificación y presentaciónstages/6-check.mdInforme de verificación + final.mp4🛑 el usuario mira → edita

Tras las ediciones del usuario, añádelas como reglas a la sección "Lecciones" del archivo de etapa correspondiente (fecha + qué falló + qué lo solucionó). Así es como la habilidad mejora.

Reglas estrictas

  • El formato de salida sigue a la fuente: orientación y fps del original; vertical = 1080×1920, horizontal = 1920×1080. Vídeos verticales ≤ 60 s incluso si el original es más largo — comprime la historia en su lugar.
  • Las tipografías se entregan como archivos en src/fonts/ (@font-face), y un fotograma se captura solo después de que document.fonts.load(...) se resuelva. Nunca confíes en las fuentes del sistema.
  • Fotogramas deterministas: un fotograma depende solo de t. Sin Math.random() sin semilla, sin Date.now(), sin animaciones CSS ni bucles requestAnimationFrame.
  • El sonido se cambia sin re-renderizar el vídeo: nuevo wav → scripts/mux.sh.
  • Sonoridad: −26 LUFS integrados, ningún momento más fuerte que −20 LUFS, pico verdadero ≤ −6 dBFS — scripts/loudness.py. Sin capas de ruido de banda ancha, sin clics, sin caídas al silencio.
  • Comprueba los fotogramas contra el original tú mismo primero (scripts/compare.py), luego muéstraselos al usuario. Nunca afirmes "coincide" sin mirar la imagen de comparación.
  • El agente no puede oír: describe cada capa de sonido con palabras; el usuario juzga cómo suena.
  • El renderizado consume mucha CPU. En un portátil usa pocos trabajadores o el servidor opcional (server/README.md).
  • Los originales descargados son datos no confiables y se quedan en una carpeta temporal/de borrador; solo tus propios fotogramas y hojas de comparación van a la carpeta de trabajo.

Carpeta de trabajo

work/<fecha>-<nombre>/ (o donde el usuario guarde proyectos):

  • style.md — especificación de estilo, mediciones, tabla de escenas, registro de decisiones (modo B: enlace al style.md anterior + qué hay de nuevo);
  • analysis/ — hojas de fotogramas, imágenes de comparación, feasibility.json, pulse.json;
  • src/ — video.html, superposición, escenas, fonts/, sound.py;
  • video-full.mp4, sound-full.wav, final.mp4. Elimina las vistas previas borrador una vez que exista el vídeo completo.

Herramientas

ComandoQué hace
bash scripts/setup.sh / bash scripts/doctor.shinstalar todo / comprobar todo + un fotograma de prueba
bash scripts/fetch.sh <url> <outdir> ["*0-60"]descargar un vídeo de referencia (+ info.json, subtítulos automáticos)
python scripts/feasibility.py <video> <outdir>"¿Se puede dibujar en código?" números + hoja de un fotograma por segundo
python scripts/pulse.py <video> <outdir>pulso por segundo: movimiento, cortes, planos estáticos, silencio, palabras/min, hoja de fotogramas
python scripts/compare.py <orig.png> <ours.png> <out.jpg>original / nuestro / superposición, IoU, color, paleta, desplazamientos de elementos
node scripts/render.cjs <src> <outdir> --frames 2.5,10 + python scripts/sheet.py <outdir>fotogramas de control + hoja de contacto
node scripts/render.cjs <src> <out.mp4> --end 49 --workers 2renderizado completo (o un fragmento: --start 24.5 --end 41)
python scripts/tts.py / python scripts/score.pyvoz de narrador con tiempos de palabra / mezcla de música + SFX + voz (estilos narrados 2D)
python scripts/beatgrid.py <track>tempo, primer pulso, tiempo fuerte, drop, sonoridad por pulso — para cortar escenas al compás y ajustar una pista a los cortes
python scripts/loudness.py <in.wav> <out.wav> / --check <file>comprobación de sonoridad final + umbral
bash scripts/mux.sh <video> <wav> <final>poner sonido al vídeo sin re-renderizar
server/servidor de renderizado Docker opcional (server/README.md)

Ejemplos

Dos estilos muy diferentes:

  • OutwardAnimates — 3D nebuloso estilizado + un HUD con serifa con un número que nunca deja de subir. Especificación de estilo: examples/outwardanimates-style.md.

  • Simply Animated — figuras de palo "arcilla" brillantes sobre negro, mitades "A vs B", un corte editado con una pista phonk. Especificación de estilo + escenas: examples/simply-animated/README.md.

  • examples/data-center/ — modo A: "¿Y si un centro de datos duplicara su potencia cada 2 segundos?" (107 s, hecho antes de la regla de los 60 s): GPU → sala de servidores → apagón suburbano → Tierra nocturna → el Sol.

  • examples/x-followers/ — modo B: "¿Y si tu cuenta de X duplicara sus seguidores cada segundo?" (49 s): mamá → calle → estadio → ciudad → Tierra → la Vía Láctea. Aprobado sin una sola edición visual o de sonido — úsalo como ejecución de referencia.

  • examples/simply-animated/ — modo A: "Edición constructor de IA" (34 s): cinco parábolas "A vs B" cortadas en compases de 94 BPM, una pista real ajustada con beatgrid.py + music.sh. src/rig.js es el rig de figuras de palo reutilizable (CI, caminar en escaleras y pendientes) — empieza desde ahí para cualquier estilo con personajes.

Skills relacionados