Communitygithub.com

MBehtemam/montagent-skills

Animação de personagens recortados no Montagent: mascotes e fantoches construídos a partir de uma armação de partes, poses e gestos, sincronia labial a partir de visemas e piscadas. Use quando um vídeo do Montagent tiver um personagem que se move ou fala.

O que é montagent-skills?

Esta skill fornece receitas detalhadas para animar personagens recortados (cut-out) no Montagent, onde um personagem é construído a partir de uma armação de partes (rig) como corpo, cabeça, braços e sobreposições faciais. Ela explica como 'assar' (bake) o rig, convertendo as partes em trilhas individuais no projeto, e oferece guias para poses, gestos, entrada em cena com pulos, sincronia labial a partir de arquivos de visemas e piscadas. A skill resolve limitações do Montagent (como falta de herança parental e impossibilidade de trocar imagens de elementos) através de um script externo (`bake_rig.py`) que calcula posições e rotações a cada frame. É útil para desenvolvedores que precisam animar personagens que falam ou gesticulam em vídeos Montagent, garantindo que as animações sejam precisas e evitem erros comuns como pivôs incorretos ou piscadas mal sincronizadas. A skill suporta a criação de cenas curtas com personagens e inclui verificações visuais para garantir qualidade.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Animando um personagem recortado

Receitas para um personagem construído a partir de uma armação de partes: um corpo, uma cabeça, braços em duas peças e sobreposições faciais (formatos de boca e uma piscada) desenhadas na própria tela da cabeça. Elas se encaixam no loop do montagent na etapa de construção; carregue o montagent primeiro, se ainda não o fez. Para um curta onde um personagem fala uma fala, abra a estrutura de curta com personagem antes de planejar.

O que a armação deve fornecer

Leia a descrição da armação antes de qualquer outra coisa. Você precisa, para cada parte: sua imagem, seu tamanho, seu pivô (a articulação em torno da qual gira, como um ponto no desenho original), seu parente e a ordem em que as partes desenham, de trás para frente. Você também precisa de uma tabela dos identificadores de visema da voz para os formatos de boca. A imagem de cada parte deve ser preenchida para que seu pivô seja o centro exato de sua tela. As sobreposições faciais compartilham a tela e o pivô da cabeça.

Se a brief fornecer apenas um único desenho, sem partes ou pivôs, você não pode recortar uma armação às cegas. Avise o usuário e peça uma armação pré-recortada.

Assar a armação

O Montagent não tem herança parental, e um elemento não pode mudar sua imagem. Então um personagem é assado: o script integrado calcula a posição e rotação na tela de cada parte a partir de seus parentes em cada frame desenhado, e escreve cada formato de boca e piscada como seu próprio elemento, exibido por seu próprio intervalo com a transformação da cabeça. Não escreva isso manualmente.

python3 scripts/bake_rig.py <projeto> <armacao> <especificacao> imprime o projeto com uma trilha por parte adicionada. Execute com --help para a especificação: onde o personagem fica, poses nomeadas, os movimentos entre elas, balanços, pulos, a voz e seu arquivo de visemas, e as piscadas. Execute novamente após cada alteração na especificação. Ele substitui apenas as trilhas que escreveu. Mantenha a especificação junto ao projeto: ela é a verdadeira fonte do personagem.

Leia seu relatório. Ele lista cada intervalo de boca que mesclou, a maior lacuna entre qualquer filho e seu parente em cada frame desenhado, e os instantes a observar: a chegada de cada movimento e os ângulos extremos de cada articulação. As posições são em pixels inteiros, então uma lacuna de até cerca de 1,5 px é arredondamento, oculta pelas articulações redondas. Uma lacuna maior significa que os pivôs da armação estão errados.

O validate relata R-EASE-INERT em cada pose que o personagem mantém, e N-TRACK-GAP nas trilhas de boca e piscada entre os intervalos. Ambos são esperados (veja o guia de descobertas).

O resultado assado se parece com isto: cada parte é centralizada em seu pivô, com quadros-chave apenas onde se move, e cada elemento de boca ou piscada copia a transformação da cabeça ao longo de seu intervalo.

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

Receitas

Cada receita fornece intervalos iniciais, não respostas. Cada uma termina em uma etapa de olhar: carregue montagent-craft, então olhe onde a etapa diz antes de prosseguir.

Os ângulos são em graus a partir da pose de descanso desenhada, cada um relativo ao seu parente, e giram no sentido horário na tela. Portanto, um braço no lado direito do espectador sobe com ângulos negativos, e um no lado esquerdo sobe com ângulos positivos.

