Communitygithub.com

Figma-Storyboard-Animation

Verwandle ein Figma-Storyboard aus statischen Frames in eine animierte Szene – lese den Frame-Baum, stelle die vom Designer bereits codierte Bewegung wieder her und baue Szene für Szene auf, wobei jeder Übergang abgestimmt wird, bevor es weitergeht; oder erstelle einen einzelnen Frame als Standbild. Verwende dies, wenn du ein Figma-Design oder Storyboard in ein Video/eine Animation umwandelst, wenn ein Designer Frames übergibt, um sie 'in Bewegung zu versetzen', oder wenn der Benutzer Figma-Frames, Storyboard, Bewegungsdesign aus Design, Design-zu-Animation, animierende Szene-zu-Szene oder Umwandlung eines Mockups in eine Szene erwähnt. Ein aus einem Figma-Design erstelltes fertiges Video beginnt in animate-design.

Was ist Figma-Storyboard-Animation?

Dies ist eine leistungsstarke KI-Agenten-Fähigkeit, die ein Figma-Storyboard – eine Reihe von statischen 1920×1080px-Frames – in eine flüssige, animierte Szene verwandelt. Ihr Kernprinzip ist die 'Wiederherstellung' der Bewegung, die der Designer bereits in der Figma-Struktur codiert hat (z. B. durch duplizierte Frames mit unterschiedlichen Transformationen), anstatt die Bewegung von Grund auf neu zu erfinden. Die Fähigkeit arbeitet auf der Ebene der Einzellayer: Sie rekonstruiert bearbeitbare Formgeometrie aus den Figma-Messwerten, wendet CSS-Farben direkt an, hält Text bearbeitbar und exportiert Bilder nur als letztes Mittel. Der Workflow folgt einer strengen sequentiellen Logik: Baue Szene für Szene, beginnend mit dem ersten Frame, und erstelle für jede Szene die zugrunde liegende Geometrie, pinne sie mit numerischen Prüfungen (Assertions oder Abfragen) fest, rendere sie als Video, verfeinere sie basierend auf Feedback und stimme dann den Übergang zur nächsten Szene ab – bevor du fortfährst. Es werden mehrere Plattformen unterstützt: Die Kernlogik ('Autor eines Generatorskripts') wird zu einem ausführbaren Skript, und wenn das Ausführen von Code nicht möglich ist, wird die identische Logik durch eine Kombination aus `picsart_scene_patch` (zum Ändern der Szene) und `picsart_scene_query_layout` (zur numerischen Prüfung des Layouts) implementiert. Die Fähigkeit enthält detaillierte Regeln für Bewegung (Starr vs. unabhängig, korrekte Ausblendungen, Koordinatentransformationen, Timing-Pivot-Berechnung), behandelt die Begrenzung zwischen Szenen mit einer separaten Untermethode (`motion-scene-continuity`) und enthält wesentliche Rendering-Fakten (z. B. lineare Lichtopazität, Ankerpunkte, SVG-Codierung, Textanimation).

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/PicsArt/media-studio/tree/HEAD/skills/figma-storyboard-animation

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

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_patch auf und pinne die gleichen Invarianten mit picsart_scene_query_layout nach jeder Änderung (siehe Befehle unten). Die Methode ist identisch – nur die Ausführungsoberfläche unterscheidet sich.

Der Ablauf

  1. 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.
  2. Plane die Beats – schreibe die Beat-Tabelle nieder, bevor du mit dem Autor beginnen (unten).
  3. 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_paint fü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.
  4. 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 assert wird; wo du das nicht kannst, baue es durch picsart_scene_patch auf und pinne die gleichen Invarianten mit picsart_scene_query_layout. Geometrie kommt aus den Metadaten, niemals aus dem Augenmaß.
  5. Ü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:

  1. Lese den ausgewählten Frame über den geteilten Figma-Connector des Benutzers. Seine Größe ist composition.width und height, seine Füllung ist composition.background, und eine kurze duration (1) reicht aus.
  2. Eine Ebene pro Kind, in der Reihenfolge des Malens (das erste Kind des Baums unten). Die position einer 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).
  3. Jedes Kind in dem Medium, das es bearbeitbar hält: Authorisiere Formgeometrie, wende dann seine CSS-Farbe durch picsart_scene_import_figma_paint an, Text als Live-Text, und jede IMAGE-Füllung als eine Medienebene auf ihrem ursprünglichen Bitmap – niemals den Knoten export, der Transparenz auf den Hintergrund des Frames flacht – durch ihren scaleMode (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.
  4. 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.
  5. Überprüfe mit Zahlen, dann ein volles Bild. picsart_scene_query_layout bei 0: Jede box innerhalb eines Pixels von ihrer Figma-Box. Ein Bild der obersten Ebene ohne crop trägt drawn: seine Box und sourceCrop, wie das Design sie zeigt. Ein Bild innerhalb einer Gruppe liest clippedBox, den Teil, den seine Gruppe sichtbar lässt. Dann ein picsart_scene_contact_sheet mit expliziten times und resolution gleich 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 mit picsart_scene_import_figma_paint an. 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:

  1. 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, Name linked-element-motion).
  2. 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.
  3. Rendere diesen Beat und zeige ihn als Video über seinem eigenen Fenster. Bewegung kann nicht in einem Standbild oder einem Kontaktblatt überprüft werden.
  4. 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.
  5. 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.
  • anchor gibt 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", plus randomizeOrder/randomizeSeed fü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 bei offset: 1 − end, oder löscht jedes Glyph bei offset: 1 − start (1 − w / 1 nur, wenn start 0 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: Sweepe offset -1 → 1 und jedes Glyph easet über die Hälfte des Sweeps, gestaffelt nach Position, anstatt alle auf einmal umzuschalten – siehe textAnimationAuthoring.rawSelector in picsart_scene_capabilities fü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_validate prüft nur die Struktur. Es besteht bei einer Szene, deren Ebenen nichts rendern.
  • picsart_scene_query_layout lö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_sheet mit times: [t1, t2, …] und resolution auf composition.width und composition.height der 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...

Verwandte Skills