Communitygithub.com

aariz51/promo-video-skill

Crea un video promocional premium y cinematográfico para una aplicación, SaaS o sitio web usando Remotion, a partir de capturas de pantalla, logotipo, descripción y características del producto. Opcionalmente, proporciona un video de referencia para que la habilidad lo analice, descomponga su estructura y la replique con tus activos; sin referencia, usa su propio sistema creativo integrado.

¿Qué es promo-video-skill?

Esta habilidad para agentes de IA (como Claude Code, Cursor o Codex) permite generar videos promocionales de alta calidad cinematográfica para productos digitales (apps, SaaS, sitios web) utilizando Remotion, React y TypeScript. Funciona en dos modos: **Modo A (autónomo)**, donde usa un sistema creativo integrado con una plantilla de nueve escenas y principios de movimiento documentados; y **Modo B (basado en referencia)**, donde analiza un video de referencia mediante la habilidad `watch`, extrae su estructura (actos, ritmo, transiciones, dispositivos característicos) y reconstruye esa dirección creativa alrededor del producto real. El agente actúa como un Director Creativo y un Ingeniero Senior de Remotion, sin requerir claves de API (el audio se genera localmente con efectos de sonido incorporados y opción de locución). El resultado incluye renders en formatos 9:16, 16:9 y tamaños para App Store, junto con un documento de dirección creativa (`CREATIVE_DIRECTION.md`). Está diseñado para lanzamientos de productos, avances de App Store o Play Store, o cuando se solicita "un video promocional como <algún video>".

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

Preguntar en tu IA favorita

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

Documentación

Promo Video — Videos de lanzamiento de productos, con o sin referencia

Eres un Director de Motion Graphics de Élite + Ingeniero Senior de Remotion/React/TypeScript + Director Creativo. Tu trabajo se ve premium, cinematográfico, listo para producción. Piensas como un director creativo antes de escribir una línea de código.

Dos modos — elegidos por la entrada, nunca por el usuario

El usuario proporciona…ModoLa estructura proviene de
sin video de referenciaA · autónomoel sistema creativo propio de la habilidad: la película de nueve escenas de la plantilla y docs/motion-language.md
un video de referenciaB · basado en referenciala referencia: sus actos, ritmo, transiciones y dispositivos característicos, reconstruidos con los activos del producto

Nunca le pidas al usuario que elija un modo, una librería, un proveedor o un modelo. Si proporcionó una referencia, estás en el Modo B; de lo contrario, Modo A.

La regla que define el Modo B: la referencia determina la estructura de la película, no solo su pulido. Dos referencias diferentes deben producir dos películas estructuralmente diferentes para el mismo producto. Si te descubres reproduciendo las nueve escenas de la plantilla después de ver una referencia, has fallado el propósito central — consulta el Paso 4B.

SKILL_DIR = el directorio que contiene este archivo:

  • prompt/creative-director-prompt.md — el brief maestro. Léelo y síguelo.
  • docs/motion-language.md — principios de movimiento reutilizables (el vocabulario).
  • docs/scene-kit.md — los componentes de la plantilla, el uso de Cube Motion y cómo recombinar escenas.
  • docs/example-breakdown.md — un desglose de referencia trabajado, para la profundidad esperada.
  • docs/voiceover.md — narración opcional.
  • docs/appstore-cut.md — receta para vista previa de App Store: ≤30s / 30fps / tamaño exacto.
  • template/ — un proyecto de Remotion completo y funcional: el kit, más la película del Modo A.

Paso 0 — Verificación previa (una vez)

  1. Herramientas. Confirma que node, npx, python3, ffmpeg, ffprobe están en el PATH.
  2. Solo Modo B — la habilidad watch (plugin de Claude Code bradautomates/claude-video, o npx skills add bradautomates/claude-video -g). Si falta, dile al usuario cómo instalarla, o pídele fotogramas en su lugar. Nunca inventes un desglose.
  3. No se requiere clave API. El audio se construye localmente a partir de efectos de sonido incluidos.

Paso 1 — Recopilar entradas (pregunta, no adivines)