Colocá-lo no cenário

  • Fundo: uma imagem de cenário em tela cheia com origin top-left, em 0, 0, do tamanho do quadro, na camada mais baixa. Defina a origin explicitamente.
  • Pés no chão: a raiz da armação (o corpo, pivotando nos pés) vai onde o chão encontra a linha de sombra da parede, ou um pouco à frente dela. Em um cenário de 1080 de altura, a borda superior do chão costuma estar 80–85 % do caminho para baixo, então coloque os pés 5–10 % abaixo disso.
  • Tamanho: o personagem 55–75 % da altura do quadro, definido pela escala da especificação (px do quadro por px do desenho). Meça o personagem visível, não o desenho preenchido: a altura do desenho vezes a escala superestima.
  • Lugar: descentralizado para o lado oposto ao seu adereço ou cartão, a um terço do caminho, a menos que esteja sozinho.
  • Olhe: frame em um momento de descanso, e verifique se os pés estão no chão, não flutuando acima ou afundados nele, e que a cabeça está livre do topo do quadro por pelo menos 5 %.

Entrada: pular

  • Pulos: 2–3, cada um 300–450 ms, ficando mais baixos: o primeiro 8–12 % da altura do personagem, o último 4–6 %. O movimento horizontal cobre o mesmo intervalo em ease-out, então o último pulo pousa suavemente.
  • Pose: braços para baixo enquanto pula. Pouse em um quadro desenhado e segure por 150–300 ms antes do primeiro gesto.
  • Tempo: termine antes da voz começar, com pelo menos 200 ms de sobra.
  • Olhe: frame --from --to --keyframes sobre a entrada. Verifique se os pés tocam o chão em cada quadro de pouso, e nenhuma parte se arrasta ou pula à frente do corpo.

Gestos

Um gesto é uma pose nomeada, e movimentos para dentro e para fora dela. Dê a cada movimento um tempo de preparação (o in da especificação) para que a pose segure até partir.

  • Braços para baixo: de uma pose de descanso com os braços estendidos, gire cada braço superior 40–55° em direção ao corpo, e o antebraço 5–15° além.
  • Acenar: o braço superior levantado 40–50° do descanso, para o lado, e o antebraço 25–35° mais para cima. Balance o antebraço a partir do cotovelo por 15–20° cada lado, com um período de 350–450 ms, por pelo menos 2 balanços completos (800 ms ou mais). Levante mais alto e a mão vai atrás da cabeça no extremo interno do balanço: a cabeça desenha sobre os braços.
  • Apontar para algo: o braço superior próximo da horizontal em direção ao alvo (10–25° para cima do descanso para um braço segurado para fora e para baixo), e o antebraço dentro de 20° do reto, para que a mão aponte para a borda próxima do alvo. Chegue 1–3 quadros antes da palavra que o nomeia.
  • Comemorar: ambos os braços superiores para cima 40–50°, e os antebraços mais 20–30° para cima. Dobre-os mais e as mãos se escondem atrás da cabeça no pico do exagero.
  • Movimentos: para dentro em 250–400 ms. Chegue na curva bezier de exagero [0.34, 1.56, 0.64, 1], e volte ao descanso em ease-in-out. Para continuidade, adicione um segundo movimento que nomeia apenas o antebraço, 2–4 quadros após o do braço superior.
  • Nunca congelado: a cabeça inclina 2–5° em palavras acentuadas, como um balanço curto ou um movimento de ida e volta em 250–400 ms. Um personagem que segura uma pose por mais de 1,5 s sem nada se movendo parece uma imagem parada.
  • Olhe: para cada gesto, frame --at os instantes que o relatório de assamento lista para os extremos daquela articulação. Verifique se a mão está livre da cabeça e da borda do quadro, e se a pose é lida como o gesto sem o som. Depois frame --crop no ombro e no cotovelo na pose mais levantada, em escala real, e verifique se há uma lacuna ou uma parte solta.

Sincronia labial a partir de visemas

A assadura escreve a boca a partir do arquivo de visemas da voz. Cada identificador de visema mapeia para uma boca através da tabela da armação, e o silêncio é o bico ou lábios em repouso, sem sobreposição. Nomeie o elemento de voz e o arquivo de visemas na especificação. A boca então segue o início e o intervalo de origem desse elemento, então mover a voz e assar novamente mantém a sincronia.

  • Forma mais curta: 2 quadros. A assadura mescla uma mais curta na forma anterior e relata cada mescla. Uma dúzia de mesclas em uma fala de 6 s é normal.
  • Avanço: 0 ms. Se a boca parecer atrasada ao assistir a renderização, avance em um quadro (33 ms a 30 fps), nunca mais.
  • Tempos: sonde o arquivo de voz. Quando sua duração discordar da duração declarada no arquivo de visemas, confie na sonda.
  • Olhe: query --at no meio de três palavras faladas e verifique se um elemento de boca está ativo em cada uma. Depois query --at no meio da pausa mais longa e após o término da fala, e verifique se nenhum está ativo.

Piscadas

  • Duração: 3 quadros (100 ms a 30 fps), no máximo 4.
  • Ritmo: a cada 2–4 s, irregular, nunca em uma batida. Coloque uma logo após um grande movimento pousar, e uma em uma pausa na fala. Pelo menos 2 em cada 8 s.
  • Evite: uma piscada no mesmo quadro da chegada de um gesto, o que esconde a chegada.
  • Olhe: frame --at o quadro do meio de uma piscada e verifique se os olhos fechados estão exatamente sobre a cabeça, em sua inclinação.

Individual skills in this repo

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

Habilidades Relacionadas