Communitygithub.com

Handmade Stage Film

Transforma os stills de campanha de uma marca em um curta-metragem que parece um show de palco em stop-motion: cada foto ganha vida com movimentos rígidos e deliberados, adereços recortados das fotos voam como fantoches de papel, legendas escritas à mão em papel rasgado contam a história, e tudo termina com o logotipo e o produto. Estende os stills para 9:16 e os anima com Nano Banana 2 e Kling 2.5 Turbo, mantendo rostos, produtos e rótulos exatamente como foram fotografados, e então renderiza o vídeo final localmente.

O que é Handmade Stage Film?

O `Handmade Stage Film` é uma skill para agentes de IA (como Claude Code, Cursor ou Codex) que transforma campanhas de fotos estáticas de uma marca em um curta-metragem animado no estilo de um teatro de fantoches de papel com stop-motion. A skill utiliza as próprias fotos da marca, estendendo-as para o formato 9:16 com a ajuda dos modelos Nano Banana 2 e Kling 2.5 Turbo, e anima-as com movimentos deliberadamente rígidos e ‘tremidos’ para criar uma estética artesanal. Os recortes dos adereços das fotos originais viram fantoches, legendas escritas à mão em papel rasgado guiam a narrativa, e o vídeo final é renderizado localmente com headless Chrome e FFmpeg, mantendo rostos, produtos e rótulos intactos. A skill é útil para criar anúncios ou conteúdo de marca com um toque único e memorável, sem precisar de produção de vídeo tradicional. O fluxo de trabalho inclui a coleta de stills, roteirização, geração de keyframes, clipes, fantoches, som e renderização final, com custos de API para os modelos de IA pagos pelo usuário. A skill suporta a criação de um curta de 15 a 20 segundos, com som de caixa de música e efeitos sonoros sintetizados, e é ideal para plataformas como Instagram, TikTok e Xiaohongshu.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/DarthManly/handmade-stage-film-skill/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

O que Handmade Stage Film faz?

Noite de Halloween, nada na TV: uma garota com um corte chanel preto senta dentro de um sofá de papelão pintado, bebida rosa na mão, e clica no controle remoto de papelão. A TV de papelão liga com chiado, um pequeno fantasma dança na tela, depois sai dela e flutua para longe. Ele paira perto do copo dela (

"Queria um gole." ), pousa na mesa xadrez onde um garfo gigante esfaqueia um prato de frutas pintadas ("Gardênia. Frutas. Iogurte."), e um gole depois ela está sentada em um chapéu de bruxa gigante enquanto estrelas explodem ao seu redor ("...magia total."). O copo ganha um close-up com um rabisco "Água Mágica Bonita" e uma seta, e o último cartão tem o logotipo, o copo, o fantasma, "Edição Halloween" e onde está à venda. Cada quadro vem das sete fotos de campanha da própria marca.

É feito em quatro partes:

  • scripts/generate.mjs transforma os stills nas peças: keyframes 9:16 (Nano Banana 2 pinta a extensão extra, os pixels originais voltam por cima), clipes Kling, adereços recortados, rótulos recolocados e o logotipo.
  • scripts/reel.mjs corta os clipes em um único rolo no ritmo do filme.
  • scripts/sfx.mjs sintetiza o som: uma valsa de caixa de música original e um som em cada evento.
  • scripts/render.mjs reproduz tudo como um show de palco: movimento escalonado a 12 quadros por segundo, tremor de câmera na mão, granulação em movimento, fantoches, legendas em papel rasgado, tags com setas, uma tela de TV que liga e o último cartão. Renderiza localmente com headless Chrome e FFmpeg.

Configuração (uma vez por máquina)

Execute dentro da pasta desta Skill:

npm install

Isso instala puppeteer-core e ffmpeg-static. O Google Chrome deve estar instalado, ou defina CHROME_PATH para um executável Chrome/Chromium (npx @puppeteer/browsers install chrome-headless-shell@stable mostra um).