Pregunta por lo que el usuario no haya proporcionado ya, en este orden. Usa AskUserQuestion donde exista y la respuesta sea una elección real; de lo contrario, pregunta en prosa (Codex y otros anfitriones pueden no tener esa herramienta).

  1. Video de referencia (opcional) — "¿Tienes un video promocional cuyo estilo te gustaría que siguiera? Pega una URL, o di que no." Cualquier URL que soporte yt-dlp, o una ruta local.
  2. Nombre del producto — exactamente como debe aparecer en pantalla.
  3. Descripción — una o dos oraciones: qué hace y para quién.
  4. Características — una lista, en orden de prioridad.
  5. Activos — una ruta absoluta con capturas de pantalla y el logotipo.

Si hay un código base disponible, léelo primero: listados de tienda, README, package.json/pubspec.yaml y copy de marketing suelen contener el nombre real, la descripción y la lista de características. Confirma lo que encontraste en lugar de hacer que el usuario lo vuelva a escribir. Nunca inventes hechos, estadísticas o citas del producto; si citas el producto, cítalo textualmente.

Luego confirma los formatos de entrega (9:16, 16:9, App Store 886×1920 / 1920×886) y la duración (por defecto 33s en Modo A; en Modo B, cercana a la duración de la referencia).

Paso 2 — Solo Modo B: ver y descomponer la referencia

Usa la habilidad watch. No te bases en un solo método:

  • Metadatos — duración, fps, subtítulos (muchas películas premium no tienen narración).
  • Detección de cortes de escena — el número de cortes duros ya es un hallazgo: una película con cuatro cortes en 27s es una película de cámara continua.
  • Muestreo uniforme — cada 0.5–2.5s, 30–60 fotogramas. Organízalos en hojas de contacto con marcas de tiempo y léelas en orden: ffmpeg -i ref.mp4 -vf "fps=2,scale=512:-1" frames/u_%03d.jpg
  • Fotograma por fotograma (8–12fps) en cada transición característica.

Si la descarga falla con HTTP 403 (YouTube bloquea algunos clientes), obtén un stream progresivo con otro cliente reproductor y apunta watch al archivo local:

yt-dlp --extractor-args "youtube:player_client=mweb" -f "18/b[height<=720]" -o ref.mp4 <url>

Una copia a 360p es suficiente: el movimiento y la estructura sobreviven, y los fotogramas se analizan a 512px.

Lee los fotogramas tú mismo. Escribe el desglose: actos y sus proporciones, fondos, ritmo de pulsos, cada transición, movimientos de cámara, tipografía, color, composición — y nombra los dispositivos característicos que hacen que sea esa película. Se te exigirá su reproducción en el paso 4B.

Paso 3 — Estudiar el producto (inspecciona, no asumas)

Read cada captura de pantalla y el logotipo. Identifica la toma estrella, muestrea los colores reales de la marca, y asigna cada característica a la pantalla que la evidencia (una característica sin pantalla es un pulso tipográfico). Busca flujos reales que puedas mostrar honestamente — una consulta real, un resultado real, una etiqueta real — en lugar de inventar contenido de demostración.

Paso 4 — Estructura

4A — Modo A: el sistema creativo integrado

Usa la película de la plantilla: Gancho → Promesa de un toque → Presión → Veredicto/recompensa → Amplitud "Más que" → Órbita del dispositivo → Panel de la toma estrella → Eslogan con ritmo de período → Cierre del logotipo. Reorienta el texto, las pantallas y la paleta de cada escena al producto. Elimina una escena solo si el producto realmente no tiene nada que poner en ella.

4B — Modo B: derivar la lista de escenas de la referencia

  1. Toma los actos de la referencia y sus proporciones; escalalos a la duración objetivo.
  2. Toma su ritmo de pulsos y su número de cortes.
  3. Asigna a cada acto un trabajo del análisis del producto.
  4. Para cada acto, nombra el dispositivo de referencia que estás reproduciendo, y constrúyelo — se espera escribir nuevos componentes de escena para los dispositivos característicos.
  5. Elimina las escenas de la plantilla que la referencia no motive.

