¿Qué hace Doctrina de Movimiento (Gateway)?
Léela antes de componer cualquier animación. Decide QUÉ sucede en cada costura y cómo se desempeña cada escena; las habilidades técnicas la implementan. Estas reglas anulan las guías de movimiento genéricas / aguas arriba. El fallo que esto previene: escenas creadas de forma aislada — el impulso visual del ojo muere en cada corte, y las escenas se tambalean en su lugar entre la entrada y la salida.
Mapa de rutas
| Decisión (esta habilidad) | Habilidad de implementación |
|---|---|
| Elección de transición de costura + parámetros + código | cut-the-curve §1–5 (el catálogo) |
| Cascadas de entrada de texto / elemento | cut-the-curve §6 (entrada en cascada) |
| Reposicionamiento de grupo dentro de la escena (sin corte) | cut-the-curve §7 (curva de empuje) |
| Acción liderada por cursor / inicio de escena / encendido morph | oversized-cursor |
| Mecánicas de renderizado de costura / protector de destello blanco | seam-craft |
| Trabajo de lanzamiento de producto / explicador / título | superpone text-beat-economics, brand-faithful, captions-overlay sobre la habilidad aguas arriba |
Orden de creación: ledger de vectores (ledger.json) → SELLAR las costuras maestras desde él (scripts/seam-stamp.mjs --ledger ledger.json --write index.html) → ruta de movimiento sostenido por fase → portadores y causas → componer builds → VERIFICAR (scripts/seam-gate.mjs).
Crea a mano solo los morphs / match-cuts de nivel A; las costuras selladas pasan la puerta por construcción.
Parte 1 — La Ley de la Costura
La Ley Vectorial
Cómo la Escena A sale determina cómo la Escena B entra: mismo eje, misma dirección, velocidad igualada, corte a mitad del movimiento en ambos lados.
- Eje — x sigue siendo x, y sigue siendo y, Z sigue siendo Z. Nunca intercambies ejes a través de un corte.
- Dirección — nunca reflejes. En Z, dirección = el SIGNO del cambio de escala: crecer = empujar (cámara hacia adelante), encoger = tirar (cámara hacia atrás). Una salida que retrocede respondida por una entrada que crece desde pequeño es un vector reflejado — la violación más común, porque crecer desde pequeño es la entrada de elemento por defecto.
- Velocidad — velocidad inicial de entrada ≈ velocidad final de salida, a través de suavizados reflejados (salida
power4.in+ entradapower4.out, misma distancia y duración; el lado entrante recoge ≥50% del camino notional). Mecánicas encut-the-curve. - Fase — el corte cae a mitad del movimiento en AMBOS lados. Detenerse en reposo antes del corte, o comenzar desde el reposo después, es un tiempo muerto.
La Corriente
Cada película elige UNA dirección dominante (por defecto de la casa: IZQUIERDA). Cada costura ordinaria la usa. Otros vectores están RESERVADOS — gastar uno significa algo:
| Vector | Significado |
|---|---|
| La corriente (IZQUIERDA) | "siguiente momento" — progreso neutral hacia adelante |
| Hacia arriba | elevación — una conclusión o revelación se eleva sobre lo anterior |
| Z hacia adelante (zoom a través) | empujando más profundo en el mismo pensamiento |
| Z hacia atrás (zoom inverso) | LLEGADA — algo más grande aterriza |
| Estallido de escala (explosión hacia afuera) | dejando un mundo — una superficie explota ante la cámara |
- Nunca ejecutes costuras consecutivas en direcciones opuestas — el ping-pong se lee como un error.
- Un cambio de dirección necesita una causa visible (clic / rebote / impacto) o un límite de capítulo.
El Ledger de Vectores
Escríbelo antes de crear cualquier línea de tiempo maestra — como ledger.json en la raíz del proyecto (esquema: references/seam-gate.md). Una fila por costura: tiempo de corte, vectores de salida y entrada (eje + dirección firmada; las filas Z llevan el signo de escala), selectores, técnica. La salida y la entrada deben coincidir; si una fila no coincide, arregla el plan, no el suavizado. El verificador comprueba la consistencia de las filas estáticamente antes de cualquier muestreo en tiempo de ejecución.
Portadores
El ojo sigue objetos, no abstracciones. Las costuras más fuertes pasan un portador concreto a través del corte en posición Y velocidad igualadas: un cursor a mitad de camino, un contenedor que se encoge / acopla en el siguiente diseño, una marca que vuela a su ranura exacta, el grupo de palabras de un corte en cascada. Sin portador natural, los héroes de la escena lo llevan (viaje parcial + desvanecimiento temprano, entrada en pleno vuelo). Nunca un fundido cruzado — no tiene portador en absoluto.
Movimiento Causal
Encadena el movimiento para que cada acción sea visiblemente lanzada por la anterior: clic → comprimir → liberar resorte → vuelo → impacto → retroceso → revelación.
- Los efectos comienzan EN el fotograma causante — misma posición en la línea de tiempo, nunca "poco después".
- Las reacciones escalan con la masa implícita: los elementos grandes rebotan más lento, los pequeños se rompen rápido.
- Una fuerza es una licencia para cambiar de dirección; un giro sin causa es un ping-pong.
La Puerta de la Costura (puerta de build — ejecuta el verificador, salida 0 o la costura no está hecha)
node <SKILL_DIR>/scripts/seam-stamp.mjs --ledger ledger.json --write index.html # generar
node <SKILL_DIR>/scripts/seam-gate.mjs verify --ledger ledger.json --project . # verificar
El script (uso + esquema del ledger: references/seam-gate.md) aplica numéricamente, por costura: consistencia de fila del ledger, salida aún en movimiento en el corte, entrada en pleno vuelo (nunca desde el reposo), dirección medida = dirección del ledger, coincidencia de velocidad salida/entrada (WARN), superposición cero (un lado visible por fotograma — el corte no es una disolución), la regla del signo Z (d(escala)/dt mismo signo en ambos lados; las entradas propias de la escena entrante se escanean en busca de lucha de signos), y continuidad del rectángulo portador con la escala de los ancestros incluida. Usa seam-gate.mjs probe --t <cut> para encontrar los selectores de portador reales de cada costura al crear el ledger.
Reglas que el script no puede verificar — aún tuyas:
- Las ediciones reabren la costura. Cualquier cambio en el primer/último ~1s de una escena (incluyendo re-timing a un nuevo VO) invalida la auditoría de ese límite — vuelve a ejecutar el verificador.
- El audio es el reloj. Ajusta el tiempo de las escenas a las marcas de tiempo reales de la palabra del VO; nunca apresures una lectura para encajar en un espacio. Una regeneración del VO reabre sus costuras.
- Trampa del clip-gating (la causa habitual de un FALLO de superposición cero): un clip cuyo
data-startprecede a su tween de entrada se muestra oculto en su opacidad inicial — estableceautoAlpha: 0inicial Ydata-start= el tiempo de corte, nunca antes.
Parte 2 — Rendimiento (la escena sigue funcionando)
Sin bamboleo ocioso
Los bucles senoidales ociosos (respirar, flotar, derivar, pulso de brillo) están PROHIBIDOS como movimiento sostenido — se leen como "el video está esperando". Una escena que termina de entrar con segundos restantes es un error de planificación: añade historia, no bamboleo. Cada fase entre entrada y salida es propiedad de una de estas rutas (nombra la ruta en el plan):
| Ruta | Qué es |
|---|---|
| Revelaciones escenificadas | Retén contenido; entrégalo en los ritmos de la narración — el fotograma sigue ganando información (por defecto para ≥2 grupos de contenido) |
| Cámara con intención | Un camino de escala+pan mapeado: establecer amplio → viajar → llegar al sujeto |
| Vida UI secuenciada | El producto se comporta a lo largo del tiempo: el progreso avanza, el paso se resalta, los contadores marcan |
| Secuencias animadas | Los elementos actúan un compás: una tarjeta se archiva en una pila, un elemento se arrastra, un resultado se ensambla |
| Acción liderada por cursor | Un cursor sobredimensionado guía el ojo a un disparador; su CLIC enciende el siguiente ritmo (oversized-cursor) |
Prueba: pausa en cualquier segundo — algo significativo debe estar en pleno vuelo (una revelación aterrizando, la cámara viajando, la UI haciendo lo que la narración dice).
Quietud antes del clímax
Programa una pausa de 0.3–0.75s entre la acción principal y su resultado — la coma dramática. Una escena que salta directamente de la acción al resultado lo pierde.
Intenciones de tiempo
- Entrada única ≤ ~800ms; acumulación más larga = escalonamiento de múltiples elementos, no un elemento lento.
- Salida ≈ 75% de la entrada. Excepción: cut-the-curve invierte esto (entrada ~127% de la salida).
- Escalonamiento total ≤ 500ms; con 8+ elementos, aprieta el retraso por elemento o escala los primeros.
- Suavizados prohibidos:
bounce.out/elastic.out. El sobreimpulso de entradaback.out(1.4–1.7)está bien. - Elementos similares comparten una intención de suavizado + duración — nunca un par único por elemento.
Vocabulario de transición
Usa solo 2–3 transiciones entre escenas por película y repítelas; el límite por defecto es cut-the-curve en la dirección de la corriente. Los morphs de elementos compartidos escritos a mano (intent: morph) no cuentan para el presupuesto.
Anti-Patrones
| No hagas | En su lugar |
|---|---|
| Crear la entrada de cada escena de forma aislada | Escribe el ledger de vectores primero |
| Fundido cruzado entre escenas | Cut-the-curve en la dirección de la corriente |
| La salida se completa, LUEGO la escena cambia | Corta a mitad del movimiento en ambos lados |
| La entrada comienza desde el reposo después de un corte | Entra ≥50% del camino notional |
| Salida de zoom inverso → entrada creciendo desde pequeño (o empujón → retracción sobredimensionada) | Iguala el signo de velocidad de escala (Puerta de la Costura 7) |
| La propia introducción emergente de la escena entrante bajo un traspaso de costura Z | Mantén su fotograma de apertura compuesto, o iguala el signo |
| Bamboleo ocioso / respirar / flotar para llenar tiempo | Asigna una ruta de movimiento sostenido; o añade historia |
| Giro de dirección sin causa | Gasta una fuerza, o mantén la corriente |
| Vectores reservados usados como variedad | Por defecto a la corriente; gástalos en significado |
| Reacción unos pocos fotogramas después de su causa | Encendido en el mismo fotograma |
| La acción salta directamente al resultado | Programa quietud antes del clímax (0.3–0.75s) |