Communitygithub.com

evgenspm/launchfilm

Control de calidad de un film de lanzamiento renderizado antes de que alguien lo envíe. Úsalo para 'revisar el video', 'verificar el render', '¿está listo para publicar?', 'revisar el film', '¿por qué se ve barato?', 'revisar los subtítulos / zonas seguras / volumen', después de cada render y antes del empaquetado. Lee el reporte automático de la CLI (`npx launchfilm qa <slug>`), hojas de contactos y fotogramas clave en momentos determinados, luego verifica la legibilidad del texto en el tiempo, el contraste, las zonas seguras de la plataforma, el volumen (−14 LUFS, −1.5 dBTP), las especificaciones de codificación ffprobe, los fotogramas negros y congelados, los cortes al compás y los 12 indicadores de aficionado como comprobaciones de bloqueo. Escribe `qa/<slug>/QA.md` donde cada línea cita un archivo o un número medido; una verificación que no se ejecutó dice NOT CHECKED, nunca PASS. Usa scene-build para corregir problemas de imagen que encuentre, sound para arreglar la mezcla, launch-film para todo el pipeline, reference-study para videos de referencia.

¿Qué es launchfilm?

Esta skill convierte a Claude Code en un inspector de calidad de video profesional, diseñado específicamente para films de lanzamiento o videos cortos creados con herramientas como Remotion. El agente lee el reporte automático generado por la CLI `launchfilm`, abre hojas de contactos y fotogramas en momentos clave, y ejecuta una serie rigurosa de comprobaciones manuales y automáticas. Cubre aspectos como la legibilidad del texto, el contraste, las zonas seguras (para diferentes plataformas como 16:9, 9:16, 1:1), el volumen según estándares de broadcast (−14 LUFS, −1.5 dBTP), la calidad de codificación, fotogramas congelados o negros, y la sincronización con el ritmo musical. Tras cada revisión, genera un informe detallado (`QA.md`) donde cada verificación aprobada debe incluir evidencia concreta (un archivo abierto o un número medido). Los fallos se reportan con el rango de fotogramas, la regla violada y una posible solución. El agente puede iterar hasta dos veces para corregir fallos usando scene-build o sound, asegurando así que el producto final esté listo para su entrega.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/evgenspm/launchfilm/tree/HEAD/skills/film-qa

Preguntar en tu IA favorita

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

Documentación

film-qa

Revisa fotogramas y números, no intenciones. Un PASS necesita evidencia: una ruta de archivo que hayas abierto o un número que hayas medido. Cualquier otra cosa es NOT CHECKED: <razón>. Nunca escribas PASS para algo que no miraste o mediste.

Rutas (relativas a launch-video/, o studio/ en el repositorio launchfilm): fuente del film films/<slug>/ (film.json, STORYBOARD.md, BRIEF.md), renders out/<slug>/, QA qa/<slug>/ (la CLI escribe report.md; tú escribes QA.md al lado). Flags exactos de la CLI: npx launchfilm <cmd> --help. Comandos con sintaxis probada: references/commands.md.

Procedimiento

  1. Pase automático. npx launchfilm qa <slug> → lee primero qa/<slug>/report.md (hojas, ffprobe, volumen, comprobaciones automáticas). Copia sus números medidos en QA.md como evidencia; no vuelvas a medir lo que ya midió.
  2. Hojas. Abre cada hoja de contactos que el reporte liste (o npx launchfilm sheet <slug>). Lee cada celda. Lista los archivos que abriste en QA.md (evidencia T12).
  3. Fotogramas fijos. npx launchfilm still <slug> <t> --preset <id> para cada preset que el film distribuya, en: cada límite de plano
    • 6 fr, cada inicio de texto + hold/2, fotograma 0, el último fotograma, y cada intervalo que el escaneo de congelados o fotogramas negros marque. Además, un fotograma fijo a --scale 0.25 (480×270 para 16:9) en el fotograma del texto principal: la vista previa de la línea de tiempo X. Lee cada PNG.
  4. Mide lo que el reporte no midió: volumen, pico verdadero, fotogramas negros, intervalos congelados, tiempos de corte vs compás, contraste detrás del texto, zonas seguras, longitudes de líneas de subtítulos. Comandos en references/commands.md.
  5. Comprobaciones de bloqueo T1–T12 a continuación, luego comprobaciones de entrega D1–D16. Cada una recibe PASS / FAIL / NOT CHECKED + evidencia + regla.
  6. Escribe qa/<slug>/QA.md a partir de references/qa-template.md.
  7. Bucle de corrección. Cualquier FAIL: entrega el hallazgo a scene-build o sound con números de fotograma, re-renderiza solo el rango afectado (npx remotion render … --frames=<a>-<b> o el equivalente de la CLI), vuelve a verificar esos elementos. Máximo 2 bucles; luego reporta los FAILs restantes al usuario con los fotogramas fijos adjuntos. Nunca degrades un FAIL a PASS sin nueva evidencia.

