Communitygithub.com

MBehtemam/montagent-skills

Animación de personajes recortables en Montagent: mascotas y títeres construidos a partir de un rig de partes, poses y gestos, sincronización labial con una línea de voz a partir de visemas, parpadeos. Úsalo cuando un video de Montagent tenga un personaje que se mueve o habla.

¿Qué es montagent-skills?

Esta habilidad define cómo animar personajes recortables (cut-out) dentro de Montagent, una herramienta para crear videos animados. El personaje se construye a partir de un rig de partes: cuerpo, cabeza, brazos en dos piezas y superposiciones faciales (formas de boca y parpadeo) dibujadas en el lienzo de la cabeza. Dado que Montagent no tiene herencia parental ni permite que un elemento cambie su imagen, el rig se "hornea" (bake) usando un script que calcula la posición y rotación de cada parte en cada fotograma, escribiendo cada forma de boca y parpadeo como su propio elemento. Esto permite crear movimientos complejos como gestos, entrada saltando, sincronización labial a partir de visemas y parpadeos con ritmo natural. La habilidad es compatible con Montagent y su herramienta de revisión `montagent-craft`. Incluye recetas detalladas para posicionar al personaje en el escenario, animar gestos como señalar o saludar, sincronizar labios con precisión y evitar errores comunes como espacios entre partes o parpadeos en momentos críticos.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Animación de un personaje recortable

Recetas para un personaje construido a partir de un rig de partes: un cuerpo, una cabeza, brazos en dos piezas y superposiciones faciales (formas de boca y un parpadeo) dibujadas en el lienzo de la cabeza. Se integran en el bucle de montagent en el paso de horneado; carga montagent primero si no lo has hecho. Para un corto donde un personaje dice una línea, abre la estructura de corto de personaje antes de planificar.

Lo que el rig debe proporcionarte

Lee la descripción del rig antes que nada. Necesitas, para cada parte: su imagen, su tamaño, su pivote (la articulación sobre la que gira, como un punto en el dibujo original), su padre y el orden en que las partes se dibujan, de atrás hacia adelante. También necesitas una tabla que mapee los ids de visemas de la voz a las formas de boca. La imagen de cada parte debe tener relleno para que su pivote sea el centro exacto de su lienzo. Las superposiciones faciales comparten el lienzo y el pivote de la cabeza.

Si el encargo proporciona solo un dibujo único, sin partes ni pivotes, no puedes recortar un rig a ciegas. Informa al usuario y solicita un rig precortado.

Hornear el rig

Montagent no tiene herencia parental y un elemento no puede cambiar su imagen. Por lo tanto, un personaje se hornea: el script empaquetado calcula la posición y rotación en pantalla de cada parte a partir de sus padres en cada fotograma dibujado, y escribe cada forma de boca y parpadeo como su propio elemento, mostrado durante su propio lapso con la transformación de la cabeza. No escribas esto tú mismo.

python3 scripts/bake_rig.py <proyecto> <rig> <especificación> imprime el proyecto con una pista por parte añadida. Ejecútalo con --help para la especificación: dónde se para el personaje, poses nombradas, los movimientos entre ellas, balanceos, saltos, la voz y su archivo de visemas, y los parpadeos. Ejecútalo de nuevo después de cada cambio en la especificación. Reemplaza solo las pistas que escribió. Guarda la especificación junto al proyecto: es la fuente real del personaje.

Lee su informe. Enumera cada lapso de boca que fusionó, la brecha más grande entre cualquier hijo y su padre en cada fotograma dibujado, y los instantes a revisar: la llegada de cada movimiento y los ángulos extremos de cada articulación. Las posiciones son en píxeles enteros, por lo que una brecha de hasta aproximadamente 1.5 px es redondeo, oculto por las articulaciones redondas. Una brecha mayor significa que los pivotes del rig están mal.

validate reporta R-EASE-INERT en cada pose que el personaje mantiene, y N-TRACK-GAP en las pistas de boca y parpadeo entre lapsos. Ambos son esperados (consulta la guía de hallazgos).

El resultado horneado se ve así: cada parte está centrada en su pivote, con fotogramas clave solo donde se mueve, y cada elemento de boca o parpadeo copia la transformación de la cabeza durante su lapso.

{
  "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"}]}
    ]}
  ]
}

Recetas

Cada receta proporciona rangos iniciales, no respuestas. Cada una termina en un paso de inspección: carga montagent-craft, luego inspecciona donde dice el paso antes de continuar.

Los ángulos están en grados desde la pose de reposo dibujada, cada uno relativo a su padre, y los giros positivos son en sentido horario en pantalla. Por lo tanto, un brazo a la derecha del espectador se eleva con ángulos negativos, y uno a la izquierda del espectador se eleva con ángulos positivos.

Colocarlo en el escenario

  • Fondo: una imagen de escenario a tamaño completo con origin top-left, en 0, 0, del tamaño del fotograma, en la capa más baja. Establece el origin explícitamente.
  • Pies en el suelo: la raíz del rig (el cuerpo, pivotando en los pies) se coloca donde el suelo se encuentra con la línea de sombra de la pared, o un poco delante de ella. En un escenario de 1080 de alto, el borde superior del suelo suele estar al 80–85 % del camino hacia abajo, así que coloca los pies un 5–10 % por debajo de eso.
  • Tamaño: el personaje al 55–75 % de la altura del fotograma, establecido por la escala de la especificación (píxeles del fotograma por píxel del dibujo). Mide el personaje visible, no el dibujo con relleno: la altura del dibujo multiplicada por la escala lo sobreestima.
  • Lugar: descentrado hacia el lado opuesto a su accesorio o tarjeta, a un tercio del camino, a menos que esté solo.
  • Inspecciona: frame en un momento de reposo, y verifica que los pies estén sobre el suelo, no flotando sobre él ni hundidos, y que la cabeza esté libre del borde superior del fotograma por al menos un 5 %.

