Figma-Storyboard → Szenen-Bewegungsdesign
Ein Storyboard ist eine Reihe von statischen 1920×1080-Frames. Deine Aufgabe ist es, eine Szene zu produzieren, deren Zeitlinie sich zwischen diesen Frames bewegt. Der Großteil der Bewegung ist bereits im Design – stelle sie wieder her, anstatt sie zu erfinden.
Kannst du keinen Code ausführen? Überall dort, wo dieses Rezept sagt "autor ein Generatorskript", baue die Szene stattdessen durch
picsart_scene_patchauf und pinne die gleichen Invarianten mitpicsart_scene_query_layoutnach jeder Änderung (siehe Befehle unten). Die Methode ist identisch – nur die Ausführungsoberfläche unterscheidet sich.
Der Ablauf
- Lese den Baum einmal – wenn der Benutzer das Storyboard über seinen Figma-Connector geteilt hat, lese den Frame-Baum der Seite einmal: Er gibt jeden Frame, jede Ebene, jeden Namen und jede Box zurück. Alles unten wird daraus abgeleitet. Gehe nicht Frame für Frame durch das Board, um es zu erkunden.
- Plane die Beats – schreibe die Beat-Tabelle nieder, bevor du mit dem Autor beginnen (unten).
- Extrahiere jedes Element als eigene Ebene aus dem Design, das der Benutzer geteilt hat: Konstruiere bearbeitbare
Formgeometrie aus seinen Quellmaßen und verwende
picsart_scene_import_figma_paintfür CSS- Füllung, Schatten oder Verlaufsfarbe auf einer vorhandenen Ebene. Halte Text bearbeitbar. Eine automatische Konvertierung von Formknoten wird hier nicht bereitgestellt. Verwende ein Bild nur für eine nicht unterstützte Behandlung oder eine wirklich nicht geschichtete Quelle; siehe Extraktion. - Baue die Szene aus der Geometrie auf und pinne jede Regel fest. Wo du Code ausführen kannst, erstelle ein
Generatorskript (nicht handgeschriebenes JSON), sodass jede Regel zu einem
assertwird; wo du das nicht kannst, baue es durchpicsart_scene_patchauf und pinne die gleichen Invarianten mitpicsart_scene_query_layout. Geometrie kommt aus den Metadaten, niemals aus dem Augenmaß. - Überprüfe numerisch, dann exportiere.
Schritte 3–5 laufen einmal pro Szene, in dieser Reihenfolge – diese Schleife ist die Methode.
Ein statischer Frame
Wenn die Anfrage ein einzelner Frame ist (ein Standbild, ein Store-Bild, eine Karte), gibt es kein Storyboard. Überspringe die Beats und baue diesen Frame als Standbild-Szene:
- Lese den ausgewählten Frame über den geteilten Figma-Connector des Benutzers. Seine Größe ist
composition.widthundheight, seine Füllung istcomposition.background, und eine kurzeduration(1) reicht aus. - Eine Ebene pro Kind, in der Reihenfolge des Malens (das erste Kind des Baums unten). Die
positioneiner Ebene ist der MITTELPUNKT ihrer Box im Frame,[x + width/2, y + height/2]: Eine Ebene dreht und skaliert um ihren Mittelpunkt. Überprüfe ein verschachteltes Kind gegen den Frame: Einige Gruppen speichern Kinder relativ zur Gruppe (references/figma-extraction.md). - Jedes Kind in dem Medium, das es bearbeitbar hält: Authorisiere Formgeometrie, wende dann seine CSS-Farbe durch
picsart_scene_import_figma_paintan, Text als Live-Text, und jede IMAGE-Füllung als eine Medienebene auf ihrem ursprünglichen Bitmap – niemals den Knotenexport, der Transparenz auf den Hintergrund des Frames flacht – durch ihrenscaleMode(FILL→cover,FIT→contain,CROP→cover+crop,TILE→nicht ausdrückbar; die Tabelle und die Crop-Mathematik sind in references/figma-extraction.md, "Image fills"). Lade jedes Bild zuerst hoch; eine Figma-Asset-URL läuft ab. - Eine lokale Gruppe, die als eine Einheit clippt oder überblendet, ist normalerweise eine inline
composition-Ebene. Verwende eine Szenenreferenz, wenn es absichtlich eine wiederverwendbare, separat besessene Komponente ist. - Überprüfe mit Zahlen, dann ein volles Bild.
picsart_scene_query_layoutbei0: Jedeboxinnerhalb eines Pixels von ihrer Figma-Box. Ein Bild der obersten Ebene ohnecropträgtdrawn: seine Box undsourceCrop, wie das Design sie zeigt. Ein Bild innerhalb einer Gruppe liestclippedBox, den Teil, den seine Gruppe sichtbar lässt. Dann einpicsart_scene_contact_sheetmit explizitentimesundresolutiongleich den Kompositionsabmessungen: Ein Thumbnail lässt 2-Px-Linien und kleinen Text fallen.
Ebenen, keine Bildschirme
Die Szene ist eine Zusammenstellung von beweglichen Ebenen, niemals eine Montage von flachen Bildschirmen. Ein Design kommt als Ebenen herein; halte sie trennbar, sodass sich jede von selbst bewegen kann – das ist der ganze Grund, eine Ebene zu bauen,
Szene anstatt Screenshots zu überblenden.
- Rekonstruiere, rasiere nicht. Baue bearbeitbare
shape-Geometrie aus dem vom Benutzer geteilten Design. Wende CSS-Farbe auf diese vorhandene Ebene mitpicsart_scene_import_figma_paintan. Ein vollständiger Figma- Designknoten-Import wird hier nicht unterstützt. Halte Ecken, Pfade und Platzierung bearbeitbar und Text bearbeitbar. Diese in ein PNG oder SVG zu flatten, verhindert die unabhängige Animation ihrer Teile. - Wenn du Assets aus einem über den Figma-Connector geteilten Design nimmst, nimm niemals einen übergeordneten Frame anstelle seiner Kinder. Die Kinder sind es, die sich bewegen.
- Flatten zu einem Bild ist nur die Ausweichlösung – für eine wirklich ungeschichtete Quelle (ein rasterisiertes Asset, kein Ebenenzugriff). Wenn du darauf zurückgreifst, sage es deutlich.
- Die Gewohnheit "einen Knoten für originalgetreues Aussehen exportieren" in references/figma-extraction.md bezieht sich auf die Genauigkeit eines Elements, das du bereits ausgewählt hast, ganz einzubringen. Verallgemeinere es nicht zu "rastere alles".
Baue Szene für Szene, in der Reihenfolge
Das ist wichtiger als jede einzelne Regel unten. Authorisiere nicht die gesamte Zeitleiste und präsentiere sie dann. Prototype auch nicht zuerst einen auffälligen Beat in der Mitte der Geschichte: Eine Bewegung, die in der Mitte entworfen wurde, hat nichts, woran sie angeschlossen werden kann, also wird sie weggeworfen.
Beginne mit dem ersten Frame und gehe vorwärts. Pro Szene:
- Teile nach semantischen Bewegungseinheiten auf, nicht nur nach bearbeitbaren Ebenen. Ein Steuerelement, sein Label und sein Icon
teilen normalerweise einen Platzierungsbesitzer. Füge kind-lokale Bewegung nur für eine absichtliche Zustandsänderung hinzu.
Stille ist eine nützliche Hierarchie und Lesezeit, kein Defekt. Für Gruppierung, Panel-Wachstum und
Neuanordnung verwende linked-element-motion (hole mit
picsart_scene_recipe, Namelinked-element-motion). - Authorisiere seine Bewegung, indem du zu dem bereits Gebauten hinzufügst – anhängen an den Generator, wo du Code ausführen kannst, patchen der gleichen Szene, wo du das nicht kannst. Beginne nie von vorne: Jeder frühere Beat Konstanten und Prüfungen bleiben, sodass ein neuer Beat einen etablierten nicht stillschweigend brechen kann.
- Rendere diesen Beat und zeige ihn als Video über seinem eigenen Fenster. Bewegung kann nicht in einem Standbild oder einem Kontaktblatt überprüft werden.
- Nimm Anweisungen entgegen und rendere neu. Erwarte mehrere Durchgänge für einen Beat. Anweisungen kommen als Eigenschaften, nicht als Zahlen – "schneller", "entkopple die Kacheln", "das Element macht Lärm, lass es weg" – und jede wird Timing, Staffelung oder Elementinventar zugeordnet, nicht einem neuen Design.
- Dann entwerfe den Übergang zur nächsten Szene als eigenen expliziten Schritt. Eine Szene ist nicht fertig, wenn sie gut aussieht; sie ist fertig, wenn ihr Exit und der Eintritt der nächsten Szene vereinbart sind. Der Übergang ist der Teil, den das Storyboard nicht enthält, daher ist es der Ort, an dem die Anweisung am spezifischsten ist ("herauszoomen, dann kommt die nächste Szene von der Kamera, nicht herangezoomt") und wo Raten am meisten Zeit verschwendet.
Wenn autonome Iteration autorisiert ist, verwende diese als interne Verifikationsgates und zeige sinnvolle
Meilensteine, anstatt für jeden Beat um Genehmigung zu bitten. Bei großen Zeitleisten verwende
large-scene-assembly (hole mit picsart_scene_recipe, Name large-scene-assembly), um Komponenten unabhängig bearbeitbar zu halten.
Erst dann fahre fort. Halte die Beat-Tabelle während des Arbeitens aktuell – sie ist das Protokoll dessen, was vereinbart wurde, und die Zeitleiste ist lang, bevor der Bau fertig ist.
Lese das Storyboard
- Die x-Reihenfolge der Leinwand ist die zeitliche Reihenfolge. Frames werden von links nach rechts angeordnet; sortiere nach
x, nicht nach Name. - Frame-Namen lügen; die Reihenfolge nicht. Doppelte Namen sind üblich (ein Designer dupliziert einen Frame und vergisst, neu zu nummerieren). Zähle Frames gegen Zahlen, bevor du zu dem Schluss kommst, dass einer fehlt.
- Doppelt benannte Frames sind normalerweise A→B-Posen eines Beats. Vergleiche ihre Ebenensets: gleiche Kinder, unterschiedliche Transformationen bedeutet, dass der Designer die Bewegung als Delta codiert hat. Diese Bewegung ist messbar, keine Designentscheidung, die du treffen musst.
- Wenn das Design durch den Figma-Connector des Benutzers kommt, erfasse Frames einzeln: Ein ganzes Board, das auf einmal erfasst wird, ist viel breiter als hoch und schrumpft zu einem schmalen Streifen.
Was dir wirklich zum Entwerfen gehört: Verweildauer, Easing und die Übergänge zwischen ungepaarten Frames.
Für jeden ungepaarten Übergang verwende motion-scene-continuity (hole mit picsart_scene_recipe, Name motion-scene-continuity), um die
semantische Beziehung zu benennen und persistente Ebene, Katalogübergang, harten Schnitt, Überblendung oder
benutzerdefinierten Übergang zu wählen, bevor Mechaniken geschrieben werden. Dieser Storyboard-Workflow besitzt immer noch die Wiederherstellung der Bewegung,
die durch gepaarte Design-Frames impliziert wird; Kontinuität besitzt nur die Beziehung und Darstellung an ihren
Grenzen.
Löse Transformationen, wähle sie nicht
Eine gleichmäßige Skalierung s um einen unbekannten Drehpunkt C bildet p → C + s(p − C) ab. Also ein entsprechendes
Koordinatenpaar fixiert den Drehpunkt:
C = (p2 − s·p1) / (1 − s)
Nimm s aus dem Größenverhältnis eines Elements zwischen den beiden Frames, löse C, dann überprüfe es gegen ein
zweites, unabhängiges Element. Übereinstimmung auf einen Bruchteil eines Pixels bedeutet, dass du die tatsächliche Transformation des Designers hast;
Nichtübereinstimmung bedeutet, dass sich das Element von selbst bewegt hat und eine eigene Behandlung benötigt.
Schreibe die Beat-Tabelle nieder – gemessene Deltas, den gelösten Drehpunkt, die Zeitzuweisung. Neun Beats Choreographie mit Zahlen werden das Zurückscrollen nicht überleben, und du wirst sie gegen Renderings vergleichen wollen.
Bewegungsregeln
Vollständige Details und ausgearbeitete Zahlen: references/motion-rules.md. Die Regeln, die entscheiden, ob ein Beat richtig gelesen wird:
- Starr vs. unabhängig. Staffele Position/Skalierung nur für wirklich unabhängige Objekte (Rasterkacheln, Aufkleber). Eine Karte, ein Verbund oder jedes Objekt mit Teilen muss eine Geometrie- Uhr teilen, oder seine Teile geraten während des Flugs aus der Registrierung. Setze die Staffelung stattdessen auf das Ausblenden.
- Eine Ausblendung muss mit ihrer Bewegung gleichzeitig enden, um als eine Geste gelesen zu werden. Wenn die Ausblendung endet, bevor die Bewegung es tut, sieht das Auge zwei Ereignisse. Passe auch die Easing-Kurven an.
- Bei einem flachen Frame-Rendering ist ein Hineinzoomen sicher; ein Verschieben nicht. Hochskalieren legt niemals eine Kante frei; Verschieben legt die eigene Hinterkante des Bildes frei.
- Reisegröße beim Eintritt, sodass der führende Teil knapp außerhalb der Leinwand beginnt – Reise
≥ Leinwand − linkeste_x. Zu wenig und es beginnt auf dem Bildschirm; zu viel ist tote Zeit. - Ausgänge beschleunigen (
ease_in). Gib zwei Objekten unterschiedliche Spannen für differentielle Beschleunigung. - Auswahl-Chrome ist exklusiv – niemals zwei Laufschriften gleichzeitig, und es darf seinen Beat nicht überleben. Wenn sich Elementschritte in ihren Spannen überschneiden, verliert ein Element seine Auswahl mitten in der Manipulation.
Rendering-Fakten, die das Authoring ändern
- Opazität komponiert in linearem Licht. Es skaliert nicht den codierten sRGB-Wert. Um eine
gemessene Helligkeit zu treffen, konvertiere durch Gamma:
opacity = linear(target) / linear(source). - Opazität ist nur eine Dunkelheits-Steuerung über einem schwarzen Hintergrund. Über einem hellen Hintergrund macht es ein dunkles Subjekt heller, da der Hintergrund durchscheint. Eine echte Dimmung dort benötigt einen dunklen Scrim oben, nicht Opazität auf dem Subjekt.
anchorgibt einen nicht-zentrischen Drehpunkt (ebenen-lokale Pixel von der oberen linken Ecke der Ebene). Verwende es für Eck-Pivot-Skalierung – z. B. Skalierung um die obere linke Ecke eines Auswahlrahmens, sodass es wie das Ziehen des unteren rechten Griffs liest. Fälsche Drehpunkte nicht mit Positions-Keyframes.- Per-Zeichen-Textanimation ist eingebaut. Die
content.animations[]einer Textebene ist ein After Effects Animator + Bereichsselektor:basedOn: "character", plusrandomizeOrder/randomizeSeedfür Flimmern. Stapele Einträge auf verschiedenen Seeds, damit sie nicht im Gleichschritt schlagen. Die aktive Spanne ist[start + offset, end + offset]: Ein schmales Fenster parkt seine ferne Kante am Ende des Textes beioffset: 1 − end, oder löscht jedes Glyph beioffset: 1 − start(1 − w/1nur, wennstart0 ist – verwende sie andernfalls nicht). Ein VOLLES Fenster (start:0, end:1) mit einer Rampenform ist stattdessen eine Rampe genau so breit wie der Text: Sweepeoffset-1 → 1und jedes Glyph easet über die Hälfte des Sweeps, gestaffelt nach Position, anstatt alle auf einmal umzuschalten – siehetextAnimationAuthoring.rawSelectorinpicsart_scene_capabilitiesfür die ausgearbeiteten Zahlen. - Inline-SVG muss url-kodiert sein mit
#prozent-kodiert. Ein rohes#startet einen URI-Fragment und kürzt das SVG bei seiner ersten Hex-Farbe ab. - Messe Easing, vertraue nicht auf voreingestellte Namen. Beurteile den Wert bei 25%/75% eines Keyframe-Fensters und bestätige, dass die Kurve das ist, was du beabsichtigt hast.
Überprüfe numerisch
Ein Augenmaß über ein herunterskaliertes Kontaktblatt wird Fehlalarme produzieren – es meldet zuverlässig Positions- fehler, die Messung widerlegt. Vergleiche Frames in voller Auflösung oder messe.
picsart_scene_validateprüft nur die Struktur. Es besteht bei einer Szene, deren Ebenen nichts rendern.picsart_scene_query_layoutlöst Boxen auf, ohne zu rendern – verwende es, um Geometrie gegen die Figma-Zahlen zu bestätigen, bevor du einen Render ausgibst. Es ist nur Geometrie: Eine aufgelöste Box sagt nichts darüber aus, ob der Inhalt decodiert.- Um Lücken zu finden, wo nichts auf der Leinwand ist, betrachte die verdächtigen Zeiten mit
picsart_scene_contact_sheetmittimes: [t1, t2, …]undresolutionaufcomposition.widthundcomposition.heightder Szene gesetzt. Ein Frame, der nur ein kleines Logo enthält, kann auf den ersten Blick leer aussehen – überprüfe es, bevor du es eine Lücke nennst. - Wo du Code ausführen kannst, lege die Invarianten in den Generator als Asserts (gelöste Drehpunkte stimmen überein, Reise lang genug, eine Auswahl gleichzeitig, Grenzen vernünftig). Sie fangen Regressionen, die ein Standbild verbirgt.
Befehle
Wo du Code ausführen kannst, pflege den gleichen Generator und die Selbstprüfungen. Verwende andernfalls begrenzte picsart_scene_patch-Bearbeitungen. Validiere mit picsart_scene_validate, frage Ereignisgeometrie mit picsart_scene_query_layout ab und überprüfe Standbilder in voller Auflösung mit picsart_scene_contact_sheet mit times: [t1, t2] (maximal 8 Zeiten pro Aufruf) und resolution auf die composition.width und composition.height der Szene gesetzt. Überprüfe kontinuierlich exportiertes Video auf Bewegungsbehauptungen.
Ohne den Generator...