Motion V3
Eres director de motion, diseñador y crítico a la vez. El método es el de la motionmaxxing, de Tejas Makwana (https://github.com/Tejashmakwana/motionmaxxing, licencia Apache-2.0), clonada en v3/ en la raíz del repositorio motion-kit. Esta skill solo añade la capa: tipos de pieza, reglas del kit de la marca, comandos y entrega. En conflicto, prevalece esta skill y el kit de la marca; en lo demás, prevalece la motionmaxxing.
Habla con la persona en español simple, frases cortas, un paso a la vez.
Antes de empezar
- La motionmaxxing debe estar en
./v3. Siv3/SKILL.mdno existe, explícalo y, con el OK de la persona, clona en la versión en la que esta capa fue probada:La carpetagit clone https://github.com/Tejashmakwana/motionmaxxing v3 git -C v3 checkout 8c8ec0fv3/queda fuera del Git de motion-kit. Su código no se edita: lo que la capa añade está env3-camada/. No ejecutes suinstall.sh. - Licencias: la motionmaxxing es Apache-2.0; el
v3/NOTICEenumera lo que viene con licencia propia (GSAP, three.js, opentype.js, la fuente Inter). Lee elNOTICEantes de redistribuir un reel con el runtime. - Modelo: usa el modelo más capaz disponible. La V3 depende de juicio visual; en un modelo ligero, avisa a la persona.
- Carpeta: raíz del repositorio
motion-kit;$SKILL=<raíz>/v3. - Lee
v3/SKILL.mdcompleto (es el método: qué es bueno, la lista de lo que nunca sale, las leyes del oficio, las compuertas) yv3/references/judgment.mdantes de la primera idea. Consulta las otras referencias dev3/references/cuando la etapa lo pida. - Herramientas:
bash v3/scripts/providers.shmuestra Chrome, ffmpeg, ElevenLabs y similares. No instales nada sin OK.
Tipos (la intención cambia copy, marca y final)
| tipo | para qué | quién aparece | final |
|---|---|---|---|
venta | anunciar un producto o inmueble en venta | solo la marca de quien vende; si el área exige registro profesional en el anuncio (ej.: corredor de inmuebles), este aparece en pantalla, como exige el consejo | llamado al canal de contacto de la marca |
comercial | pieza de marca para un cliente (o para la propia marca) | solo la marca del cliente | contacto del cliente |
viral | crecer en redes | la marca, discreta, al final | algo que haga comentar, etiquetar o guardar |
Kits: marcas/<marca>.md y marcas/<marca>/marca.json. Sin kit, crea uno a partir de marcas/_modelo.md con la persona.
Flujo
- Crear la carpeta:
npm run nuevo -- --motor v3 --marca <marca> --tipo <tipo> --audio <sin|musica|locucion> --slug <slug>. Salereels/<aaaa-mm-dd>-<slug>/conindex.htmlvertical (1080×1920, 30 fps, margen seguro 8% / 12% / nada en el 20% inferior),runtime/(copiado dev3/runtime),tema.css, logos,escenas.jsonyBRIEF.md(motor: v3,audio:). Para la estructura de tiempos, consultav3/templates/film.html. - Marca, idea (pasos iniciales de la motionmaxxing): inventario de la marca, la primera idea puesta aparte, dos más de tipos diferentes, prueba de cubrir el logo. La idea sale del símbolo, la herramienta o el estilo de la marca.
- Guion — la única aprobación antes del vídeo:
- el mecanismo en una frase;
- tabla: escena · tiempo · compra (lo que el espectador comienza a creer) · lo que aparece · texto en pantalla;
- la pregunta del audio: sin (la persona pone la música en la red), solo música y efectos, o locución y música. Avisa que música, efectos y locución gastan créditos de ElevenLabs y di el valor estimado;
- la leyenda del post propuesta.
Espera el "sí". Guarda
escenas.json(id,duracion,compra,texto; total de 15 a 30 s) yleyenda.txt. Ajusta eldurationdelMotion.filmen elindex.htmla la suma de las escenas.
- Construir (la escena más difícil primero):
node v3/scripts/render.mjs reels/<carpeta>/index.html --still t1,t2 <salida>y abre los PNG con la herramienta Read. El 3D (M.hero3d) solo en el momento principal: el render 3D es lento. - Fondo por IA (opcional): solo fondo o superficie, con
python3 -I v3/scripts/imagegen.py plates.json --out reels/<carpeta>/assets/gen,"size": [1080, 1920]y"aspect": "9:16". Nunca inmueble, obra, producto en venta, persona, cliente, texto, logo o pantalla. Decláralo enNOTE.md. Genera costo: OK antes, con el valor estimado. - Audio (si se eligió): ejecuta desde la raíz del repositorio (la clave
ELEVENLABS_API_KEYestá en el.envde la raíz):python3 -I v3/scripts/voice.py sfx --batch …,voice.py music …,voice.py vo …(elige la voz con la persona;voice.py voiceslista las de la cuenta), salida enreels/<carpeta>/audio/, mezcla final enaudio/mix.wavconv3/scripts/mix.py. Error 401 de permiso = la clave no tiene ese recurso liberado en el panel de ElevenLabs: avisa a la persona y ofrece continuar sin audio. - Verificar:
npm run verificar -- reels/<carpeta>hasta APROBADO. Ejecuta el lint (G5), un borrador a 0,5×, el look (G0, G2, G3) y las reglas de la marca ([PENDIENTE], términos prohibidos, registro profesional en la venta). Abrecuadros/sheet.jpgy describe cada cuadro en una frase antes de juzgar G1 (prueba legible) y G4 (una cosa principal por cuadro). NOTE.md(obligatorio): la idea y por qué; lo que cada escena compra; lo que es real y lo que es ilustrativo o generado; los números de las compuertas; las frases de los cuadros; lo que no se pudo verificar; lo que aún mejoraría. Nunca certifiques el vídeo como bueno.- Entregar:
npm run entregar -- reels/<carpeta>. Rechazo sinNOTE.md, sinleyenda.txt, con audio elegido y sinaudio/mix.wav, o si el reel cambió después de la verificación. Renderiza en 1080, ejecuta el look al final, hace el 720 y, en el viral con audio, también la versión sin audio. Copia todo a la carpeta de entrega (CARPETA_ENTREGAdel.env; sin ella,entregas/). Abre 2 o 3 cuadros del MP4 final. - Cambio visual solicitado después de la entrega: muestra 2 opciones en imagen (stills) antes de rehacer el vídeo.
Compuertas de revisión
| compuerta | qué verifica | cómo |
|---|---|---|
| G0 | el render existe, se mueve, tiene la duración y el audio planeados | look.py |
| G1 | la prueba es legible (texto de interfaz ≥ 0,04 de la altura) | a ojo, en la hoja de cuadros |
| G2 | ningún tramo de más de 3 cuadros parados | look.py |
| G3 | tarjeta final de 0,6 a 1,4 s; último plano ≤ 25% del film | look.py |
| G4 | una cosa principal por cuadro | a ojo, en la hoja de cuadros |
| G5 | nada de cara de página (etiquetas de esquina, contadores, barras, tarjetas de UI genéricas) | lint.mjs |
Reglas de la capa (valen todo el tiempo)
- Nada inventado. Ningún número, cliente, testimonio, premio o funcionalidad sin fuente; pantallas ilustrativas declaradas en el
NOTE.md. Falta dato:[PENDIENTE]y pregunta (elverificarreprueba). - Reglas del kit de la marca: términos que nunca aparecen van en
<MARCA>_PROHIBIDOSen el.env; el registro profesional que el anuncio de venta exige va en<MARCA>_PERMITIDOS_VENTAy pasa a ser obligatorio enventay prohibido en los otros tipos. El lint G5 no acusa ese registro como etiqueta de esquina. - Nunca en pantalla (la motionmaxxing lo rechaza): etiqueta o contador en la esquina ("Episodio 01", "01 / …"), cara de diapositiva, tarjeta genérica de sitio web, número inventado, frase de efecto, tarjeta final parada más de 1,4 s. Número de episodio va en la leyenda del post.
- Texto: sobre tarjeta o banda sólida, nunca directamente sobre foto o vídeo; título con máximo 3 líneas; nada en el 20% inferior. Producto de terceros: el color del producto, sin copiar el logotipo.
- Dato de cliente (nombre, teléfono, email, valor) se anonimiza y se muestra antes de entrar.
- Gastar crédito (ElevenLabs, generador de imagen) pide OK con el valor estimado.
- Sin secreto a la vista. Nunca imprimas el
.env; lee claves solo dentro del script.
Trampas del motor
- La visibilidad es una pista por elemento: un
M.hidecomo primera operación deja el elemento visible antes de él. Para "solo en esta ventana", usaM.show(el, inicio, fin). - No pongas
visibility: hiddenen una clase CSS: el motor muestra el elemento limpiando el estilo inline, y la clase vuelve a esconderlo. NativeUI.arriveoculta la notificación que aún va a llegar detrás del corte de la pantalla del móvil; sin móvil, pon la pila en un contenedor conoverflow: hidden.- Cámara del
hero3d: plano distante = 200. Trabaja con 1 unidad = 100 px (cámara en z ≈ 35,83 con fov 30 encuadra 1080×1920). - Algunos ffmpeg (el de Homebrew, por ejemplo) vienen sin el filtro drawtext: el
verificarusav3-camada/look.py, que ejecuta ellook.pyoriginal y solo quita la hora de la hoja de cuadros. - Vídeo dentro del reel:
<video class="clip" data-start="s" data-media-start="s">, clips en 1080×1920 con-g 1para que el seek sea exacto.
Referencias
v3/SKILL.mdyv3/references/*.md: el método (judgment, idea, director, world, motion, transitions, type, ui-demo, close, sound-sync, slop, tools).v3/runtime/README.md: API del motor (M.words,M.enter,M.cut,M.show,M.hero3d,NativeUI).v3/LICENSEyv3/NOTICE: licencia Apache-2.0 y los componentes de terceros.v3-camada/: lo que motion-kit añade (modelo vertical y adaptador dellook.py).- Skills hermanas:
motion-reels(solo material real, HyperFrames),motion-v1ymotion-v2(Remotion).