FilmForge Motion
Pinturas permanecem como quadros de filme; sem zooms, sem deriva. O movimento vem de dentro do quadro: partículas, névoa, cintilação, brilho, luz, tudo renderizado na GPU sem custo. Vídeo pago é reservado para o que o código não pode fazer (um voo real, uma transformação que é o clímax do filme). Esta skill preenche o campo motion de cada plano, aplica as correções de QA, exporta a linha do tempo para o renderizador e renderiza a prévia que o diretor aprova.
Caminhos: scripts/, templates/ e config/ abaixo são pastas dentro desta skill (o diretório base mostrado quando ela carrega), colocadas lá por ./install.sh. Trabalhando a partir de um clone do repositório, elas são tools/, templates/ e config/ na raiz.
O renderizador é o painted-film-pipeline (Python e GLSL; módulos nomeados abaixo). Todos os valores de pixel são 4K (3840x2160); o renderizador os escala por K = W / 3840, então uma prévia em 1080p usa os mesmos números.
Passo 1. Ler o plano
Para cada plano: sua batida, o clima e o script de cor da cena, sua duração após reajuste de tempo, a música que o acompanha (frases, batidas em beatmap.json), o que já está na pintura (fogo, mar, céu, vidro). A vida deve pertencer ao mundo da pintura: brasas sobem de um fogo que está pintado ali; neve cai onde o céu está.
Passo 2. Escolher sua vida (o vocabulário)
| Efeito | Parâmetro (campo do plano) | Valores |
|---|---|---|
| Faixa de névoa flutuante | fog + fogc | (força 0..1, y onde começa, y onde está total, velocidade de deriva); cor (r, g, b) 0..1 |
| Varredura de luz sobre realces | sweep | (período s, largura da faixa px, intensidade, 0) |
| Cintilação de fogo ao redor de um ponto | flick + fire | amplitude (0.07 a 0.45); (x, y, raio px) |
| Tremor de calor em uma faixa | shim | (y total, y zero, 0, força) |
| Vibração de câmera | shake | (início s, duração s, amplitude px) |
| Transição de entrada / saída | tin, tout | ("fade" ou "white", segundos); padrão é corte seco |
| Reenquadramento | crop | (x0, y0, x1, y1) em pixels de origem |
| Matiz de partículas | ashc | (r, g, b) |
| Partículas | life | uma receita ou um lambda sobre os sistemas de partículas abaixo |
| Relâmpago | bolts | lista de tempos no plano |
| Rachadura de vidro | crack | (início s, duração s) |
Sistemas de partículas (painted.py): ash(t, n, wind=(vx, vy), size=(min, max), alpha, seed) para cinzas, poeira e neve; flakes(...) para flocos grandes e macios; sparkles(t, n, alpha, size) para brilhos e estrelas; streaks(t, n, speed) para chuva; embers(t, n, src=(x, y), spread, rise, life) para brasas subindo de uma fonte. Receitas do filme real (film_cut.py): SNOW(n, wind), EMB(n, alpha), GLINT, RAIN, STARS(n), GOLD. Significados completos dos parâmetros: reference/pipeline-modules.md; receitas de humor testadas: references/effects-cookbook.md.
Gráficos (graphics.py, overlays.py): fitas de fio dourado que desenham, balançam com a música e estalam (T(points, t0, draw, w)); palavras manuscritas escritas da esquerda para a direita (W(text, t0, x, y, size)); nomes de lugares que se formam a partir do material da própria cena e voam para longe (V(...)); o título final.
Passo 3. Deixe a música conduzir
graphics.Drive mede a partitura por quadro (nível e pulso). Floração, brilho de brasas, brilho do fio e respiração do texto seguem-na, então um golpe faz as brasas brilharem sem um quadro-chave. Coloque transições e tremores nos golpes do beatmap.json (início do shake = tempo do golpe menos o início do plano).
Passo 4. Escrever o campo de movimento
Em shotlist.yaml, por plano (exemplo: um plano de floresta em fogo de Simorgh, e o feixe da Mariposa Lanterna):
motion:
life: EMB(320)
flick: 0.09
fire: [1920, 1300, 2600]
shim: [2160, 300, 0, 0.8]
ashc: [0.62, 0.55, 0.5]
motion:
tin: [white, 0.4]
sweep: [3.0, 520, 0.35, 0]
life: GOLD
shake: [0.0, 0.4, 10]
Um plano que não precisa de nada recebe motion: none (a comporta quer cada plano decidido).
Passo 5. Aplicar as correções de QA
Para cada fix em qa.yaml: execute sua chamada (grade.py recolor ou blue, um patch, um crop no plano), escreva o arquivo _g, meça novamente com ledger.py palette, então defina done: true. A grade combinada (níveis de placa) e a escala 4K são automáticas no renderizador.
Passo 6. Exportar, renderizar, olhar
python3 scripts/shotlist.py export-cut shotlist.yaml --paintings art/film > code/timeline.py
imprime a linha do tempo como linhas P_() para film_cut.py. Então, no renderizador:
W=1920 H=1080 python film_cut.py still out/frames 6.0 12.0 24.0 # stills nos golpes da história
python film_cut.py sheet out/sheet.jpg # um quadro por plano
python film_cut.py video film/preview_1080p.mp4 audio/score.wav # a prévia com a partitura
Assista à prévia com som. Verifique os stills em cada golpe. Então o diretor aprova a etapa de movimento.
Quando pagar por vídeo
Apenas quando o movimento é a história e o código não pode falsificá-lo: voo (lançamento de Simorgh: clipes reais com rampas de velocidade), um nascimento ou transformação no clímax. Custeie em budget.py (Kling 4.0: 16.25 créditos por 5 s em 1080p, mais a pintura do quadro-chave); pinte os quadros-chave primeiro e passe-os pelo QA; rascunhe barato onde o modelo oferece um rascunho e finalize uma tomada. Todo o resto é contado em poses-chave pintadas que estalam (poses: 2), da mesma forma que o anime segura uma pose.
Saída
- campo
motionde cada plano (ounone) code/timeline.pydo export-cut- as correções aplicadas (arquivos
_g,done: trueem qa.yaml) film/preview_1080p.mp4, stills nos golpes, uma folha de um quadro por plano
Lista de verificação da comporta
- Cada plano pintado tem um plano de movimento ou
motion: none - Cada correção de QA aplicada e re-medida
- A prévia assistida com som; stills em cada golpe verificados
- Aprovado
Tabela de reparos
| Sintoma | Correção |
|---|---|
| Parece uma apresentação de slides | Cada pausa precisa de uma camada viva ligada ao seu mundo (partículas, névoa, cintilação); varie-as por cena |
| Efeitos parecem colados | Tingir partículas com ashc da pintura; emissores em fontes pintadas; cor da névoa do céu |
| Quadros movimentados, barulhentos | Menos partículas (metade n), alpha mais baixo; uma família de efeitos por cena |
| Planos de diferentes gerações não cortam juntos | A grade combinada está errada para aquela placa: verifique os níveis; uma grade, granulado e vinheta para todos |
| Efeitos ignoram a música | Golpes não usados: coloque tremores, explosões e transições nos golpes do beatmap |
| Texto difícil de ler | Mova para a área tranquila da pintura (text_area), aumente o tamanho, desacelere a escrita |
Referências
references/pipeline-modules.md: os módulos do renderizador e todos os parâmetrosreferences/effects-cookbook.md: receitas testadas por humor, de um filme finalizado