Figma storyboard → diseño de movimiento de escena
Un storyboard es una serie de fotogramas estáticos de 1920×1080. Tu trabajo es producir una escena cuya línea de tiempo se mueva entre ellos. La mayor parte del movimiento ya está en el diseño — recupéralo en lugar de inventarlo.
¿No puedes ejecutar código? En todos los lugares donde esta receta dice "crea un script generador", construye la escena a través de
picsart_scene_patchen su lugar y fija las mismas invariantes conpicsart_scene_query_layoutdespués de cada cambio (ver Comandos más abajo). El método es idéntico — solo la superficie de ejecución difiere.
El flujo
- Lee el árbol una vez — si el usuario ha compartido el storyboard a través de su conector de Figma, lee el árbol de fotogramas de la página una vez: devuelve cada fotograma, capa, nombre y caja. Todo lo siguiente se deriva de él. No recorras el tablero fotograma por fotograma para explorar.
- Planifica los tiempos — escribe la tabla de tiempos antes de crear (abajo).
- Extrae cada elemento como su propia capa del diseño que el usuario compartió: construye geometría de forma editable a partir de sus medidas de origen y usa
picsart_scene_import_figma_paintpara el relleno CSS, sombra o degradado en una capa existente. Mantén el texto en vivo. La conversión automática de nodos de forma no está expuesta aquí. Usa una imagen solo para un tratamiento no soportado o una fuente genuinamente sin capas; ver extracción. - Construye la escena a partir de la geometría, y fija cada regla. Donde puedas ejecutar código, crea un script generador (no JSON escrito a mano) para que cada regla se convierta en un
assert; donde no puedas, constrúyela a través depicsart_scene_patchy fija las mismas invariantes conpicsart_scene_query_layout. La geometría proviene de los metadatos, nunca de la inspección visual. - Verifica numéricamente, luego exporta.
Los pasos 3–5 se ejecutan una vez por escena, en orden — ese bucle es el método.
Un fotograma estático
Cuando la solicitud es un solo fotograma (una imagen fija, una imagen de tienda, una tarjeta), no hay storyboard. Omite los tiempos y construye ese fotograma como una escena fija:
- Lee el fotograma seleccionado a través del conector de Figma compartido por el usuario. Su tamaño es
composition.widthyheight, su relleno escomposition.background, y unadurationcorta (1) es suficiente. - Una capa por hijo, en orden de pintura (el primer hijo del árbol en la parte inferior). La
positionde una capa es el CENTRO de su caja en el fotograma,[x + width/2, y + height/2]: una capa gira y escala alrededor de su centro. Verifica un hijo anidado contra el fotograma: algunos grupos almacenan hijos relativos al grupo (references/figma-extraction.md). - Cada hijo en el medio que lo mantenga editable: crea geometría de forma, luego aplica su pintura CSS a través de
picsart_scene_import_figma_paint, texto como texto en vivo, y cada relleno IMAGEN como una capa de medios en su mapa de bits original — nunca laexportdel nodo, que aplana la transparencia sobre el fondo del fotograma — por suscaleMode(FILL→cover,FIT→contain,CROP→cover+crop,TILE→no expresable; la tabla y las matemáticas de recorte están en references/figma-extraction.md, "Rellenos de imagen"). Sube cada imagen primero; una URL de activo de Figma expira. - Un grupo local que recorta o funde como uno solo suele ser una capa
compositionen línea. Usa una referencia de escena cuando sea intencionalmente un componente reutilizable y de propiedad separada. - Verifica con números, luego una imagen completa.
picsart_scene_query_layouten0: cadaboxdentro de un píxel de su caja de Figma. Una imagen de nivel superior sincropllevadrawn: su caja ysourceCropcomo los muestra el diseño. Una imagen dentro de un grupo leeclippedBox, la parte que su grupo deja visible. Luego unpicsart_scene_contact_sheetcontimesexplícitos yresolutionigual a las dimensiones de la composición: una miniatura pierde líneas de 2 px y texto pequeño.
Capas, no pantallas
La escena es una composición de capas móviles, nunca un montaje de pantallas planas. Un diseño viene en capas; mantenlas separables para que cada una pueda moverse por sí sola — esa es toda la razón para construir una escena en lugar de hacer transiciones cruzadas de capturas de pantalla.
- Reconstruye, no rasterices. Construye geometría de
shapeeditable a partir del diseño compartido por el usuario. Aplica pintura CSS a esa capa existente conpicsart_scene_import_figma_paint. La importación completa de nodos de diseño de Figma no está soportada aquí. Mantén las esquinas, trazados y ubicación editables y el texto en vivo. Aplanarlos en un PNG o SVG impide la animación independiente de sus partes. - Cuando tomes activos de un diseño compartido a través del conector de Figma del usuario, nunca tomes un fotograma padre en lugar de sus hijos. Los hijos son lo que se mueve.
- Aplanar a una imagen es el recurso de último recurso — para una fuente genuinamente sin capas (un activo rasterizado, sin acceso a capas). Cuando recurras a esto, dilo claramente.
- La costumbre de "exportar un nodo para apariencia fiel" en references/figma-extraction.md trata sobre la fidelidad de un elemento que ya has elegido traer completo. No generalices a "rasterizar todo".
Construye escena por escena, en orden
Esto importa más que cualquier regla individual a continuación. No crees toda la línea de tiempo y luego la presentes. No prototipes un momento impactante de la mitad de la historia primero: el movimiento diseñado en el medio no tiene nada a lo que unirse, por lo que se descarta.
Empieza en el primer fotograma y avanza. Por escena:
- Divide por unidades de movimiento semánticas, no solo capas editables. Un control, su etiqueta y su icono normalmente comparten un único propietario de colocación. Añade movimiento local de hijo solo para un cambio de estado deliberado. La quietud es jerarquía útil y tiempo de lectura, no un defecto. Para agrupación, crecimiento de panel y redistribución, usa linked-element-motion (obtén con
picsart_scene_recipe, nombrelinked-element-motion). - Crea su movimiento añadiendo a lo que ya está construido — añadiendo al generador donde puedas ejecutar código, parcheando la misma escena donde no puedas. Nunca empieces de nuevo: las constantes y comprobaciones de cada tiempo anterior permanecen, para que un nuevo tiempo no pueda romper silenciosamente uno ya establecido.
- Renderiza ese tiempo y muéstralo como video sobre su propia ventana. El movimiento no puede revisarse en una imagen fija o en un contact sheet.
- Toma dirección y re-renderiza. Espera varias pasadas en un tiempo. La dirección llega como cualidades, no números — "más rápido", "desacopla los azulejos", "ese elemento hace ruido, quítalo" — y cada una se traduce en temporización, escalonamiento o inventario de elementos, no en un nuevo diseño.
- Luego diseña la unión a la siguiente escena como su propio paso explícito. Una escena no está terminada cuando se ve bien; está terminada cuando su salida y la entrada de la siguiente escena están acordadas. La unión es la parte que el storyboard no contiene, por lo que es donde la dirección es más específica ("alejar, luego la siguiente escena llega desde la cámara, no con zoom") y donde adivinar desperdicia más tiempo.
Cuando la iteración autónoma esté autorizada, usa estos como puertas de verificación internas y muestra hitos significativos en lugar de solicitar aprobación para cada tiempo. Para líneas de tiempo grandes, usa large-scene-assembly (obtén con picsart_scene_recipe, nombre large-scene-assembly) para mantener los componentes editables de forma independiente.
Solo entonces avanza. Mantén la tabla de tiempos actualizada mientras avanzas — es el registro de lo acordado, y la línea de tiempo es larga antes de que la construcción esté terminada.
Lee el storyboard
- El orden x del lienzo es el orden temporal. Los fotogramas se colocan de izquierda a derecha; ordénalos por
x, no por nombre. - Los nombres de los fotogramas mienten; el orden no. Los nombres duplicados son comunes (un diseñador duplica un fotograma y olvida renumerar). Cuenta los fotogramas contra los números antes de concluir que falta uno.
- Los fotogramas con nombres duplicados suelen ser poses A→B de un tiempo. Compara sus conjuntos de capas: los mismos hijos, transformaciones diferentes significan que el diseñador codificó el movimiento como un delta. Ese movimiento es medible, no una decisión de diseño que tengas que tomar.
- Cuando el diseño llega a través del conector de Figma del usuario, captura los fotogramas uno a la vez: un tablero completo capturado de una vez es mucho más ancho que alto y se reduce a una astilla.
Lo que es genuinamente tuyo para diseñar: la pausa, la suavización, y las uniones entre fotogramas no emparejados.
Para cada unión no emparejada, usa motion-scene-continuity (obtén con picsart_scene_recipe, nombre motion-scene-continuity) para nombrar la relación semántica y elegir capa persistente, transición de catálogo, corte duro, encadenado, o transición personalizada antes de escribir la mecánica. Este flujo de trabajo de storyboard aún posee la recuperación del movimiento implícito por los fotogramas de diseño emparejados; continuity posee solo la relación y representación en sus límites.
Resuelve transformaciones, no las elijas
Una escala uniforme s alrededor de un pivote desconocido C mapea p → C + s(p − C). Por lo tanto, un par de coordenadas correspondientes fija el pivote:
C = (p2 − s·p1) / (1 − s)
Toma s de la relación de tamaño de cualquier elemento entre los dos fotogramas, resuelve C, luego verifícalo contra un segundo elemento independiente. La concordancia hasta una fracción de píxel significa que tienes la transformación real del diseñador; el desacuerdo significa que el elemento se movió por sí solo y necesita su propio tratamiento.
Escribe la tabla de tiempos — deltas medidos, el pivote resuelto, la asignación de tiempo. Nueve tiempos de coreografía con números no sobrevivirán al desplazamiento hacia atrás, y querrás compararla contra los renders.
Reglas de movimiento
Detalle completo y números trabajados: references/motion-rules.md. Las reglas que deciden si un tiempo se lee correctamente:
- Rígido vs independiente. Escalona posición/escala solo para objetos genuinamente independientes (azulejos de cuadrícula, pegatinas). Una tarjeta, un bloque, o cualquier objeto con partes debe compartir un reloj de geometría, o sus partes se desvían del registro en pleno vuelo. Pon el escalonamiento en el fundido en su lugar.
- Un fundido debe ser co-terminal con su movimiento para leerse como un solo gesto. Si el fundido termina antes de que termine el movimiento, el ojo ve dos eventos. Empareja también las curvas de suavización.
- En un render de fotograma plano, un zoom-in es seguro; una traslación no lo es. Escalar hacia arriba nunca expone un borde; trasladar expone el borde trasero de la propia imagen.
- Tamaño del viaje de entrada para que la parte delantera comience justo fuera del lienzo — viaje
≥ canvas − leftmost_x. Muy poco y comienza en pantalla; demasiado es tiempo muerto. - Las salidas aceleran (
ease_in). Dale a dos objetos diferentes extensiones para aceleración diferencial. - El cromo de selección es exclusivo — nunca dos marquesinas a la vez, y no debe sobrevivir a su tiempo. Si los pasos de elemento superponen sus extensiones, un elemento pierde su selección en medio de la manipulación.
Hechos de renderizado que cambian la creación
- La opacidad se compone en luz lineal. No escala el valor sRGB codificado. Para alcanzar un brillo medido, convierte a través de gamma:
opacity = linear(target) / linear(source). - La opacidad es solo un control de oscuridad sobre un fondo negro. Sobre un fondo claro hace que un sujeto oscuro sea más claro a medida que el fondo se transparenta. Un oscurecimiento real allí necesita una pantalla oscura encima, no opacidad en el sujeto.
anchorda un pivote no centrado (píxeles locales de la capa desde la esquina superior izquierda de la capa). Úsalo para escalado con pivote en esquina — por ejemplo, escalar alrededor de la esquina superior izquierda de una caja de selección para que se lea como arrastrar el asa inferior derecha. No finjas pivotes con fotogramas clave de posición.- La animación de texto por carácter está integrada. El
content.animations[]de una capa de texto es un animador de After Effects + selector de rango:basedOn: "character", másrandomizeOrder/randomizeSeedpara parpadeo. Apila entradas en diferentes semillas para que no latan al unísono. La extensión activa es[start + offset, end + offset]: una ventana estrecha estaciona su borde lejano al final del texto enoffset: 1 − end, o borra cada glifo enoffset: 1 − start(1 − w/1solo cuandostartes 0 — no los uses de otra manera). Una ventana COMPLETA (start:0,end:1) con una forma de rampa es en cambio una rampa exactamente tan ancha como el texto: barreoffset-1 → 1y cada glifo se suaviza sobre la mitad del barrido, escalonado por posición en lugar de cambiar todos a la vez — vertextAnimationAuthoring.rawSelectorenpicsart_scene_capabilitiespara los números trabajados. - El SVG en línea debe estar codificado en URL con
#codificado como porcentaje. Un#sin codificar inicia un fragmento URI y trunca el SVG en su primer color hexadecimal. - Mide la suavización, no confíes en los nombres preestablecidos. Muestra el valor al 25%/75% de una ventana de fotograma clave y confirma que la curva es la que pretendías.
Verifica numéricamente
La inspección visual de un contact sheet reducido producirá falsas alarmas — reporta de manera confiable errores de posición que la medición refuta. Compara fotogramas a resolución completa, o mide.
picsart_scene_validateverifica solo la estructura. Pasa en una escena cuyas capas no renderizan nada.picsart_scene_query_layoutresuelve cajas sin renderizar — úsalo para confirmar la geometría contra los números de Figma antes de gastar un render. Es solo geometría: una caja resuelta no dice nada sobre si el contenido se decodifica.- Para encontrar huecos donde no hay nada en el lienzo, mira los tiempos sospechosos con
picsart_scene_contact_sheetcontimes: [t1, t2, …]yresolutionestablecida alcomposition.widthycomposition.heightde la escena. Un fotograma que solo contiene un pequeño logotipo puede parecer vacío a simple vista — verifícalo antes de llamarlo hueco. - Donde puedas ejecutar código, pon las invariantes en el generador como asserts (pivotes resueltos que concuerdan, viaje suficientemente largo, una selección a la vez, límites razonables). Atrapan regresiones que un fotograma fijo oculta.
Comandos
Donde puedas ejecutar código, mantén el mismo generador y auto-verificaciones. De lo contrario, usa ediciones acotadas de picsart_scene_patch. Valida con picsart_scene_validate, consulta la geometría de eventos con picsart_scene_query_layout, e inspecciona fotogramas fijos a resolución completa usando picsart_scene_contact_sheet con times: [t1, t2] (máximo 8 tiempos por llamada) y resolution establecida al composition.width y composition.height de la escena. Inspecciona video exportado continuo para afirmaciones de movimiento.