Communitygithub.com

paper-collage-film

Filme de colagem em papel rasgado, em stop-motion (2 quadros), criado por código; IA usada apenas para recortes fotográficos. Para vídeos colagem, recortes, scrapbook, estilo revista mista, ou quando enviarem uma referência de colagem em papel pedindo 'faça como esta ref'. Não para colagens estáticas, moodboards, grade de clipes ou transição única.

O que é paper-collage-film?

Este skill cria filmes animados em stop-motion (com 2 quadros por posição) no estilo 'colagem de papel rasgado', com duração de 5 a 30 segundos, ideal para introduções de YouTube, trailers de canais, promoções de marcas ou lojas, no formato 16:9. Todo o processo é construído em código (JavaScript/Node) e a IA é usada exclusivamente para gerar recortes fotográficos individuais; fundos, personagens e a animação em si são gerados por um motor de colagem programático. O skill é baseado na técnica 'Africa Rocks' do San Diego Zoo: camadas de papel rasgado com bordas fibrosas brancas, pontilhado, céu em aquarela, recortes fotográficos caindo na cena, transições como zoom em lente, iris de papel, caleidoscópio, foguete de tiras, queda de título e rasgo de página até o logo. Ele já vem com um motor funcional, exemplos editáveis de 10 e 30 segundos (kaye.creatives), partitura sintetizada com foley de papel, remapeamento de paleta, folhas de escolha de fonte e paleta, ferramentas de chroma key e renderização. O fluxo de trabalho é orientado a código: o usuário edita arquivos JavaScript (como `scenes.js`, `score.html`, `grade.js`) para ajustar tempo, cenas, música e paleta, e o skill fornece scripts para novo projeto, extração de referências, renderização de rascunhos e finais. Suporta macOS (Swift, AVFoundation), Chrome/Brave, Node ≥ 22 e acesso à internet para fontes Google. Não é adequado para colagens estáticas, moodboards, grades de clipes em tela dividida ou transições únicas.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/rfrossard/motion-director/tree/HEAD/paper-collage-film

Perguntar na sua IA favorita

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

Documentação

O que paper-collage-film faz?

Um filme de colagem = uma jornada contínua de câmera em stop-motion através de papel rasgado, cortada ao som da música, terminando em um título, um rasgo de página para o logotipo e uma chamada para ação. Tudo é código, exceto os recortes fotográficos. assets/template/ é um filme completo de 10 s (lançamento do YouTube kaye.creatives) que renderiza como enviado — adapte-o, não comece do zero.

O que os usuários desta skill esperam (references/lessons.md tem a história)

  • Olhe a referência primeiro. Abra todos os links enviados, extraia quadros a 12 qps, leia as folhas. Várias refs → encontre a que eles mais amam.
  • Técnica da ref, história da marca. Copie a gramática de movimento, nunca o enredo (sem mapeamento suricata-por-suricata).
  • Código primeiro; gere apenas recortes fotográficos. Nenhum fundo gerado, nenhuma pessoa ou personagens de IA, a menos que solicitado, nenhuma geração de vídeo.
  • Escolhas como folhas renderizadas, não palpites: fonte do título → tools/font_sheet.sh, cores → tools/palette_sheet.sh; o usuário responde com um número.
  • Rápido e visível: envie a tabela de batidas, a folha de recortes e um rascunho cedo, dê ETAs em tempo real, use agentes paralelos (references/agent_workflow.md).
  • Fale no idioma do usuário; texto na tela em inglês, a menos que solicitado. Nenhum flash em tela cheia (fotossensibilidade).

0 · Captação (pergunte uma vez, em uma mensagem, apenas o que você não puder inferir)

Ortografia exata da marca/handle e cada palavra na tela · duração · formato (veja abaixo) · idioma do texto (cirílico altera fontes) · CTA (inscrever-se / seguir / visitar) · arquivo de logotipo ou logotipo de texto · música: sintetizada ou faixa própria · OK gastar ≈ N×2 créditos em recortes.

Formato. Os layouts de colagem são desenhados para 1920×1080 apenas (collage.js e scenes.js usam coordenadas absolutas). Para um Reel 9:16 sem um novo layout: renderize o filme 16:9 e coloque-o em largura total (1080×608) em uma página 1080×1920 entre faixas de papel rasgado que carregam o título, handle e CTA. Um filme vertical verdadeiro significa reposicionar cada coordenada — cite como tempo extra.

1 · Projeto (1 min)