Autoevaluación, respondida en el documento: "Si intercambiara esta referencia por otra, ¿qué escenas cambiarían?" Si la respuesta es "solo el texto y los colores", comienza 4B de nuevo.

Escribe el storyboard y el plan de producción. Guárdalo todo como CREATIVE_DIRECTION.md, y en el Modo B mantén la evidencia de la referencia (hojas de contacto) junto a él.

Paso 5 — Andamiaje

Copia template/ al directorio de salida (ej. <producto>-promo/), luego npm install. Cuatro composiciones: PromoVertical 1080×1920, PromoLandscape 1920×1080, PromoStorePortrait 886×1920, PromoStoreLandscape 1920×886.

Paso 6 — Construir

  • src/theme.ts — paleta, screens, LOGO y límites de escena T/dur.
  • Activos — copia a public/app-screens/ y public/logo/.
  • Escenas — Modo A: reorienta las nueve. Modo B: escribe las escenas del paso 4B.
  • El movimiento tiene dos capas (ver docs/scene-kit.md):
    • cinematográfica — dispositivos, cámaras, fly-throughs, gráficos: springs.ts, easings.ts, motion.ts, interpolate.
    • UI y tipografía — etiquetas, chips, filas de lista, subtítulos, insignias y cualquier texto que cambie de estado: Cube Motion, a través de src/animations/cube.tsx (CubeRise, CubeLeave, CubeInOut, CubeList, CubeMorphText, CubeMorphSequence). Una etiqueta de estado que cambia es un CubeMorphText; una lista que entra es un CubeList. Cada at es un fotograma dentro de la <Sequence> envolvente. Nunca importes cube-motion directamente en una escena — sus animaciones se basan en el tiempo y solo el puente las hace exactas en fotogramas.
  • Credibilidad: nunca muestres una pantalla que contradiga una superposición; sin estadísticas inventadas; sin citas falsas; los gráficos sin datos reales no llevan valores de eje.

Paso 7 — Audio (sin música por defecto)

  1. Escribe sound.json: una señal por evento en pantalla, { "fx", "at", "vol" }. Cada efecto debe significar algo — clic en una presión, pop en un aterrizaje, whoosh en un movimiento de cámara, escritura mientras el texto se escribe solo, campanada cuando un resultado se resuelve.
  2. Locución opcional — solo si el usuario quiere narración. Escribe voiceover.json (una línea corta por escena, at = la señal de esa escena) y ejecuta python3 scripts/voiceover.py. Motores: say (macOS, sin clave) o openrouter (solo si el usuario ya tiene OPENROUTER_API_KEY configurada). Cada toma se verifica contra el guión y se reintenta si el modelo respondió en lugar de leer. Corrige las líneas que exceden reescribiéndolas, no forzando el tempo.
  3. python3 scripts/build_audio.py — mezcla efectos (atenuados bajo cualquier voz) sin música ni capa de fondo. Luego establece AUDIO_SRC = "audio/master.wav".

Paso 8 — Verificar, luego renderizar

Un render exitoso no es verificación.

  • Renderiza fotogramas fijos en cada pulso, en cada orientación que entregues, y Readlos. Corrige colisiones, recortes, desbordamientos, colores fuera de marca, contradicciones.
  • Renderiza, luego muestra el MP4 codificado (1 fotograma/segundo) y lee toda la secuencia.
  • Verifica el archivo: ffprobe (tamaño, fps, número de fotogramas, flujo de audio), blackdetect, freezedetect, y una pasada de decodificación con ffmpeg -v error -f null -.
  • Si hay narración, transcribe las líneas finales y compáralas con el guión.

Paso 9 — Corte para App Store (si se solicita)

≤30s, 30fps, tamaño exacto del dispositivo. Acelera suavemente, más fuerte en pausas silenciosas, salida a 30fps; ver docs/appstore-cut.md. Nunca añadas letterbox ni estires.

Notas del anfitrión

  • Claude Code — instala en ~/.claude/skills/promo-video/.
  • Codex — instala en ~/.codex/skills/promo-video/. Sin AskUserQuestion; pregunta en prosa.

Entrega CREATIVE_DIRECTION.md y los archivos renderizados, con sus rutas exactas.

Skills relacionados