Communitygithub.com

MBehtemam/montagent-skills

Animation de personnages en silhouette découpée dans Montagent : mascottes et marionnettes construites à partir d'un squelette de pièces, poses et gestes, synchronisation labiale avec une ligne de voix à partir de visèmes, clignements. À utiliser lorsqu'une vidéo Montagent comporte un personnage qui bouge ou parle.

Qu'est-ce que montagent-skills ?

Ce skill permet de créer des animations de personnages en silhouette découpée (cut-out) dans l'outil Montagent. Il fournit des recettes détaillées pour construire une marionnette à partir d'un squelette (rig) comprenant un corps, une tête, des bras en deux parties, et des superpositions faciales (formes de bouche et clignement) dessinées sur la toile de la tête. Le processus inclut la « cuisson » du rig via un script Python (`bake_rig.py`) qui calcule les positions et rotations de chaque pièce à chaque image, et génère les pistes d'animation directement dans le projet Montagent. Les recettes couvrent la mise en scène du personnage, les entrées (hops), les gestes (vague, pointage, encouragement), la synchronisation labiale à partir de fichiers de visèmes, et les clignements naturels. Le skill s'appuie sur `montagent` et `montagent-craft` pour la construction et l'inspection, et nécessite un rig pré-découpé avec des pivots corrects, faute de quoi il demande au créateur de fournir un rig adapté.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Animer un personnage en silhouette découpée

Recettes pour un personnage construit à partir d'un squelette de pièces : un corps, une tête, des bras en deux parties, et des superpositions faciales (formes de bouche et un clignement) dessinées sur la toile de la tête. Elles s'intègrent dans la boucle de montagent lors de l'étape de construction ; chargez montagent d'abord si ce n'est pas déjà fait. Pour un court métrage où un personnage récite une réplique, ouvrez la structure de court métrage avec personnage avant de planifier.

Ce que le squelette doit vous fournir