Entrada: saltar

  • Saltos: 2–3, cada uno de 300–450 ms, haciéndose más bajos: el primero del 8–12 % de la altura del personaje, el último del 4–6 %. El movimiento horizontal cubre el mismo lapso con ease-out, por lo que el último salto aterriza suavemente.
  • Pose: brazos abajo mientras salta. Aterriza en un fotograma dibujado y mantén la pose 150–300 ms antes del primer gesto.
  • Tiempo: termina antes de que comience la voz, con al menos 200 ms de margen.
  • Inspecciona: frame --from --to --keyframes en la entrada. Verifica que los pies toquen el suelo en cada momento de aterrizaje, y que ninguna parte se arrastre o salte delante del cuerpo.

Gestos

Un gesto es una pose nombrada, y movimientos hacia y desde ella. Dale a cada movimiento un tiempo de entrada (el in de la especificación) para que la pose se mantenga hasta que comience.

  • Brazos abajo: desde una pose de reposo con los brazos extendidos, gira cada parte superior del brazo 40–55° hacia el cuerpo, y el antebrazo 5–15° más.
  • Saludar: la parte superior del brazo elevada 40–50° desde el reposo, hacia un lado, y el antebrazo 25–35° más arriba. Balancea el antebrazo desde el codo 15–20° en cada dirección, con un período de 350–450 ms, durante al menos 2 balanceos completos (800 ms o más). Si lo elevas más, la mano va detrás de la cabeza en el extremo interior del balanceo: la cabeza se dibuja sobre los brazos.
  • Señalar algo: la parte superior del brazo casi horizontal hacia el objetivo (10–25° hacia arriba desde el reposo para un brazo extendido y hacia abajo), y el antebrazo dentro de 20° de estar recto, de modo que la mano apunte al borde cercano del objetivo. Llega 1–3 fotogramas antes de la palabra que lo nombra.
  • Alegría: ambas partes superiores de los brazos hacia arriba 40–50°, y los antebrazos otros 20–30° hacia arriba. Si los doblas más, las manos se esconden detrás de la cabeza en el pico del exceso.
  • Movimientos: entrada en 250–400 ms. Llega con la curva bezier de exceso [0.34, 1.56, 0.64, 1], y vuelve al reposo con ease-in-out. Para el seguimiento, añade un segundo movimiento que nombre solo el antebrazo, 2–4 fotogramas después del de la parte superior del brazo.
  • Nunca congelado: la cabeza se inclina 2–5° en palabras acentuadas, como un balanceo corto o un movimiento de ida y vuelta en 250–400 ms. Un personaje que mantiene una pose durante más de 1.5 s sin que nada se mueva se percibe como una imagen estática.
  • Inspecciona: para cada gesto, frame --at los instantes que el informe de horneado lista para los extremos de esa articulación. Verifica que la mano esté libre de la cabeza y el borde del fotograma, y que la pose se lea como el gesto sin el sonido. Luego frame --crop en el hombro y el codo en la pose más elevada, a escala real, y verifica si hay un espacio o una parte suelta.

Sincronización labial a partir de visemas

El horneado escribe la boca a partir del archivo de visemas de la voz. Cada id de visema se mapea a una boca mediante la tabla del rig, y el silencio es el pico o los labios en reposo, sin superposición. Nombra el elemento de voz y el archivo de visemas en la especificación. La boca entonces sigue el inicio y el rango de origen de ese elemento, por lo que mover la voz y hornear de nuevo mantiene la sincronización.

  • Forma más corta: 2 fotogramas. El horneado fusiona una más corta en la forma anterior y reporta cada fusión. Una docena de fusiones en una línea de 6 s es normal.
  • Adelanto: 0 ms. Si la boca se siente tarde al ver el render, adelanta un fotograma (33 ms a 30 fps), nunca más.
  • Tiempos: prueba el archivo de voz. Cuando su duración discrepe con la duración declarada del archivo de visemas, confía en la prueba.
  • Inspecciona: query --at la mitad de tres palabras habladas, y verifica que un elemento de boca esté activo en cada una. Luego query --at la mitad de la pausa más larga y después de que termine la línea, y verifica que ninguno lo esté.

Parpadeos

  • Duración: 3 fotogramas (100 ms a 30 fps), 4 como máximo.
  • Ritmo: cada 2–4 s, irregular, nunca en un tiempo fuerte. Coloca uno justo después de que termine un movimiento grande, y uno en una pausa de la línea. Al menos 2 en cualquier lapso de 8 s.
  • Evita: un parpadeo en el mismo fotograma que la llegada de un gesto, lo que oculta la llegada.
  • Inspecciona: frame --at el fotograma medio de un parpadeo, y verifica que los ojos cerrados estén exactamente sobre la cabeza, con su inclinación.

Individual skills in this repo

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

Skills relacionados