¿Qué hace filmsmith?
Diez formas de filmar tu código. Crea un cortometraje técnico —una demostración de tecnología, un informe técnico o explicador, el lanzamiento de un producto técnico— a partir de un resumen. Su duración se calcula a partir del contenido, sin personas en pantalla: elige un modo, copia su plantilla, completa content.js, renderiza. Cada imagen se dibuja en código y cada sonido se sintetiza en código (una pista musical generada puede reemplazar la base), por lo que una película solo necesita un agente de código que pueda ejecutar comandos de shell. La habilidad se sustenta en una teoría del gusto (fundamentos), diez principios fundamentales derivados de ella y de los veredictos del propietario, un sistema compartido de colores, tipografía, espacio y movimiento, y diez modos que los aplican, cada uno a un lenguaje visual propio.
El estilo característico de cada modo: rápido, directo y limpio — algo cambia aproximadamente en cada pulso, cada cambio trae algo nuevo, y el espectador nunca espera por la película — y limpio no es simple: pocos elementos, cada uno moviéndose con la fluidez suficiente para mantener la atención (principios 4–6).
Requisitos
- Cualquier agente de código que pueda ejecutar comandos de shell.
SKILL_ROOTa continuación es la carpeta que contiene esteSKILL.md. - Node 22 o superior,
ffmpegyffprobeen el PATH.new-filmlos verifica y se detiene con un mensaje si falta alguno. - Red mientras se configura y renderiza una película: fuentes de un commit fijo de google/fonts y la compilación fija de GSAP del registro npm (ambos almacenados en la carpeta de la película), la primera ejecución de
npx [email protected](que también obtiene su Chrome sin interfaz gráfica), y en el momento del render el compilador de HyperFrames puede obtener faces de fuente de Google Fonts también. No se verifica el renderizado sin conexión. Mantén la versión de hyperframes que fijan las plantillas; no la actualices dentro de una película. - El texto en pantalla está en inglés en esta versión; cuando el usuario solicite chino u otro idioma, indica que las plantillas aún no lo admiten.
Modos
| Modo | 中文 | Aspecto | Variante formal | Úsalo para |
|---|---|---|---|---|
| thread | 一线 | Una línea que se convierte en todo, sin cortes | thread: regla uniforme o línea ensanchada | Reels de una cadena de herramientas de video, movimiento o renderizado |
| ink | 落墨 | Tipografía pesada que golpea en cada pulso, una gota de tinta que florece en color | typeWidth: tipo comprimido o extendido | Revelaciones de nombre, stings de lanzamiento, afirmaciones de una línea |
| plakat | 招贴 | Carteles de estilo internacional en movimiento, un color señal | form: campos cuadrados o diagonales | Una afirmación más pasos y la persona que decide |
| blueprint | 蓝图 | Un dibujo de ingeniería trazado hoja por hoja, sellos ámbar | linework: tinta o lápiz | Sistemas y flujos de trabajo con partes y aprobaciones |
| phosphor | 荧屏 | Terminal nocturna, un acento fósforo, HUD de lanzamiento | screen: raster CRT o plano | Herramientas CLI y de desarrollador |
| tally | 算筹 | Un cuadrado por elemento, reagrupando de gráfico en gráfico | mark: cuadrado, punto o glifo Isotype | Recuentos, cuotas, historias de conjuntos de datos |
| trace | 演算 | Diagrama en vivo oscuro del estado de un algoritmo | stroke: vectorial o boceto | Cómo funciona un mecanismo o algoritmo |
| morph | 一笔 | Una forma de tinta que asciende punto → línea → plano → sólido → interfaz → marca, sin cortes | corners: redondeado o recto | Herramientas de desarrollador y productos de interfaz: una fuente se convierte en cada superficie |
| halftone | 网点 | Impresión de dos tintas: una pieza de la marca permanece quieta mientras cada mundo se imprime a su alrededor, luego retrocede a la marca completa | dot: pantalla redonda, cuadrada o lineal | Lanzamientos de modelos y productos: algunas características, un número, el nombre |
| pulse | 节拍 | Una pregunta representada como una consulta: una palabra por pulso, fondos cambiando a lo largo de un tono, un fundido a blanco para la respuesta | aperture: corte o redondo | Lanzamientos de versiones y respuestas de benchmarks: una conclusión medida |
Cada modo tiene preajustes de color (en su ficha) y una variante formal, ambos configurados en content.js; el renderizado por defecto es como antes. Cada ficha enumera sus casos de uso con un ejemplo práctico y marca la mejor opción. Los nombres anteriores al 2026-10-19 (thread-reel, ink-beat, swiss-poster, blueprint-drafting, terminal-launch, unit-data, diagram-explainer) aún funcionan en new-film.
Reglas de selección y formato de ficha de modo: references/modes/README.md. Los modos no se mezclan. Temas (esqueletos narrativos y reglas por tipo de película): lanzamiento-producto-técnico para thread, ink, plakat, blueprint, phosphor, morph, halftone y pulse; explicador-técnico para tally y trace.
Flujo de trabajo
1. Aclarar
Omite lo que el usuario ya ha proporcionado; pregunta el resto, el modo primero. Pregunta en conversación sencilla, como máximo tres preguntas a la vez; cuando una laguna no bloquee el inicio, asume y dilo. Cada película es 16:9, 1920×1080, para reproducción horizontal a pantalla completa; cuando te pidan una película vertical o cuadrada, indica que la habilidad no la crea.
| # | Pregunta | Por qué |
|---|---|---|
| 1 | ¿Cuál es el contenido: una herramienta, una afirmación con pasos, un sistema, un nombre, un reel, números, un mecanismo? | Decide el modo (tabla de selección); proponlo y explica por qué |
| 2 | ¿De dónde vienen los datos (repositorio, documento, conjunto de datos, algoritmo)? | Cada hecho en pantalla proviene de ahí; cada número se calcula |
| 3 | ¿Plataforma y una duración objetivo, si la hay? | La duración se calcula a partir del contenido (principio 5); un objetivo mueve el tempo dentro del rango del modo, luego se cortan o añaden escenas |
| 4 | ¿Qué preajuste de paleta? | Solo preajustes, listados en la ficha del modo; sin valores hexadecimales personalizados |
| 5 | ¿Restricciones estrictas (debe mostrar, no debe mostrar, URL, nombre)? | Evita retrabajo |
| 6 | ¿Música: este agente puede llamar a una API de generación de música? | Si es así, una base generada al tempo de la película reemplaza la sintetizada (sistema); si no, se usa la base sintetizada y se indica en la entrega |
Se completa cuando el modo, la fuente y el preajuste están nombrados, la fuente musical se conoce y la duración objetivo, si la hay, está definida.
2. Andamiar
node <SKILL_ROOT>/scripts/new-film.mjs <modo> <directorio-pelicula> --palette <id>
Esto verifica Node y FFmpeg, copia la plantilla, añade el runtime compartido como lib/ (sellado con lib/VERSION), escribe el esqueleto de PLAN.md, descarga las fuentes listadas en el fonts.json de la plantilla desde un commit fijo de google/fonts y la compilación fija de GSAP en lib/vendor/; se detiene si alguna falla, por lo que una película nunca se renderiza con un face de respaldo ni depende de una CDN. Las plantillas que necesitan los ejes de una fuente variable los declaran en fonts.json (rangos de weight y stretch, consulta CONTRACT.md). Luego lee la ficha del modo y el TEMPLATE.md de la carpeta por completo: el registro de escenas, el límite de caracteres de cada ranura y la coreografía fija se encuentran allí. Completa cuando puedas nombrar cada tipo de escena que ofrece el modo.
3. Concepto y plan de ritmo
new-film ha escrito un esqueleto de PLAN.md en la carpeta de la película. Complétalo antes de tocar content.js; una película sin plan no se renderiza (principio 10):
- Frase de concepto, en la forma "En esta película, [algo que solo tiene este producto] se convierte en [el dispositivo característico del modo]", y la prueba del rival: con el competidor más cercano en la frase, ya no debe cumplirse. Luego el hilo conductor (el objeto o marco que guía el ojo del primer al último fotograma).
- Lista de prohibiciones: comienza con los valores predeterminados de fábrica del modo y ai-tells.md; añade cualquier cosa demasiado cercana a la película de referencia más cercana.
- Referencia más cercana y tabla de motivos: nombra la película de referencia más cercana y enumera los motivos que la película comparte con ella; en un modo con una referencia conocida, más de la mitad compartidos falla P1.
- Plan de ritmo: una fila por escena — tipo de escena, texto en pantalla y cuál es texto principal o de vistazo, la fuente del dato, en qué se convierte esta escena en la siguiente, y dónde la música hace una pausa para lectura o baja para el momento clave. Las duraciones no se eligen: escribe las escenas en
content.jsy ejecutanpm run fit, que imprime el inicio de cada escena, los pulsos, la necesidad de lectura, el relleno antes de un giro y su parte del redondeo de frase, y la duración de la película, escriberenders/timing.json, y copia la tabla enPLAN.mdentre sus marcadoresfit.npm run fitse detiene si faltaPLAN.mdy advierte si aún tiene partes<!-- fill -->sin completar.
Antes de escribir texto, lee la tabla de duración en el TEMPLATE.md del modo: indica qué ranuras de cada escena cuentan como texto principal y cómo ingresan, para que cada estado pueda presupuestarse en lugar de descubrirse. Completa cuando cada tipo de escena esté en el registro, cada cadena quepa en su límite de caracteres, cada número nombre el código que lo calcula, y npm run fit no reporte errores. Los límites de caracteres son solo un primer filtro: el ancho de una ranura puede depender de sus vecinas, por lo que la verificación de píxeles es la barrera roja en el paso 4. En una plantilla cuyas reglas declaren API de tiempo 3, un error significa que la película rompe uno de los cuatro niveles de cambio (principio 5): más de cinco palabras de texto principal entrando a la vez (ocho para una afirmación, leída en una pausa marcada), una pausa después de un aterrizaje de más de dos pulsos, una composición de más de 6 s, un intervalo de más de cuatro pulsos sin un cambio, o el número o ubicación incorrectos de transiciones expresivas y picos. Divide las líneas largas en frases que entran una tras otra primero, luego convierte las etiquetas repetidas en texto de vistazo, luego divide la escena; nunca reduzcas el tipo ni aceleres por debajo del umbral de lectura. Debajo de la tabla de tiempo, npm run fit imprime las medidas de los niveles; una plantilla que aún esté en API 2 mantiene sus límites de página (doce palabras principales, la pausa de un paso un compás y la última uno y medio, una página cuatro compases) y muestra los niveles como una nota INFORMATIVA.
4. Rellenar y encuadrar primero
Edita content.js (y data/ o run.js donde el modo los use); nunca escribas duration o bars de escena para alcanzar una duración. Luego renderiza fotogramas fijos de los fotogramas clave y míralos antes de animar (el script ejecuta fit primero, por lo que los fotogramas fijos usan la duración actual):
npm run snapshot -- --at <t1>,<t2>,<t3>
Una barra roja en un fotograma fijo nombra una ranura cuyo texto es más ancho que su caja: acorta ese texto. Corrige cualquier fotograma que falle un principio fundamental o un principio del modo: texto informativo por debajo de 25 px, texto ilegible, más de tres niveles tipográficos, dos protagonistas, un segundo acento, copia recortada o desbordada, cualquier cosa de ai-tells.md. Completa cuando cada fotograma clave pase las verificaciones P0 de la ficha del modo.
5. Renderizar
npm run film # fit → audio → check → render, escribe renders/film.mp4
npm run check debe reportar 0 errores. Sus advertencias se evalúan contra la lista de verificación: una advertencia de contraste solo es aceptable en texto que aún está entrando (escribiendo, apareciendo gradualmente) y se lee una vez que se ha posado; cualquier otra advertencia se corrige o se enumera en Problemas conocidos. El sonido sigue content.js en la misma cuadrícula de pulsos; para usar música generada en su lugar, renderízala al tempo y duración ajustados de la película (renders/timing.json), guárdala en assets/audio/ y configura content.bed = { file, offset } (consulta el TEMPLATE.md del modo).
6. Medir y revisar
node <SKILL_ROOT>/scripts/check-film.mjs renders/film.mp4 --film-dir .
sh <SKILL_ROOT>/scripts/contact-sheet.sh renders/film.mp4 renders/contact-sheet.jpg 20
check-film lee renders/timing.json y mide el render contra él: formato y duración, sonoridad con saltos a corto plazo y momentáneos, fotogramas negros, destellos por área, eventos clave en el pulso (dentro de 2 fotogramas) con un evento de imagen y un inicio de sonido (≥ 3 dB dentro de 1 fotograma), tramos estáticos por escena dentro de la máscara de contenido contra un piso de ruido consciente de grano, el ritmo (sin secuencia larga de pulsos casi estáticos, no más de la mitad de la película casi estática), pausas que se estabilizan, traspasos, secuencias de escenas de igual duración, y los cuatro niveles de cambio en los eventos declarados (brechas T0, duraciones de composición T1, transiciones expresivas T2, picos T3, duraciones de pausa), que FALLAN solo para plantillas en API de tiempo 3; los inicios de imagen, los cambios de área grande y el momento más fuerte son estimaciones de píxeles y señal junto a ellos. Texto más pequeño, contraste de texto, niveles tipográficos, área de acento, balance de octava, repetición de cuatro compases y limitación son estimaciones de píxeles o señal, reportadas como INFO. Un elemento sin nada que medir reporta N/A, no PASS; --json da cada resultado con el elemento de la lista de verificación al que sirve.
Luego recorre references/checklist.md y las verificaciones de la ficha del modo: P0 desde la base de la pirámide hacia arriba, luego juzga de arriba hacia abajo (ajuste, frescura, textura). Mide antes de cambiar nada; corrige la causa y luego vuelve a medir. Completa cuando cada P0 pase y cada fallo P1/P2 esté corregido o escrito en "Problemas conocidos" en el README de la película.
7. Entregar
Proporciona la ruta del MP4, la hoja de contactos y un README con el plan, el modo y el preajuste, la fuente musical (sintetizada o generada), los comandos, el informe de check-film y los problemas conocidos; indica "aún no confirmado auditivamente" a menos que alguien haya escuchado. Pide el veredicto del usuario y cítalo textualmente con la fecha; cuando el usuario no esté disponible, escribe "veredicto pendiente" y detente.
Mantenedores: del veredicto a la regla
Solo para quien mantiene el código fuente de esta habilidad; el creador de una película se detiene en el paso 7. Un veredicto no edita directamente una ficha de modo ni los principios. Primero colócalo en una capa de la pirámide y verifícalo contra fundamentos.md: en las capas 1–2 decide el estándar, en las 3–4 el consenso del dominio a menos que se escriba una excepción con su razón, en las 5–6 el propietario elige entre candidatos que la teoría juzga igualmente buenos. Una tendencia se convierte en regla después de dos veredictos consistentes.