Comprobaciones de bloqueo: los 12 indicadores (craft/00)

IdCondición de aprobaciónEvidencia
T1 estáticoningún intervalo congelado ≥ 0.6 s excepto el asentamiento del plano final (≤ 3 s); cada intervalo marcado verificado por fotogramas fijos al inicio y al final que muestren deriva o movimientosalida de freezedetect + 2 fotogramas fijos por intervalo
T2 easeo predeterminadogrep G1 (scene-build) vacío en films/<slug>; sin transiciones CSSsalida de grep
T3 todo de golpecada grupo de ≥ 3 hermanos entra escalonado (estados parciales visibles en una celda de hoja o escalonamiento ≥ 1 fr en código); entrada del grupo ≤ 24 frreferencias a celdas de hoja o líneas de código
T4 una velocidadfilm > 20 s tiene ≥ 1 ruptura de ritmo (silencio, corte brusco a negro, cambio de paleta, hold ≥ 2× mediana del plano); modo lanzamiento: cada corte dentro de ±2 fr del compáslímites en film.json vs beats.json; cortes detectados
T5 sonidocada evento visual en film.json tiene un sfx o está cubierto por VO/música; la música baja con la VO; silencio real donde se planeórecuento de eventos con/sin sonido; volumen de una ventana de VO vs una ventana solo de música
T6 texto como etiquetatexto principal ≥ 8 % de la altura del fotograma cuando el texto es el mensaje (afirmaciones 10 %); cada texto se mantiene ≥ 0.2 × (palabras + 1) s; ≤ 3 líneas; subtítulos ≤ 2 líneastabla por elemento
T7 aspecto planomodo lanzamiento: grano + viñeta presente; un tratamiento nombrado por sección; modo producto: líneas finas, sombras suaves; sin bandas en el degradado más oscuro del mp4 estáticogrep + fotograma fijo del mp4
T8 diseño webun punto focal por fotograma fijo; ningún párrafo > 3 líneas; sin viñetas; croma de UI solo donde el croma es el puntofotogramas fijos
T9 stock genéricocada clip de footage en films/<slug>/footage/SOURCES.md con fuente + licencia; clips de stock graduados y cortados ≤ 1.5 sSOURCES.md + fotogramas fijos
T10 transiciones decorativastransiciones ⊂ vocabulario; transiciones no de corte ≤ 1 cada 5 s; blur-dissolve ≤ 12 frfilm.json
T11 plantilla antes que historiaSTORYBOARD.md tiene approved:; fotograma 0 no es negro y difiere del fotograma fijo en 0.5 s; categoría de producto clara a los 1.5 s (x, li) / 1 s (reel); recompensa después del problema; ≥ 2 s de calma en la superficie de la marca al finalfotogramas fijos 0, 0.5, 1.5 s, últimos 2 s
T12 nunca mirasteeste QA: cada hoja y fotograma fijo listado como abiertolista de archivos en QA.md
Cualquier FAIL en T1–T12 bloquea el render-para-entrega y el empaquetado.

