Communitygithub.com

MBehtemam/montagent-skills

Cut-out-Charakteranimation in Montagent: Maskottchen und Puppen aus einem Rig von Teilen, Posen und Gesten, Lippen-Synchronisation zu einer Sprachzeile mittels Visemen, Lidschläge. Verwende dies, wenn ein Montagent-Video eine Figur enthält, die sich bewegt oder spricht.

Was ist montagent-skills?

Diese Fähigkeit definiert eine vollständige Pipeline für die Animation von Cut-out-Figuren in Montagent. Sie ermöglicht es, Charaktere aus einem Rig von Einzelteilen (Körper, Kopf, Arme, Gesichts-Overlays) zu bauen und zu animieren. Da Montagent keine Parent-Child-Hierarchien oder Bildwechsel unterstützt, wird das gesamte Rig in einem Backend-Schritt (bake_rig.py) in einen flachen Satz von Einzel-Elementen mit eigener Position, Rotation und Sichtbarkeit pro Frame aufgelöst. Die Beschreibung enthält detaillierte Rezepte für das Aufstellen der Figur im Set, das Einschweben (Hopser), verschiedene Gesten (Winken, Zeigen, Jubeln) sowie die Lippensynchronisation über Viseme und zufällige Lidschläge. Jeder Schritt endet mit einem „Look“-Befehl, um das Ergebnis visuell zu prüfen. Die Fähigkeit setzt die vorherige Installation von `montagent` und `montagent-craft` voraus und ist speziell für den Character-Short-Workflow optimiert.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MBehtemam/montagent-skills/tree/HEAD/skills/montagent-character

In Ihrer bevorzugten KI fragen

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

Dokumentation

Animieren einer Cut-out-Figur

Rezepte für eine Figur, die aus einem Rig von Teilen besteht: einem Körper, einem Kopf, zweiteiligen Armen und Gesichts-Overlays (Mundformen und ein Lidschlag), die auf der eigenen Leinwand des Kopfes gezeichnet sind. Sie werden im Build-Schritt in die Schleife von montagent eingefügt; lade montagent zuerst, falls du es noch nicht getan hast. Für einen Kurzfilm, in dem eine Figur eine Zeile spricht, öffne die Charakter-Kurzfilm-Struktur, bevor du planst.

Was das Rig bereitstellen muss

Lies zuerst die Beschreibung des Rigs. Du benötigst für jedes Teil: sein Bild, seine Größe, seinen Drehpunkt (das Gelenk, um das es sich dreht, als Punkt in der Originalzeichnung), sein Elternteil und die Reihenfolge, in der die Teile von hinten nach vorne gezeichnet werden. Außerdem benötigst du eine Tabelle, die die Visem-IDs der Stimme den Mundformen zuordnet. Das Bild jedes Teils muss so aufgepolstert sein, dass sein Drehpunkt exakt die Mitte seiner Leinwand ist. Die Gesichts-Overlays teilen sich die Leinwand und den Drehpunkt des Kopfes.

Wenn die Vorgabe nur eine einzelne Zeichnung ohne Teile oder Drehpunkte liefert, kannst du kein Rig blind ausschneiden. Informiere den Benutzer und bitte um ein vorgeschnittenes Rig.

Das Rig backen

Montagent hat keine Parent-Kind-Beziehung, und ein Element kann sein Bild nicht ändern. Daher wird eine Figur gebacken: Das gebündelte Skript berechnet für jedes Bild die Position und Rotation jedes Teils auf dem Bildschirm aus seinen Eltern und schreibt jede Mundform und jeden Lidschlag als eigenes Element, das für seine eigene Dauer mit der Transformation des Kopfes angezeigt wird. Schreibe dies nicht selbst.

python3 scripts/bake_rig.py <projekt> <rig> <spezifikation> gibt das Projekt mit einer Spur pro Teil aus. Führe es mit --help für die Spezifikation aus: wo die Figur steht, benannte Posen, die Bewegungen dazwischen, Schwünge, Hüpfer, die Stimme und ihre Visem-Datei sowie die Lidschläge. Führe es nach jeder Änderung der Spezifikation erneut aus. Es ersetzt nur die Spuren, die es geschrieben hat. Bewahre die Spezifikation neben dem Projekt auf: Sie ist die wahre Quelle der Figur.

Lies seinen Bericht. Er listet jede zusammengeführte Mundspanne, die größte Lücke zwischen einem Kind und seinem Elternteil über jedes gezeichnete Bild sowie die zu betrachtenden Zeitpunkte auf: die Ankunft jeder Bewegung und die extremen Winkel jedes Gelenks. Positionen sind ganze Pixel, daher ist eine Lücke von bis zu etwa 1,5 px auf Rundung zurückzuführen, die von den runden Gelenken verdeckt wird. Eine größere Lücke bedeutet, dass die Drehpunkte des Rigs falsch sind.

