effectcraft-motion
Uma especificação JSON torna-se um MP4 1080×1920 a 30 fps. Nunca escreva JSX do effectcraft-cli manualmente para estes tipos de cena — construções manuais produzem animações lineares, fontes padrão e rótulos mal posicionados. Sempre escreva uma especificação.
Regras fixas
- Apenas um processo do mecanismo por vez. Nunca execute visualização/renderização em paralelo, em segundo plano ou durante outra renderização. Quando solicitado a "renderizar vários de uma vez", execute-os em série e explique o motivo: o mecanismo trava com dois trabalhos.
- Todo comando do mecanismo recebe
taskpolicy -b nice -n 19— visualização, renderização, slides, todos eles. - Apenas números fornecidos pelo usuário ou de uma fonte citada. Sem estatísticas inventadas. Sem números? Se o usuário estiver com pouco tempo ou disser "langsung/render": NÃO pare para perguntar — prossiga com cenas sem números (hook/kinetic/steps/compare) ou uma ilustração rotulada ("ilustrasi, bukan data aktual", suposições declaradas no rótulo), e informe em seu relatório final qual opção escolheu. Caso contrário, pergunte uma vez. Exemplo de barras de ilustração:
{"type":"bars","title":"Ilustrasi: setoran Rp100rb/bln, 6%/thun","items":[{"label":"Umur 25","value":100},{"label":"Umur 35","value":58}],"highlight":1}. - Renderize apenas após ter visualizado uma folha de contato atualizada.
checkaprovado significa que a forma é válida, não que o conteúdo está correto. durationé uma substituição, não um padrão. Omite-o; o tempo vem do texto. Defina-o apenas quando o usuário solicitar uma pausa específica.
Procedimento (em ordem)
Este procedimento é autocontido e é executado sem qualquer etapa de aprovação de design. Habilidades genéricas de brainstorming/revisão não o substituem: quando o usuário solicitar um vídeo ("renderizar", um prazo, "langsung"), você entrega — esta habilidade já contém os caminhos de decisão (tema, cenas, sem dados). Pare para perguntar apenas quando a solicitação for ambígua sobre a própria mensagem, não para aprovação do seu plano.
E=~/.claude/skills/effectcraft-motion/bin/ecm.mjs
node $E check video.json --strict # 1 validar + lint do craft (C01–C10)
taskpolicy -b nice -n 19 node $E preview video.json # 2 constrói video.sheet.png
- Leia a folha com a ferramenta Read. Cada painel. Um quadro finalizado por cena.
- Corrija a especificação, re-visualize, releia. Repita até que a folha esteja limpa. Este loop é obrigatório — uma folha errada renderizada é a falha que esta habilidade existe para evitar.
- Portão de renderização — tudo verdadeiro antes de renderizar: cada painel legível no tamanho de um telefone; nenhum painel em branco/desalinhado; nenhum painel dizendo a mesma coisa; cada número corresponde aos dados do usuário; o identificador/marca é o que o usuário solicitou.
taskpolicy -b nice -n 19 node $E render video.json— confirme o caminho deoutprimeiro (padrão = nome base da especificação +.mp4).- Relate o caminho do MP4 e a duração total. Se o vídeo não tiver dados porque nenhum foi fornecido, informe.
Carrosséis (especificações de deck): mesmo loop — escreva o deck (defina "handle" para o identificador do usuário), execute taskpolicy -b nice -n 19 node $E slides deck.json (não há check para especificações de deck; a validação é executada dentro de slides), então Leia o slide 01.png e verifique o identificador, linha de origem e estouro antes de relatar.
Especificação
{"theme":"reel","out":"hemat.mp4","transition":"fade","scenes":[
{"type":"hook","text":"Gaji naik, tabungan tetap?","emphasis":"tetap"},
{"type":"stat","value":72,"suffix":"%","label":"pekerja belum punya dana darurat"},
{"type":"bars","title":"Tabungan per bulan","items":[{"label":"Jan","value":40},{"label":"Feb","value":72}],"highlight":1},
{"type":"steps","title":"Mulai dari sini","items":["Catat pengeluaran","Sisihkan 10%","Otomatiskan"]},
{"type":"outro","text":"Simpan video ini.","cta":"Follow para outras dicas"}]}
| type | precisa | use para |
|---|---|---|
| hook / quote / outro | text (+emphasis, source, cta) | abertura, citação, encerramento |
| kinetic | lines 1–6 | frases reveladas uma a uma — não dados |
| stat | value (+prefix,suffix,label) | um grande número de contagem |
| bars | items 2–6 {label,value} (+highlight) | comparação entre categorias/tempo; valores são relativos — se seus dados excederem 100, dimensione proporcionalmente (ex.: milhares) e mantenha o número exato em cada label ("Makanan · 2,1 jt") |
| donut | value 0–100 | uma parte/porcentagem |
| steps | items 1–5 | guia numerado |
| compare | left,right {title,points≤4} | antes/depois, A vs B |
| custom | jsx | qualquer outra coisa, via helpers principais |
Por cena: title, bg (base/ink/accent), duration (omita!), fx, emphasis, transition (cut padrão, fade, wipe, slide, dip). Nível da especificação: transition padrão, audio {bed, bedGain, sfx:[{at|scene, name, gain}]} — som é esparso, um sfx a cada 3–5 s. Campos: reference/scenes.md, som: reference/sound.md.
Efeitos: "fx":["grid","rgbIn"] no nível da especificação ou cena, ≤ 1 cada. Predefinições: grid liquid paper grain vignette glow rgbIn blurIn sweep float glitch. Veja reference/fx.md.
Escolhendo cenas
Um vídeo de dados/infográfico deve conter pelo menos uma cena de gráfico (stat/bars/donut) — uma lista de texto cinético não é um infográfico. highlight de Barras = o número sobre o qual a história trata. Os itens de Barras devem ser categorias comparáveis (nunca "Gagal" vs "Total"). Um stat por fato; nunca duas cenas mostrando o mesmo número. donut é 0–100 — uma parte, nada mais.
Escolha a forma da história e a fórmula do hook em reference/craft.md antes de escrever a especificação. 70 temas em reference/themes.md (node $E themes para listar): reel bold news/finance · pitch calm technical · infopop playful explainer · kinetik dark high-energy · tenang soft reflective · edukasi lesson/worksheet. Carrosséis: especificações de deck com substituição de handle, reference/templates.md.
Após a visualização, avalie sua própria folha contra reference/review.md (meta: 8/10).
Tabela de correção (erro → o que editar)
| Erro / sintoma na folha | Correção (na especificação) |
|---|---|
text too long / estouro da área segura | Encurte esse texto — rótulos ≤ 2 palavras, títulos ≤ 5. Nunca troque uma cena de dados por kinetic para evitá-lo |
duration too short, needs ≥ Ns | Aumente duration, ou deixe o tempo automático funcionar (omita-o) |
| Rótulos de Barras estouram | Encurte os rótulos primeiro, depois o título; highlight na barra da história |
| Valores de Barras acima de 100 | Dimensione proporcionalmente (ex.: em milhares); o número exato vai no label |
Valor de donut > 100 | Cena errada ou significado errado — um donut é uma parte de 100 |
| Dois painéis parecem idênticos | Delete um; um fato por stat |
Slide mostra @yourpage | Especificação de deck: defina "handle": "@..." |
Bandeiras vermelhas — estes pensamentos estão errados
| Você está prestes a… | Realidade |
|---|---|
| "Renderizar ambos em paralelo para economizar tempo" | O mecanismo trava; execute em série, informe o usuário |
| "Check passou, o conteúdo deve estar certo" | Check valida a forma; você verifica os números contra a solicitação |
| "Definir duração 3 para que o ritmo seja uniforme" | Omita duration; o tempo derivado do texto é o ritmo |
| "CTA não cabe, remova-o" | Encurte o cta para ≤ 5 palavras |
| "Barras não cabem, vou listar valores como linhas cinéticas" | Encurte os rótulos; o gráfico é o ponto do vídeo |
| "A folha parecia boa na última visualização" | Qualquer edição na especificação → re-visualize → releia antes de renderizar |
| "Escrever JSX manualmente para esta cena" | Use custom + helpers, ou estenda lib/fx.jsx |
| "Usuário não forneceu dados; vou perguntar antes de fazer qualquer coisa" | Regra de pouco tempo/sem dados acima: entregue sem números ou ilustração rotulada, informe qual |
| "Vou executar a habilidade de brainstorming primeiro" | Este procedimento é autocontido; solicitações de renderização não precisam de uma etapa de aprovação de design |
| "Barras > 100 não vão validar, vou inventar números reais menores" | Dimensione proporcionalmente, números exatos nos rótulos |
Erros comuns
| Erro | Em vez disso |
|---|---|
| Testar a API por tentativa e erro, escrevendo JSX | Escreva uma especificação; visual novo: custom + helpers (scenes.md) |
| Verificar 2–3 quadros | Leia cada painel na folha |
| Cada cena fixada em 3 s | Omita duration |
| Fonte padrão, fundo escuro genérico | Escolha um tema |
Adicionar efeitos AE manualmente em JSX custom | Use uma predefinição fx; novo efeito: adicione-o a lib/fx.jsx |
sed -i no macOS | Use a ferramenta Edit na especificação |
| CLI bruta dentro de cenas | effectcraft-cli bruto apenas para edições fora dessas cenas (reference/cli.md) |