O material precisa de uma chave de API para Nano Banana 2 e Kling 2.5 Turbo; os scripts os chamam através de um gateway de API de modelo, onde a chave é criada (https://fal.ai/dashboard/keys). O usuário a define em seu próprio terminal como FAL_KEY (por exemplo, em seu perfil de shell). Nunca peça para colar a chave no chat e nunca a imprima.

Custo

Uso do modelo, faturado na sua própria chave de API: $0.08 para cada still estendido para 9:16 (e cada edit), $0.35 para cada clipe de 5 segundos e uma fração de centavo para cada recorte (preços de outubro de 2026). Um filme de sete stills com cinco clipes custa cerca de $2.30. O rolo, os fantoches, as legendas, o som e o MP4 final são feitos gratuitamente em sua máquina. Informe o custo ao usuário antes de gerar.

O que o faz funcionar

  • Suas próprias fotos, intocadas onde importa. A extensão e cada clipe começam a partir dos stills reais da marca; extend coloca os pixels originais de volta sobre a versão da IA, e relabel coloca um rótulo nítido de volta em qualquer quadro onde o clipe o borrou.
  • Uma história, não um slideshow. Planeje um pequeno enredo entre as fotos, com uma coisa que viaja entre elas (aqui um fantasma fantoche que escapa de uma TV). As legendas são pequenos beats da história, não slogans.
  • Desajeitado de propósito. Tudo se move em passos de 1/12 s com um pequeno tremor, fantoches balançam em suas teclas, legendas aparecem em três passos e setas desenham em três traços. Não alise.
  • Metade produto, metade marca. O produto está na maioria das fotos e ganha um close-up com uma tag; o último cartão é o logotipo, o produto, o nome e onde comprar.

Fluxo de trabalho

  1. Colete 4–8 stills de uma única sessão de fotos (3:4, 4:5 ou 9:16), o nome do produto, uma linha (sabores, materiais), uma nota ("Edição Halloween") e o CTA. Pergunte se os stills têm um logotipo ou selo impresso na parte inferior (ele é pintado para fora dos quadros e removido para o último cartão).
  2. Roteiro (mostre antes de gerar): a ordem das fotos, o enredo, o que se move em cada clipe (uma ou duas pequenas ações, o produto mantido parado), quais adereços recortar como fantoches e o que eles fazem, as legendas e as tags, e o custo. Mantenha-o em 15–20 s.
  3. Keyframes: node scripts/generate.mjs extend --in still.jpg --out keys/<foto>.png --cover <linhas> para cada still que não seja 9:16 (--cover = a altura em pixels da faixa do logotipo impresso na parte inferior do original, se houver). Veja cada um em tamanho real: se o modelo deixou um objeto espelhado ou duplicado nas novas faixas, cubra-o com textura lisa da mesma foto.
  4. Teste: um clipe, a foto com o gancho da trama: node scripts/generate.mjs clip --start keys/<foto>.png --prompt "…" --out clips/<foto>.mp4. O prompt nomeia apenas o que se move ("ela pressiona um botão no controle remoto com o polegar; o copo permanece ereto e parado"); um sufixo fixo mantém a câmera travada e o cenário, rosto e produto inalterados. Mostre-o e então faça o resto.
  5. Clipes para as outras fotos em movimento. Assista cada um quadro a quadro: anote onde a ação termina (para colocar o som e os fantoches nela) e onde o texto pequeno no produto borra. Corrija rótulos com relabel --clip … --key keys/<foto>.png --box x,y,w,h (a caixa do rótulo no keyframe), ou use apenas os quadros antes do produto se mover. Um clipe não é necessário para todas as fotos: um still close-up com um zoom lento (still, box, boxTo) geralmente é melhor para o produto.
  6. Adereços: cutout --in keys/<foto>.png --box x,y,w,h --out props/<nome>.png para cada fantoche (um personagem, estrelas, uma flor, uma baga, o produto em uma mão); edit para um prato com algo removido (uma tela de TV sem seu fantasma). O logotipo: wordmark --in still.jpg --box x,y,w,h --out props/wordmark.png. O fundo do último cartão é um recorte de uma parede pintada de um dos keyframes.
  7. Construa effect.json a partir de examples/example.json (veja Fotos e o último cartão), então node scripts/reel.mjs effect.json --out reel.mp4 e defina "reel": "reel.mp4".
  8. Som: node scripts/sfx.mjs effect.json --out stage.m4a, então "music": "stage.m4a". Execute novamente após qualquer alteração no tempo. --no-bed --music track.mp3 substitui a valsa por uma faixa que o usuário tem licença para usar.
  9. Valide: node scripts/validate.mjs effect.json — corrija todos os erros e leia os avisos para o usuário.
  10. Rascunho: node scripts/render.mjs effect.json --quality draft --width 540 --out draft.mp4, e verifique um quadro de cada foto: nenhuma legenda, tag ou fantoche sobre um rosto ou o produto, tudo fora dos 14% direitos onde os botões da plataforma ficam.
  11. Final: node scripts/render.mjs effect.json --out film.mp4 --poster poster.png. Para Xiaohongshu, corte uma versão 3:4: ffmpeg -i film.mp4 -vf crop=720:960:0:160 -c:a copy film-3x4.mp4 (na largura padrão de 720; verifique se nada importante está no topo ou nos 160 px inferiores).

Fotos

Todas as posições estão em pixels de quadro 1080 × 1920. Cada foto é uma de:

  • Uma foto de clipe: clip (o arquivo do qual reel.mjs corta), from e to (segundos no clipe), speed (0.5 = metade da velocidade, que com a reprodução em 12 passos usa cada quadro de um bom trecho curto), hold (segundos que o primeiro quadro segura antes de se mover).
  • Uma foto still: still (uma imagem), len, box e boxTo ([x, y, width] janelas 9:16 nos pixels da imagem; a visão se move de uma para a outra).

Cada foto pode ter:

  • captions: { "text", "at", "out", "x", "y", "rot", "size" } — pedaços de papel rasgado com palavras escritas à mão; \n quebra uma linha.
  • tags: { "text", "at", "x", "y", "to": [x, y], "ink": "dark" | "light", "rot", "size" } — palavras escritas à mão com uma seta que se desenha para to.
  • puppets: { "image", "path": [[t, x, y, width, rotation], …], "sound", "exit", "flip", "wobble" } — um recorte movido entre suas teclas (t em segundos na foto, x e y seu centro). Uma tecla com largura 0 e então uma largura total um passo depois é um pop. Ele segura sua última tecla a menos que "exit": true. sound toca em sua primeira tecla.
  • screen: { "rect": [x, y, w, h], "off", "static", "plate", "plateAt" } — uma tela de TV ou telefone que fica preta até off, chiado até static, e mostra plate (o mesmo keyframe com a tela esvaziada) a partir de plateAt, para que um fantoche possa escalar para fora dela.
  • sounds: [[t, "kind"], …] — click, tvon, static, ghost, boing, tap, pop, whoosh, land, stab, sip, sparkle, chime, paper, scribble, cut. Cortes, legendas, tags, telas e fantoches com um sound obtêm os seus automaticamente.

O último cartão

end: len, bg (uma parede pintada 9:16), wordmark (wordmarkY, wordmarkWidth), name (nameY, nameSize), line (lineY), note em um pedaço de papel (noteX, noteY), cta em uma pílula (ctaY), e puppets como os de uma foto (o produto em uma mão deslizando da borda, o personagem, estrelas). Cada um tem um tempo …At.

Campos

CampoObrigatórioNotas
reelsimcaminho para um arquivo de vídeo, relativo ao arquivo JSON — cada clipe de foto cortado em um rolo 9:16 silencioso por scripts/reel.mjs (reel.mp4)
shotssimlista de 2 a 10 entradas: clip, from, to, speed, hold, still, len — o filme em ordem: fotos de clipe (um clipe de IA de um dos seus stills) e fotos still (um still com um movimento lento); veja SKILL.md, Fotos
end.bgnãocaminho para uma imagem, relativo ao arquivo JSON — o fundo do último cartão: uma parede pintada ou cenário de suas fotos, 9:16
end.wordmarknãocaminho para uma imagem, relativo ao arquivo JSON — seu logotipo em fundo transparente (scripts/generate.mjs wordmark)
end.namenãotexto, abaixo de 4 palavras — o nome do produto, escrito à mão no último cartão
end.linenãotexto, abaixo de 6 palavras — uma pequena linha abaixo do nome, por exemplo os sabores
end.notenãotexto, abaixo de 4 palavras — em um pedaço de papel rasgado, por exemplo "Edição Halloween"
end.ctanãotexto, abaixo de 12 palavras
musicnãocaminho para um arquivo de áudio, relativo ao arquivo JSON — a trilha sonora de scripts/sfx.mjs (stage.m4a)
palettenãocores como #RRGGBB; chaves: ink (legendas e tags escuras), paper (os pedaços de papel e tags claras) e accent (a pílula CTA)

Dicas

  • Escreva os prompts dos clipes de forma enxuta: uma ou duas pequenas ações, um rosto inexpressivo, "o copo permanece ereto e parado, rótulo voltado para a câmera". Gestos grandes borram rostos e rótulos.
  • O Kling escolhe seu próprio tempo: observe onde a ação termina e coloque o clique, o corte e os fantoches naquele quadro, não em um número redondo.
  • Dê à história um viajante: um fantoche cortado de uma foto que aparece nas próximas fotos une sete stills em um filme.
  • Corte fantoches das próprias fotos, não de novas artes: a mesma tinta, papel e luz os fazem pertencer.
  • Mantenha as legendas em três ou quatro palavras; as imagens contam a maior parte.

Saída

H.264 MP4, 1080 × 1920, 30 fps (a imagem se move em 12 passos por segundo), 15 a 20 segundos com o som, mais um quadro de pôster (PNG).

Habilidades Relacionadas