validate meldet R-EASE-INERT für jede Pose, die die Figur hält, und N-TRACK-GAP für die Mund- und Lidschlag-Spuren zwischen den Spannen. Beides ist zu erwarten (siehe Leitfaden zu den Befunden).

Das gebackene Ergebnis sieht so aus: Jeder Teil ist auf seinem Drehpunkt zentriert, mit Keyframes nur dort, wo er sich bewegt, und jedes Mund- oder Lidschlag-Element kopiert die Transformation des Kopfes über seine Spanne.

{
  "frame": {"width": 640, "height": 360}, "fps": 30, "background": "#2E3440", "duration": 2000, "output": "out/gebacken.mp4",
  "spuren": [
    {"name": "set", "layer": 0, "elements": [
      {"id": "set", "type": "image", "start": 0, "end": 2000, "source": "media/still.png", "x": 0, "y": 0, "origin": "top-left", "width": 640, "height": 360, "fit": "literal"}
    ]},
    {"name": "puppe-rumpf", "layer": 10, "elements": [
      {"id": "puppe-rumpf", "type": "image", "start": 0, "end": 2000, "source": "rig/teile/rumpf.png", "x": 320, "y": 330, "origin": "center", "fit": "literal", "width": 80, "height": 280}
    ]},
    {"name": "puppe-kopf", "layer": 12, "elements": [
      {"id": "puppe-kopf", "type": "image", "start": 0, "end": 2000, "source": "rig/teile/kopf.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 90, "height": 160, "rotation": [{"t": 0, "v": 0}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 1000, "v": 0.0, "ease": "linear"}]}
    ]},
    {"name": "puppe-mund", "layer": 13, "elements": [
      {"id": "puppe-mund-0", "type": "image", "start": 400, "end": 700, "source": "rig/teile/mund_offen.png", "x": 320, "y": 190, "origin": "center", "fit": "literal", "width": 24, "height": 60, "rotation": [{"t": 400, "v": 4.8}, {"t": 500, "v": 6.0, "ease": "linear"}, {"t": 666, "v": 4.0, "ease": "linear"}]}
    ]}
  ]
}

Rezepte

Jedes Rezept gibt Ausgangsbereiche an, keine endgültigen Antworten. Jedes endet mit einem Look-Schritt: Lade montagent-craft, dann schau an der Stelle nach, die der Schritt angibt, bevor du fortfährst.

Winkel sind in Grad von der gezeichneten Ruhepose, jeweils relativ zum Elternteil, und positiv dreht im Uhrzeigersinn auf dem Bildschirm. Ein Arm auf der rechten Seite des Betrachters hebt sich also mit negativen Winkeln, einer auf der linken Seite mit positiven.

Im Set aufstellen

  • Hintergrund: Ein vollformatiges Set-Bild mit origin top-left bei 0, 0, in der Größe des Frames, auf der untersten Ebene. Setze den origin explizit.
  • Füße auf dem Boden: Die Wurzel des Rigs (der Körper, der sich an den Füßen dreht) geht dorthin, wo der Boden auf die Schattenlinie der Wand trifft, oder ein wenig davor. Bei einem 1080 hohen Set liegt die Oberkante des Bodens normalerweise bei 80–85 % der Höhe, platziere die Füße also 5–10 % darunter.
  • Größe: Die Figur 55–75 % der Frame-Höhe, eingestellt durch den Maßstab der Spezifikation (Frame-Pixel pro Zeichen-Pixel). Miss die sichtbare Figur, nicht die aufgepolsterte Zeichnung: Die Höhe der Zeichnung mal dem Maßstab überschätzt sie.
  • Platzierung: Außermittig auf der Seite gegenüber ihrem Requisit oder ihrer Karte, ein Drittel des Weges hinein, es sei denn, sie steht allein.
  • Look: frame zu einem Ruhemoment und überprüfe, ob die Füße auf dem Boden sitzen, nicht darüber schweben oder darin versinken, und dass der Kopf mindestens 5 % Abstand zur Oberkante des Frames hat.

Auftritt: Hüpfer

  • Hüpfer: 2–3, jeder 300–450 ms, die immer niedriger werden: der erste 8–12 % der Körpergröße der Figur, der letzte 4–6 %. Die horizontale Bewegung deckt die gleiche Spanne mit ease-out ab, sodass der letzte Hüpfer sanft landet.
  • Pose: Arme unten während des Hüpfens. Lande auf einem gezeichneten Frame und halte 150–300 ms vor der ersten Geste.
  • Timing: Beende den Auftritt bevor die Stimme beginnt, mit mindestens 200 ms Puffer.
  • Look: frame --from --to --keyframes über den Auftritt. Überprüfe, ob die Füße den Boden bei jedem Landezeitpunkt berühren und kein Teil hinter dem Körper zurückbleibt oder vorausspringt.

Gesten

Eine Geste ist eine benannte Pose sowie die Bewegungen hinein und hinaus. Gib jeder Bewegung eine Vorlaufzeit (die in der Spezifikation), damit die Pose gehalten wird, bis sie startet.

  • Arme runter: Aus einer Ruhepose mit ausgestreckten Armen drehe jeden Oberarm 40–55° zum Körper hin und den Unterarm weitere 5–15°.
  • Winken: Der Oberarm 40–50° aus der Ruheposition gehoben, zur Seite, und der Unterarm weitere 25–35° nach oben. Schwinge den Unterarm vom Ellenbogen aus 15–20° in jede Richtung, mit einer Periode von 350–450 ms, für mindestens 2 volle Schwünge (800 ms oder mehr). Hebe ihn höher und die Hand geht am inneren Extrem des Schwungs hinter den Kopf: Der Kopf wird über den Armen gezeichnet.
  • Auf etwas zeigen: Der Oberarm nahezu horizontal in Richtung des Ziels (10–25° über der Ruheposition für einen ausgestreckten und nach unten gerichteten Arm) und der Unterarm innerhalb von 20° der Geraden, sodass die Hand auf die nahe Kante des Ziels zeigt. Komme 1–3 Frames vor dem Wort an, das es benennt.
  • Jubeln: Beide Oberarme 40–50° nach oben und die Unterarme weitere 20–30° nach oben. Beuge sie weiter und die Hände verschwinden am Höhepunkt des Überschwingers hinter dem Kopf.
  • Bewegungen: In über 250–400 ms. Komme auf der Überschwinger-Bezier-Kurve [0.34, 1.56, 0.64, 1] an und gehe mit ease-in-out zurück zur Ruheposition. Für den Durchschwung füge eine zweite Bewegung hinzu, die nur den Unterarm betrifft, 2–4 Frames nach der des Oberarms.
  • Niemals eingefroren: Der Kopf neigt sich bei betonten Wörtern um 2–5°, als kurzer Schwung oder eine Hin- und Herbewegung über 250–400 ms. Eine Figur, die eine Pose länger als 1,5 s ohne Bewegung hält, wirkt wie ein Standbild.
  • Look: Für jede Geste frame --at die Zeitpunkte, die der Bake-Bericht für die Extreme dieses Gelenks auflistet. Überprüfe, ob die Hand frei von Kopf und Frame-Kante ist und die Pose ohne Ton als die Geste erkennbar ist. Dann frame --crop an der Schulter und dem Ellenbogen in der am weitesten gehobenen Pose, im wahren Maßstab, und überprüfe auf eine Lücke oder ein loses Teil.

Lippensynchronisation aus Visemen

Der Bake schreibt den Mund aus der Visem-Datei der Stimme. Jede Visem-ID wird durch die Tabelle des Rigs einem Mund zugeordnet, und Stille ist der Schnabel oder die Lippen in Ruhestellung, ohne Overlay. Benenne das Stimmelement und die Visem-Datei in der Spezifikation. Der Mund folgt dann dem Start und dem Quellbereich dieses Elements. Wenn du die Stimme verschiebst und erneut bäckst, bleibt die Synchronisation erhalten.

  • Kürzeste Form: 2 Frames. Der Bake fügt eine kürzere in die vorherige Form ein und meldet jede Zusammenführung. Ein Dutzend Zusammenführungen in einer 6 s Zeile ist normal.
  • Vorlauf: 0 ms. Wenn der Mund beim Betrachten des Renderings zu spät wirkt, führe einen Frame vor (33 ms bei 30 fps), niemals mehr.
  • Timings: Untersuche die Sprachdatei. Wenn ihre Länge von der angegebenen Dauer der Visem-Datei abweicht, vertraue der Untersuchung.
  • Look: query --at die Mitte von drei gesprochenen Wörtern und überprüfe, ob jeweils ein Mundelement aktiv ist. Dann query --at die Mitte der längsten Pause und nach dem Ende der Zeile und überprüfe, ob keines aktiv ist.

Lidschläge

  • Länge: 3 Frames (100 ms bei 30 fps), höchstens 4.
  • Rhythmus: Alle 2–4 s, unregelmäßig, niemals auf einem Beat. Setze einen direkt nachdem eine große Bewegung gelandet ist und einen in einer Pause der Zeile. Mindestens 2 in 8 s.
  • Vermeide: Einen Lidschlag im gleichen Frame wie die Ankunft einer Geste, da dies die Ankunft verdeckt.
  • Look: frame --at den mittleren Frame eines Lidschlags und überprüfe, ob die geschlossenen Augen genau auf dem Kopf sitzen, in seiner Neigung.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Verwandte Skills