Motion video
Cria um spot de motion graphics de 10 a 30 segundos como código real: um sintetizador Swift compõe a partitura, um renderizador Swift CoreGraphics/CoreImage desenha cada quadro na mesma grade de batidas (com motion blur de sub-quadro, desfoque gaussiano real, vidro fosco, granulação de filme) e AVFoundation codifica H.264 + AAC. Tudo o que é necessário está nesta pasta de skill; macOS + ferramentas de linha de comando do Xcode são as únicas dependências.
O padrão é “um showreel de designer de motion”, não uma demonstração: cada sinalização cai na música, nada na tela é ruído decorativo, e cada afirmação é verdadeira.
Mapa da pasta
engine/—audio_core.swift+audio_main.swift(motor de partitura),video_core.swift+video_main.swift(motor de renderização). Não edite por projeto; o código do projeto vai na pasta do projeto.scripts/mv.sh— construir + executar:audio,stills <beats>,video [out].levels.py,sheet.py,probe.swiftsão usados por ele.- O projeto completo trabalhado está na skill complementar
app-3d-video(template/:score.swift,scenes.swift,project.env, mais a camada SceneKits3d.swift). Para um vídeo apenas 2D, copie seuproject.envescore.swifte escreva um novoscenes.swiftcom base emreferences/engine-api.md. examples/scores/energetic-128bpm.swift— partitura de lançamento de alta energia (drops, fills, drop-out).references/motion-direction.md— ritmo por tom, easing, transições, layout, padrões de storytelling, lista de verificação de revisão. Leia antes de planejar cenas.references/score-guide.md— receitas de tempo/tom/arranjo, combinando com o tom da marca, metas de volume. Leia antes de escrever a partitura.references/engine-api.md— cada função de desenho/áudio com sua assinatura. Leia ao escrever código.
Fluxo de trabalho
1. Briefing (mantenha perguntas que mudam o resultado)
Defina: propósito e público, duração, proporção (padrão 1080×1920 vertical; 1920×1080 ou 1080×1350 via W/H), tom, idioma do texto na tela. Padrões se o usuário não se importar: 15 s, vertical, texto em inglês, tom combinado com o domínio do produto. Se o conteúdo solicitado não couber na duração com um ritmo adequado ao tom, diga isso e pergunte qual sacrificar — duração ou conteúdo — em vez de apertar. (Um aplicativo de saúde queria ritmo calmo e 15 s; a resposta foi cortar cenas, não acelerar.)
2. Pesquise o que é verdade
Tudo na tela deve ser defensável:
- O que foi lançado:
git logdesde os últimos incrementos de versão, CHANGELOG, notas de versão. - Texto exato do produto: leia o código para títulos/corpos de notificações, rótulos de botões, strings de diálogo do Siri/intent, cabeçalhos de snippets, texto de onboarding. Cite-o; não o parafraseie em uma promessa.
- Marque qualquer coisa ilustrativa (nomes de amostra, contagens, horários) e informe ao usuário na entrega.
- Mantenha a história internamente consistente: se a cena 1 registra Metformin às 9:41, a cena 2 não pode perguntar quando Metformin foi tomado pela última vez e ouvir “13 horas atrás” — use outro medicamento.
3. Assets
Colete assets reais da marca: ícone do aplicativo (maior PNG), logotipo, cores da marca (tokens de design/catálogo de assets), selos oficiais que o produto já usa (ex.: “Funciona com Apple Health”), e sons do próprio produto (WAVs de notificação/logotipo sonoro). Converta one-shots para o sintetizador: afconvert -f WAVE -d LEF32@48000 -c 1 in.wav assets/name.wav; SVG → PNG com sharp/resvg se o repositório os tiver, ou qlmanage -t -s 1024.
Prefira UI vetorial recriada com um conjunto de dados (um papel de parede, um horário de relógio, um conjunto de nomes) em vez de capturas de tela brutas. Capturas de tela de fontes diferentes (horários, dispositivos, dados, quadros diferentes) lado a lado parecem erradas; os espectadores percebem imediatamente. Se você usar capturas de tela, capture-as em uma sessão com xcrun simctl status_bar booted override --time 9:41 …, limpe depois e nunca capture outro aplicativo que esteja aberto.
4. Planeje na grade de batidas
Duração = barras × 4 × 60 / BPM, então escolha BPM e número de barras juntos (15 s = 6 barras @ 96, 8 barras @ 128).
Escreva plan.md no projeto: uma tabela de barras → cena → a sinalização em cada batida (revelação de palavras, cartão pousa, check aparece, transição). Uma ideia por barra; os grandes momentos (logotipo, recurso principal, cartão final) ficam nos tempos fortes. Veja references/motion-direction.md para predefinições de tom e padrões.
5. Pasta do projeto
Trabalhe em ~/Movies/MotionVideo/<slug>/ (persiste para revisões posteriores):
mkdir -p ~/Movies/MotionVideo/<slug> && cp ~/.claude/skills/app-3d-video/template/{project.env,score.swift} ~/Movies/MotionVideo/<slug>/
Edite project.env (BPM, DURATION, W, H, FPS), coloque assets da marca em assets/, então reescreva score.swift e escreva scenes.swift. Reatribua as variáveis da paleta (INK, TEAL, MINT, GREEN, GLOW, PAPER, DARKTEXT, ORANGE, DARK_MID, LIGHT_GLOW_A/B) no topo de scenes.swift para a marca.
6. Partitura primeiro
Escreva score.swift (receitas em references/score-guide.md), então execute mv.sh <dir> audio. Você não pode ouvi-lo — leia a impressão dos níveis: RMS na faixa alvo para o tom, sem clipping, contraste de seção onde você pretendia (introdução silenciosa, elevação no drop, um mergulho para qualquer drop-out). O vídeo lê music.wav para elementos áudio-reativos, então renderize o áudio antes dos stills.
7. Cenas, então revisão de stills — pelo menos duas rodadas
Escreva scenes.swift definindo func render(_ t: Double, frame: Int), então:
~/.claude/skills/motion-video/scripts/mv.sh <dir> stills 0.5,2,4.25,6,8.5,10,13,16,20,22.5
Abra <dir>/sheet.png com Leia e percorra a lista de verificação em references/motion-direction.md (sobreposições no overshoot da mola, descendentes cortados, texto muito pequeno, crossfades confusos, UI inconsistente, espaço morto). Também pegue batidas de meio de transição, não apenas estados de repouso. Corrija e refaça até que uma rodada volte limpa. Stills renderizam a ~0.1 s/quadro, então itere livremente.
8. Renderização final e verificação
mv.sh <dir> video <dir>/out.mp4 — cerca de 0.3–0.5 s/quadro com motion blur SUB=5 (15 s @ 60 fps ≈ 5–8 min), então execute em segundo plano. O probe imprime duração e trilhas; também extraia alguns quadros (.build/probe out.mp4 <dir> 2,5,9,12) e olhe para eles.
9. Entrega
Copie para ~/Downloads/<Product>_<Topic>_<duration>s[_vN].mp4, envie com SendUserFile e relate: a história batida por batida (segundos), quais assets e strings são reais, o que é ilustrativo, que você julgou o áudio apenas por medição, e uma pequena lista de verificação para o usuário (ouvir no volume, legibilidade em um telefone, uso da marca/selo). Mantenha versões anteriores (v1/) ao revisar.
Revisando
A maioria dos feedbacks corresponde a um botão: mais lento/calmo → BPM mais baixo + menos cenas + molas amortecidas (k≈5, w≈6) + revelações mais longas (0,9–1 batida) + transições de rack-focus/íris em vez de chicotes; mais energia → a partitura energética, molas com overshoot, chicotes, flashes nos drops; "Não entendo o recurso X" → mostre a causa e efeito completos em um dispositivo (solicitação → resposta → resultado) com o texto de resposta real do produto, e intitule com o valor, não com o nome do recurso.