<skill>/scripts/new_project.sh <output_root> <slug>             # nova marca: paleta desligada (cores de papel originais)
<skill>/scripts/new_project.sh <output_root> <slug> --example   # reproduzir o filme kaye.creatives enviado (paleta noturna)
cd <project>                                                    # execute todos os comandos abaixo a partir do projeto (agentes: prefixe cada chamada com `cd <project> &&`)

Cria comp/, audio/score.html, tools/ (extract/encode/mux/greenkey compilados), cutouts/, refs/, review/. Precisa de macOS (Swift, AVFoundation, afconvert), Chrome/Brave, Node ≥ 22 (NODE_BIN=/path/to/node força um; se um fallback foi vinculado, export PATH="<project>/tools/bin:$PATH" para chamadas node diretas — tools/*.sh fazem isso sozinhas), internet para Google Fonts. Recortes ausentes renderizam como cartões cinza rotulados, então um rascunho funciona antes de qualquer geração. O exemplo carrega: cam_side cam_front car helmet phone plane_front plane_side clap reel laptop headphones midi phone_gimbal cassette cloud_1..4 rocks_a/b/c tree_a/b grass_strip.

2 · Referência (10–15 min)

Baixe a ref (Pinterest: resolva pin.it → página do pin → URLs v1.pinimg.com/videos/…/720w.mp4 ou /mc/720p/ H.264; GIF: divida quadros com ImageIO/Swift — sem ffmpeg). tools/extract ref.mp4 refs/f 12 960 0.85, depois folhas de contato com tools/sheet.mjs (legendas = quadro/12 s; tools/strip.sh assume 24 qps, então suas etiquetas são metade do tempo real em quadros de 12 qps). OLHE. Escreva refs/analysis.md com os cabeçalhos de references/reference_san_diego.md: tempos de corte, curvas de movimento, hexadecimais de paleta, semelhanças de fonte, lista de itens a copiar — e mapeie cada dispositivo da ref para um dispositivo CL/CLX ou marque como "novo dispositivo"; liste os dispositivos San Diego a serem descartados. A ref do usuário substitui os números San Diego abaixo.

Gramática de movimento (medições San Diego — references/reference_san_diego.md)

  • Tudo em pares (desenho a cada 2 quadros) (12 desenhos/s): tempo de movimento q(t) = floor(t*12)/12, 1–2 px de agitação de camada por desenho.
  • Sem cortes duros até o logotipo: zoom-throughs, rasgo de página, wipe rasgado, buraco hexagonal no caleidoscópio, inclinação para cima atrás de um foguete de tiras.
  • Drop-in em 3 desenhos (borda entra → no ar −8° → pousa) + 1 desenho de estabilização (1.03→1); pop-ups em 1–2 desenhos.
  • Pressione em um detalhe: zoom exponencial ~1→6× em ~1 s, centro do zoom interpola para o detalhe.
  • Caleidoscópio: anéis espelhados, sem rotação, escala dobra a cada ~0.35–0.38 s; um adesivo repetido apenas como um anel.
  • Título chega de cima, expo-out em 9 desenhos, sem ultrapassagem, contorno de papel branco + extrusão de perspectiva.
  • Rasgo de página ~0.42 s com um verso escuro enrolando → faixa rasgada com a marca; cintilação de estilo alternativo segurada em quadros 2-1-2-3-2-2, dentro da faixa.

3 · História + tabela de batidas (envie em ~15 min)

Escreva script.md: tempo | música | o que vemos | texto na tela (textual), grade de 120 BPM (batida 0.5 s, 24 qps). Escolha a duração:

10 s (o exemplo fornecido)

tbatida
0–1.0página de colagem; ▶ cai (pousa 0.5); tag do canal; cursor pressiona ▶ 0.875
1.0página rasga do centro → mundo 1 (carro F1 através de faixas diagonais, centro 1.75; capacete bate 2.0; tag)
2.5wipe rasgado → câmera de filme, pressione acelerado na lente, iris de papel 2.9–3.4 (tag)
3.5–4.5anéis de caleidoscópio, panfletos 4.2/4.3/4.4, buraco hexagonal → mesa
4.5–5.5mesa: laptop 4.5, equipamento 4.75/5.0/5.25, prompt digita, "generator ✦" 5.15 → resultado
5.5–5.95inclinação para cima, foguete de tiras leva ▶ embora
6.0título "KAYE / CREATIVES" (Fraunces Black Italic), explosão radial, biplano cruza
7.5–7.92rasgo de página → faixa de logotipo
8.0–8.5cintilação do logotipo dentro da faixa
8.5–10INSCREVA-SE bate, clique 9.0 → INSCRITO ✓, sino 9.15, movimento lento

6 s intro (toca antes de cada vídeo: sem rasgo, sem mesa, sem CTA): 0–0.5 hero cai · 0.75–1.5 pressione em um detalhe, íris 1.0–1.42 · 1.5–2.5 caleidoscópio, panfletos 2.17/2.33, buraco 2.33–2.5 · 2.5–2.96 inclinação do foguete · 3.0 título (pousa 3.75) + explosão · 4.5–4.92 rasgo · 5.0–5.5 cintilação da faixa · 5.5–6 batida final + segura. Partitura: dur 6, drop 0.5, mid 1.5, build 2.5, vac 2.95, lift 3.0, end 5.5. Logotipo ≥ 1.0 s na tela.

15 s promo (espelha a ref de 15 s): 0–0.5 hero cai · 0.5–2.5 pop-ups · 2.5–3.5 pressione + íris · 3.5–5.5 caleidoscópio, buraco 5.33 · 5.5–7.5 mundo 2, explosão liderada por um panfleto · 7.5–9.5 mundo 3 / momentos de produto · 9.5–10.5 foguete · 10.5 título (pousa 11.25) · 12.5–12.92 rasgo · 13.0–13.5 cintilação · 13.5–15 CTA.

30 s: assets/examples/kaye_30s_scenes.js + kaye_30s_score.html (anúncio de telefone, cartas de resgate, parede de miniaturas).

Revestimento para outra marca

dispositivokaye (YouTube)ex.: cafeteria
hero drop▶ botão playxícara / saco de grãos (CL.sprite + CL.drop)
pop-upsadereços de câmeracroissant, grãos
rasgo → mundo 1carro F1 através de faixastambor de torrefação, fazenda
pressione + írislente de câmera (cam_front)creme no café (meça centro + raio em px do sprite; fórmula da íris em api.md)
anéis de caleidoscópiocarros, rolosgrãos, xícaras (um anel por adesivo)
mesa + telainterface do promptbalcão + ticket de pedido (CLX.tag / CLX.ransom) — ou descarte
foguete▶ em tirasxícara em uma pluma de tiras
título / faixanome do canal / kaye.creativesnome da loja / logotipo ou @handle
CTAINSCREVA-SE + sino + cursorhandle + chip de endereço (CLX.tag), estrela de horário (CLX.star)
CLX.play, subscribe, thumb, screen e cursor são dispositivos do YouTube. Fundos em collage.js usam nomes de recortes fixos (CL.page: grass_strip + rocks_; CL.diag: rocks_ + cassette; CL.cloudsky: cloud_1..4): o revestimento de código zero é gerar substitutos sob os mesmos nomes (grass_strip = uma tira rasgada de grãos de café, rocks_* = sacos de meio-tom preto/branco); caso contrário, copie pageLayers para scenes.js. Atualize a lista cuts: de warm() para novos nomes.

4 · Recortes (5 min, ~2 créditos cada)

Apenas o que o código não pode desenhar — modelo de prompt, conjunto de exemplo e keying em references/cutouts.md. tools/greenkey keyframes/raw/x.png cutouts/x → PNG(s) alfa, folhas de múltiplos objetos divididas automaticamente. Renderize uma folha de verificação em um fundo colorido e envie-a. Um arquivo de logotipo real → cutouts/logo.png, desenhado com CL.sprite dentro do drawUnder do rasgo; aparência de cintilação = os fundos de estilo logoBand + esse sprite. Para um logotipo de texto, dimensione-o min(190, 0.78·W / largura medida).

5 · Edição em código

comp/scenes.js é o filme: COPY (palavras na tela), funções de cena (pageScene, f1Scene, camScene, kalDraw, deskScene, titleBg, titleScene, endScene), transições (wipe, ripDraw, tearDone), K.setup({bars}) zoom de soco. Palavras fora de COPY: o "PROMPT"/título da interface (CLX.screen o.title), os glifos de pôster da aparência de cintilação 'posters' (collage_fx.js) — verifique-os. API: references/api.md; tempos e pegadinhas do exemplo: references/edit_notes_10s.md. Re-temporize remapeando o tempo, não editando literais: Cut(a, b, (ctx, t) => titleScene(ctx, t + (6.0 - a))). Mantenha deslocamentos múltiplos de 1/12 s. Cenas que desenham um vizinho movem-se como um bloco (kalDraw→deskScene via drawNext, titleBg→deskScene antes de 71/12, endScene→titleScene/titleBg). Em seguida, atualize K.setup({bars}), as deixa da partitura e os tempos de imagem estática. Tempos além da duração fixam ao último quadro. Fonte do título está em 4 lugares: o <link> em comp/index.html (carregue UMA face da família), a lista fonts() em comp/film.js (senão sprites assam com fallback), COPY.titleFont, e o <link> de comp/font_sheet.html para candidatos. Texto cirílico: Ultra, Fraunces, Cinzel, Bevan, Abril Fatface, Shrikhand, Chango, Rye, Lilita One, Bungee, Chewy e Gluten não têm cirílico — use Rubik / Rubik Spray Paint, Unbounded, Yeseva One, Lobster, Playfair Display, Russo One para o título e logoBand o.font, e verifique os chips de resgate. Imagens estáticas: node tools/capture.mjs comp/index.html review/st --stills 0.5,1.75,….

6 · Música

audio/score.html sintetiza a partitura no navegador (sem samples): groove funk + foley de papel (tapas, rasgos, whooshes, estalos, digitação, cliques, sino), limitador. Defina window.SCORE_CONFIG {dur, drop, mid, build, vac, lift, end} em seu primeiro <script> a partir da tabela de batidas e mova as deixa com window.SCORE_CUES = {…}; exclua as linhas em paper() para eventos que o filme não tem (procure CUE.car, CUE.plane, CUE.type, CUE.gen, CUE.subClick, CUE.ding) — anular uma deixa lança um erro. Silencie camadas com ?lv_<name>=0.

node tools/render_audio.mjs "<project>/audio/score.html" audio/score.wav
afconvert -f m4af -d aac -b 256000 audio/score.wav audio/score.m4a
python3 tools/music_window.py audio/score.wav --hits 0.5:0.35,1.0:1.0,6.0:1.0,7.5:0.45,8.5:1.0   # cada grande batida mais alta em sua janela
python3 tools/music_window.py audio/score.wav --timeline 0.25

Faixa própria em vez disso: python3 tools/music_window.py track.mp3 --len <dur> → escolha uma janela → python3 tools/cut_audio.py track.mp3 <inicio> <dur> audio/score.m4a → re-temporize a imagem para suas batidas (grade = BPM da faixa). Você não pode ouvir áudio — verifique por números (references/music_notes_10s.md) e informe.

7 · Rascunho → escolhas → final

tools/render_film.sh draft                       # ~30 s para 10 s → <slug>_draft.mp4 (+ .frames_draft)
tools/strip.sh .frames_draft review/strip.png 1
tools/font_sheet.sh "LINHA1|LINHA2"                # fontes de título numeradas no tratamento real e na paleta do filme
tools/palette_sheet.sh 0.75 3.75 6.9 8.75        # cada paleta de comp/grade.js em quadros-chave (0 = original)
tools/render_film.sh final audio/score.m4a <slug>_final.mp4   # quadros PNG, 30 Mbps

Grave a paleta escolhida com window.PALETTE = '<nome>' em comp/index.html (null = cores originais). grade.js recoloriza cada pixel, fotos e logotipo incluídos: para cores da marca, adicione uma entrada PALS com os hexadecimais da marca nos papéis (vermelho → primário) e verifique se as fotos do produto e o logotipo ainda parecem verdadeiros — ou defina null e edite CL.C / CLX.PAL diretamente.

QA antes de enviar (olhe os quadros você mesmo)

  • Sincronia: eventos de imagem vs picos de --hits / --timeline, ≤ 1 quadro.
  • Em pares: hashes de par de quadros diferem apenas em eventos deliberados de 1 quadro.
  • Junções: sem quadros vazios/saltos; nada estático > ~1 s, exceto seguras de título/logotipo.
  • Nada cobre o objeto herói, o título, o rótulo do botão, a URL (caminhos do cursor!).
  • Tags ≥ 36 px em chips de papel, cada ≥ 0.8 s; título ≥ 1.5 s; logotipo ≥ 1.5 s (≥ 1.0 s para filmes ≤ 8 s).
  • Nenhuma cintilação em tela cheia; cintilação da faixa com passos de brilho em uma direção. Nenhum cartão cinza "recorte ausente" restante.
  • Duração exata (afinfo), áudio presente, pico ≤ −1 dBFS.
  • Apenas uma renderização por vez por projeto (render_film.sh limpa sua pasta de quadros).

Arquivos

necessidadeonde
gramática San Diego medida, planos, paleta, fontesreferences/reference_san_diego.md
API CL / CLXreferences/api.md (+ comentários de cabeçalho de collage.js / collage_fx.js)
prompts de recorte, conjunto de exemplo, keyingreferences/cutouts.md
mapa de deixa da partitura + mediçõesreferen…

[truncado para tradução]

Habilidades Relacionadas