Communitygithub.com

huypham85/motion-video

Produza um vídeo profissional de motion graphics (MP4 com trilha musical original sintetizada e cortes sincronizados com a batida) inteiramente neste Mac — sem ffmpeg, sem imagens de arquivo, sem downloads.

O que é motion-video?

Esta skill permite criar vídeos promocionais animados no estilo de trailers de aplicativos, anúncios para redes sociais ou notas de versão, tudo gerado por código Swift nativo no macOS. Ela combina um motor de áudio que compõe música original com um motor de renderização que desenha cada quadro usando CoreGraphics, CoreImage e AVFoundation, resultando em um MP4 com motion blur, vidro fosco, ruído de filme e cortes precisos no ritmo da música. O fluxo de trabalho inclui planejamento em grade de batidas, coleta de assets reais (ícone, logo, cores da marca), criação de partitura musical e cenas, revisão de stills e renderização final. É ideal para transformar pedidos como "faça um vídeo promocional” ou “crie um clip de atualização” em um produto final de alta qualidade, com suporte a revisões iterativas para ajustar ritmo, tom e duração. A skill opera localmente, sem dependências externas além de macOS e ferramentas de linha de comando do Xcode.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/huypham85/app-3d-video-skill/tree/HEAD/motion-video

Perguntar na sua IA favorita

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

Documentação

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.swift sã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 SceneKit s3d.swift). Para um vídeo apenas 2D, copie seu project.env e score.swift e escreva um novo scenes.swift com base em references/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 log desde 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.

Habilidades Relacionadas