Lisez la description du squelette avant toute chose. Vous avez besoin, pour chaque pièce : de son image, de sa taille, de son pivot (l'articulation autour de laquelle elle tourne, en tant que point dans le dessin original), de son parent, et de l'ordre de dessin des pièces, de l'arrière vers l'avant. Vous avez également besoin d'une table reliant les identifiants de visèmes de la voix aux formes de bouche. L'image de chaque pièce doit être remplie de manière à ce que son pivot soit le centre exact de sa toile. Les superpositions faciales partagent la toile et le pivot de la tête.

Si le brief fournit uniquement un seul dessin, sans pièces ni pivots, vous ne pouvez pas découper un squelette à l'aveugle. Informez l'utilisateur et demandez un squelette pré-découpé.

Cuire le squelette

Montagent n'a pas de parentage, et un élément ne peut pas changer d'image. Ainsi, un personnage est cuit : le script intégré calcule la position et la rotation à l'écran de chaque pièce à partir de ses parents à chaque image dessinée, et écrit chaque forme de bouche et chaque clignement comme son propre élément, affiché pour sa propre durée avec la transformation de la tête. Ne l'écrivez pas vous-même.

python3 scripts/bake_rig.py <projet> <squelette> <spécification> affiche le projet avec une piste par pièce ajoutée. Exécutez-le avec --help pour connaître la spécification : où se tient le personnage, les poses nommées, les mouvements entre elles, les balancements, les sauts, la voix et son fichier de visèmes, et les clignements. Relancez-le après chaque modification de la spécification. Il ne remplace que les pistes qu'il a écrites. Conservez la spécification à côté du projet : c'est la véritable source du personnage.

Lisez son rapport. Il liste chaque intervalle de bouche qu'il a fusionné, le plus grand écart entre un enfant et son parent sur chaque image dessinée, et les instants à vérifier : l'arrivée de chaque mouvement et les angles extrêmes de chaque articulation. Les positions sont en pixels entiers, donc un écart d'environ 1,5 px est dû à l'arrondi, masqué par les articulations rondes. Un écart plus grand signifie que les pivots du squelette sont erronés.

validate signale R-EASE-INERT sur chaque pose que le personnage maintient, et N-TRACK-GAP sur les pistes de bouche et de clignement entre les intervalles. Les deux sont attendus (voir le guide des constatations).

Le résultat cuit ressemble à ceci : chaque pièce est centrée sur son pivot, avec des images clés uniquement là où elle bouge, et chaque élément de bouche ou de clignement copie la transformation de la tête sur son intervalle.

{
  "frame": {"width": 640, "height": 360}, "fps": 30, "background": "#2E3440", "duration": 2000, "output": "out/baked.mp4",
  "tracks": [
    {"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": "puppet-torso", "layer": 10, "elements": [
      {"id": "puppet-torso", "type": "image", "start": 0, "end": 2000, "source": "rig/parts/torso.png", "x": 320, "y": 330, "origin": "center", "fit": "literal", "width": 80, "height": 280}
    ]},
    {"name": "puppet-head", "layer": 12, "elements": [
      {"id": "puppet-head", "type": "image", "start": 0, "end": 2000, "source": "rig/parts/head.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": "puppet-mouth", "layer": 13, "elements": [
      {"id": "puppet-mouth-0", "type": "image", "start": 400, "end": 700, "source": "rig/parts/mouth_open.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"}]}
    ]}
  ]
}

Recettes

Chaque recette donne des plages de départ, pas des réponses exactes. Chacune se termine par une étape de vérification : chargez montagent-craft, puis vérifiez là où l'étape l'indique avant de continuer.

Les angles sont en degrés par rapport à la pose de repos dessinée, chacun relatif à son parent, et un angle positif tourne dans le sens horaire à l'écran. Ainsi, un bras du côté du spectateur se lève avec des angles négatifs, et un bras du côté gauche du spectateur se lève avec des angles positifs.

Le placer dans le décor

  • Arrière-plan : une image de décor plein écran avec origin top-left, à 0, 0, de la taille du cadre, sur la couche la plus basse. Définissez origin explicitement.
  • Pieds au sol : la racine du squelette (le corps, pivotant aux pieds) se place là où le sol rencontre la ligne d'ombre du mur, ou un peu devant. Sur un décor de 1080 de haut, le bord supérieur du sol se trouve généralement à 80–85 % du bas, placez donc les pieds 5–10 % en dessous de cela.
  • Taille : le personnage fait 55–75 % de la hauteur du cadre, définie par l'échelle de la spécification (px du cadre par px du dessin). Mesurez le personnage visible, pas le dessin rempli : la hauteur du dessin multipliée par l'échelle la surestime.
  • Placement : décentré du côté opposé à son accessoire ou à sa carte, à un tiers du bord, sauf s'il est seul.
  • Vérification : frame à un moment de repos, et vérifiez que les pieds reposent sur le sol, sans flotter au-dessus ni s'enfoncer dedans, et que la tête est dégagée du haut du cadre d'au moins 5 %.

Entrée : sautiller

  • Sauts : 2–3, chacun de 300–450 ms, de plus en plus bas : le premier de 8–12 % de la hauteur du personnage, le dernier de 4–6 %. Le déplacement horizontal couvre la même distance en ease-out, de sorte que le dernier saut atterrit doucement.
  • Pose : bras baissés pendant les sauts. Atterrir sur une image dessinée, et tenir 150–300 ms avant le premier geste.
  • Tempo : terminer avant que la voix ne commence, avec au moins 200 ms de marge.
  • Vérification : frame --from --to --keyframes sur l'entrée. Vérifiez que les pieds touchent le sol à chaque image d'atterrissage, et qu'aucune pièce ne traîne ou ne saute devant le corps.

Gestes

Un geste est une pose nommée, et les mouvements pour y entrer et en sortir. Donnez à chaque mouvement un temps d'anticipation (le in de la spécification) pour que la pose se maintienne jusqu'à ce qu'elle se déclenche.

  • Bras baissés : à partir d'une pose de repos avec les bras tendus, tournez chaque bras supérieur de 40–55° vers le corps, et l'avant-bras de 5–15° supplémentaires.
  • Vague : le bras supérieur levé de 40–50° par rapport au repos, sur le côté, et l'avant-bras de 25–35° supplémentaires vers le haut. Balancez l'avant-bras depuis le coude de 15–20° de chaque côté, avec une période de 350–450 ms, pendant au moins 2 balancements complets (800 ms ou plus). Levez-le plus haut et la main passe derrière la tête à l'extrême intérieur du balancement : la tête se dessine par-dessus les bras.
  • Pointer quelque chose : le bras supérieur presque horizontal vers la cible (10–25° au-dessus du repos pour un bras tendu et baissé), et l'avant-bras à moins de 20° du droit, de sorte que la main vise le bord proche de la cible. Arrivez 1–3 images avant le mot qui la nomme.
  • Encourager : les deux bras supérieurs levés de 40–50°, et les avant-bras de 20–30° supplémentaires vers le haut. Pliez-les davantage et les mains se cachent derrière la tête au sommet du dépassement.
  • Mouvements : d'une durée de 250–400 ms. Arrivez sur la courbe de dépassement [0.34, 1.56, 0.64, 1], et revenez au repos sur ease-in-out. Pour le suivi, ajoutez un second mouvement qui ne concerne que l'avant-bras, 2–4 images après celui du bras supérieur.
  • Jamais figé : la tête s'incline de 2–5° sur les mots accentués, comme un bref balancement ou un aller-retour sur 250–400 ms. Un personnage qui maintient une pose pendant plus de 1,5 s sans rien bouger semble figé.
  • Vérification : pour chaque geste, frame --at aux instants que le rapport de cuisson liste pour les extrêmes de cette articulation. Vérifiez que la main est dégagée de la tête et du bord du cadre, et que la pose se lit comme le geste sans le son. Ensuite, frame --crop à l'épaule et au coude sur la pose la plus levée, à l'échelle réelle, et vérifiez qu'il n'y a pas d'espace ou de pièce lâche.

Synchronisation labiale à partir de visèmes

La cuisson écrit la bouche à partir du fichier de visèmes de la voix. Chaque identifiant de visème correspond à une bouche via la table du squelette, et le silence correspond au bec ou aux lèvres au repos, sans superposition. Nommez l'élément vocal et le fichier de visèmes dans la spécification. La bouche suit alors le début et la plage source de cet élément, donc déplacer la voix et cuire à nouveau maintient la synchronisation.

  • Forme la plus courte : 2 images. La cuisson fusionne une forme plus courte dans la forme précédente et indique chaque fusion. Une douzaine de fusions dans une réplique de 6 s est normal.
  • Avance : 0 ms. Si la bouche semble en retard lorsque vous regardez le rendu, avancez d'une image (33 ms à 30 ips), jamais plus.
  • Temporalité : sondez le fichier vocal. Lorsque sa durée est en désaccord avec la durée indiquée du fichier de visèmes, faites confiance à la sonde.
  • Vérification : query --at au milieu de trois mots parlés, et vérifiez qu'un élément de bouche est actif pour chacun. Ensuite, query --at au milieu de la plus longue pause et après la fin de la réplique, et vérifiez qu'aucun ne l'est.

Clignements

  • Durée : 3 images (100 ms à 30 ips), 4 au maximum.
  • Rythme : toutes les 2–4 s, irrégulier, jamais sur un temps fort. Placez-en un juste après qu'un grand mouvement a atterri, et un dans une pause de la réplique. Au moins 2 dans toute période de 8 s.
  • À éviter : un clignement dans la même image que l'arrivée d'un geste, qui masque l'arrivée.
  • Vérification : frame --at l'image du milieu d'un clignement, et vérifiez que les yeux fermés se situent exactement sur la tête, à son inclinaison.

Individual skills in this repo

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

Skills associés