Comprobaciones de entrega (por preset; numeración = craft/08#delivery-checks)

Valores de harness.config.json presets, si no de craft/10#presets. Usa estos ids exactamente; craft/08 y QA.md los comparten.

IdCondición de aprobación
D1video h264, perfil High (ffprobe de Remotion imprime 100), pix_fmt yuv420p, contenedor mp4
D2ancho × alto exactamente el del preset
D3fps constante = fps de la composición (r_frame_rate = avg_frame_rate)
D4duración = film.json ±1 fr, y dentro del rango de longitud del preset (x-16x9 ≤ 140 s, reel-9x16 ≤ 90 s)
D5audio aac LC (ffprobe de Remotion imprime 1), 48000 Hz, 2 canales, ~192 kbps; hero-loop: sin flujo de audio
D6volumen integrado −14 ±1 LUFS; pico verdadero ≤ −1.5 dBTP; VO −16…−14 LUFS donde sea medible
D7moov antes de mdat (inicio rápido)
D8póster = fotograma 0 de ese preset existe, mismo tamaño, no negro (YAVG > 20), muestra el gancho
D9SRT junto al render para cada preset con VO; mismas frases que los subtítulos; HH:MM:SS,mmm; ≤ 2 líneas; ≥ 0.8 s cada una; tiempos ±2 fr
D10nada importante (subtítulos, texto, logotipo, la UI en uso) fuera de la zona segura del preset (fotograma fijo superpuesto)
D11subtítulos quemados en cada preset con VO (hero-loop: ninguno, ph-16x9 según su configuración); ≤ 2 líneas; ≤ 42 caracteres/línea (16:9), ≤ 32 (4:5, 1:1, 9:16); nunca sobre el elemento cambiante; contraste ≥ 4.5:1 para subtítulos y texto sobre footage, ≥ 3:1 acento sobre fondo; legible en los fotogramas fijos de 480 px (16:9) y 360 px (4:5, 9:16) de ancho
D12las listas de congelados y negros coinciden solo con los holds diseñados y los beats negros (listados en film.json o STORYBOARD)
D13etiquetas BT.709 o HD sin etiquetar; el degradado más oscuro no muestra nuevas bandas en el fotograma fijo mp4 vs el PNG
D14tamaño de archivo por debajo del límite: x ≤ 512 MB, README héroe ≤ 10 MB
D15out/<slug>/credits.txt lista cada activo CC BY con su línea de crédito; films/<slug>/footage/SOURCES.md completo
D16solo hero-loop: fotograma N es igual al fotograma 0; un archivo en bucle 3× no muestra ningún salto en las uniones

Legibilidad del texto en el tiempo

Para cada elemento de texto en film.json (afirmaciones, subtítulos, etiquetas, texto de UI al que apunta la VO): palabras, fotogramas in/out, hold = (out − in) / fps, requerido = 0.2 × (palabras + 1) s. También verifica en el fotograma fijo de 480×270 que la línea principal siga siendo legible (letras distinguibles). Una fila por elemento en QA.md.

Reglas para el informe

  • Cada PASS cita evidencia: qa/<slug>/stills/x-16x9-12.30.png, I = −14.2 LUFS, grep G1: 0 líneas.
  • Los números medidos mantienen las unidades y la herramienta que los produjo (system ffmpeg 8.1 ebur128 o remotion ffmpeg loudnorm). El ffmpeg incluido en Remotion carece de ebur128, signalstats, freezedetect, tile, drawbox y salida rawvideo: usa un ffmpeg del sistema para esos y dilo; si no existe, esos elementos son NOT CHECKED.
  • Un FAIL nombra el rango de fotogramas, la regla (craft/NN#anchor o T#/D#) y la corrección propuesta.
  • El bloque de resumen dice READY solo cuando T1–T12 y D1–D16 son todos PASS (D16 solo para hero-loop) (NOT CHECKED cuenta como no listo, con razón).

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

evgenspm/launchfilm

Brand intake for a launch film, product video or promo: capture the product's real colors, fonts, logo, radius and theme from the user's repo (Tailwind config, CSS variables, shadcn tokens, next/font, logo SVG), then the live website, then screenshots, and write films/<slug>/brand.json with a source for every value. Use when starting a new film, when the brand, logo or colors changed, or when the user says "use my brand / my colors / my logo". Hard stop if capture fails: never invent a logo or colors. Not for picking a look or grade (scene-build, craft/06) or for writing copy (story).

evgenspm/launchfilm

Launch video, launch film, product video, product launch, promo, teaser, trailer, demo video, Product Hunt video, X / LinkedIn launch clip, reel, hero loop, motion graphics, "make a video for my product", Remotion film. Router and gated pipeline for making a pro product-launch film with the launchfilm studio in ./launch-video: brief, brand intake, story and storyboard (user approves), sound, scene build, frame QA, render per platform preset, package, post copy, one-time credit note. Use this first for any request to make, remake or revise a launch or product film; it calls the sibling skills (brand-intake, story, sound, scene-build, recipes, film-qa, launch-post). Do not use it to study a reference video (use reference-study), to browse recipes only (use recipes), or for generic Remotion questions unrelated to a launch film.

evgenspm/launchfilm

Write the launch post that goes with the film: X / Twitter post, LinkedIn post, Product Hunt tagline, description and maker comment, written in the founder's own voice, concrete, no AI slop ("excited to announce", em dashes, buzzwords). Triggers: write the tweet, launch post, LinkedIn post, Product Hunt copy, PH tagline, maker comment, caption for the video, announcement copy. Use after the film is rendered (or when the user asks for post copy for an existing film); starts from `npx launchfilm post <slug>` and the film's BRIEF.md and STORYBOARD.md, writes out/<slug>/POST.md. Never posts anything. Not for the film's own on-screen script or VO (story).

evgenspm/launchfilm

Find launchfilm recipes (published launch films studied frame by frame and written down as text, some with ready Remotion code) and build the user's film from 1 to 3 of them. Use for "use a template", "start from a recipe", "make a 30s launch film from recipe <id>", "something like this style", "show me options", "which recipe fits a 30 s vertical launch", "remix recipe X with our brand", or when a storyboard needs a proven hook, feature beat, logo reveal or end card. Searches recipes/CATALOG.md or recipes/index.json, scores and picks 1 to 3, shows each with its source link, reads the recipe.md beat sheet, then scaffolds with `npx launchfilm new <slug> --recipe <id>`: ready code when Recipe.tsx exists, else TODO scenes built from the beat sheet with studio presets, keeping the recipe's timings, springs and sounds re-timed to the user's length and beat grid. Use reference-study to make a new recipe, story for the storyboard, scene-build for scenes, launch-film for the whole pipeline.

Skills relacionados