Communitygithub.com

site-motion

Crie ativos animados para sites — ilustrações de herói e recursos, micro-histórias de UI de produto, cenas isométricas e 2.5D, objetos 3D de produto/marca (Three.js, modelos glTF, logotipos extrudados), composições de janelas de aplicativo, visuais generativos e físicos — em SVG, Canvas, CSS 3D ou WebGL, temáticos apenas a partir dos tokens de um sistema de design, e exporte cada um como um arquivo HTML incorporável ao vivo, além de MP4, WebM, WebP animado, GIF, PNG de pôster e cortes sociais 9:16 com quadros exatos.

O que é site-motion?

site-motion é um sistema de cena animada puro, baseado em funções de tempo, para gerar ativos visuais para sites, como heróis animados, ilustrações de recursos, demonstrações de UI de produto e cenas 3D. Ele é projetado para funcionar com tokens de sistema de design, garantindo que todas as cores e tipografia sejam derivadas de uma única fonte de verdade, como variáveis CSS ou um arquivo `tokens.json`. As cenas são renderizadas em SVG, Canvas, CSS 3D ou WebGL e podem ser exportadas como arquivos HTML incorporáveis, MP4, WebM, WebP animado, GIF, PNG de pôster e cortes sociais 9:16. O repositório contém dezenas de cenas pré-construídas para histórias comuns de produto, como 'card-story' para fluxos de trabalho, 'iso-blocks' para infraestrutura e 'window-stack' para integrações de ferramentas. O fluxo de trabalho permite planejar um site inteiro mapeando seções para cenas, gerar um plano visual para aprovação e, em seguida, aplicar e personalizar cada cena com conteúdo e tokens específicos do projeto. Ele depende de Node 22+, Chrome e ffmpeg, e não requer instalações npm.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Shivraj97/site-motion/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

O que site-motion faz?

Cenas marcadas como Pro, ou nomeadas nestas notas mas ausentes de scenes/, são cenas Pro do site-motion. Aprenda com o que as notas dizem sobre elas; construa a partir das cenas que estão aqui (site-motion list).

Uma cena é uma função pura do tempo. render(t) desenha o mesmo quadro para o mesmo t, independentemente do que veio antes. Essa única regra é o motivo pelo qual o mesmo arquivo pode ser executado ao vivo em um site e renderizar quadros exatos para vídeo: o exportador apenas avança para cada quadro no tempo e tira uma captura de tela.

Raiz do repositório: a pasta que contém este arquivo (instale-o com git clone https://github.com/Shivraj97/site-motion ~/.claude/skills/site-motion, ou vincule um clone lá). Node 22+, Chrome, ffmpeg. Sem instalações npm. A partir de qualquer projeto, execute a CLI pelo seu caminho completo; as builds e renderizações vão para a pasta out/ desse projeto, e --tokens / --content usam caminhos relativos a ele:

SM=~/.claude/skills/site-motion/bin/site-motion.mjs
node $SM init card-story --tokens ledger          # escreve ./brand.json (a partir do preset) e ./card-story.json para editar
node $SM make card-story --tokens ./brand.json --content ./card-story.json --out public/motion/story.html

Para colocar uma cena no código-fonte do próprio projeto para que a equipe possa editá-la, use add em vez de make. Ele copia scene.js, scene.css, content.json e tokens.json para public/motion/<scene>/ (ou motion/<scene>/ quando não há public/), o player e as bibliotecas de fornecedores para runtime/, e escreve <scene>.html, um arquivo incorporável único. A pasta copiada é uma cena válida para build, render e make:

node $SM add ledger-stamp --tokens ./brand.json --content ./ledger.json          # → public/motion/ledger-stamp/ + ledger-stamp.html
node $SM make public/motion/ledger-stamp --tokens public/motion/ledger-stamp/tokens.json --formats png,sheet

Dentro do próprio repositório, a forma abreviada funciona:

node bin/site-motion.mjs list                                   # cenas e presets de tokens
node bin/site-motion.mjs make iso-blocks --tokens mint          # construir + renderizar mp4, webp, poster
node bin/site-motion.mjs make card-story --tokens ./brand.json --content ./my-story.json --formats mp4,webm,webp,gif,png,sheet
node bin/site-motion.mjs build window-stack --tokens night --out public/hero.html   # apenas incorporação ao vivo
node bin/site-motion.mjs render out/hero.html --formats mp4 --scale 2 --range loop        # exportar uma build existente

Os resultados vão para out/<content>-<tokens>/. --range loop exporta apenas o loop contínuo (o padrão para GIF e WebP); full é a introdução mais um loop (o padrão para MP4 e WebM). sheet escreve uma folha de contato 4×3: sempre faça uma e leia-a.

Fluxo de trabalho

Um site inteiro (várias seções ou páginas) começa com um plano, não com uma cena. Execute node $SM plan no projeto:

  • com --brief brief.md quando você conhece as seções. Esta é a melhor entrada. Escreva o resumo a partir do texto real do site:
    # Acme: o que o produto faz, em uma linha
    ## home
    - hero: a manchete do herói
    - feature: o título de cada seção de recurso e uma linha abaixo dele
    ## pricing
    - hero: …
    
  • ou com --url https://site-deles.com[,https://site-deles.com/precos] para ler os títulos das próprias páginas ao vivo;
  • ou com --pages home,recursos,precos --about "…" quando não há mais nada (escolhas genéricas; diga isso).

Ele mapeia cada seção para uma cena, cada uma usada uma vez, todas com a mesma aparência. A aparência é a do herói da home, bloqueada em site-motion.json. Ele gera site-motion-plan.png: cada seção como o quadro de sua cena na marca e na aparência, com o veredito da pontuação no topo. Mostre ao usuário a folha e obtenha aprovação antes de plan apply.

  • Uma escolha marcada com ? não teve uma correspondência forte. Leia sua nota ("ledger-stamp se encaixa melhor, mas está em home.hero") e troque (plan swap <slot> <scene>), reutilize a cena melhor ou diga ao usuário que a biblioteca não tem uma cena para aquela história ainda.
  • Nunca aplique sobre uma escolha fraca sem avisar.

plan apply adiciona cada cena e imprime a incorporação de cada seção. Em seguida, escreva o texto de cada cena em seu content.json, execute sync e termine com score --project.

Para uma cena, siga os passos abaixo.

  1. Obtenha o sistema de design primeiro. Os tokens são a única fonte de cor e tipo. Encontre-os nesta ordem: o arquivo de tokens/tema do projeto (variáveis CSS, configuração do Tailwind, tokens.json), depois o site ao vivo (meça estilos computados), depois pergunte. Escreva-os como tokens/<brand>.json (formato abaixo). Nunca invente uma cor depois que a paleta existir; derive tons com h.mix(a, b, p) a partir dos tokens.
  2. Escolha o arquétipo que conta a história do produto, ou escreva uma nova cena:
    CenaHistória que contaRenderizador
    iso-blocksinfraestrutura, plataformas, "muitas partes funcionando": blocos com dados ao vivo em suas faces sobre um piso de azulejosSVG
    card-storyum fluxo de trabalho que remove trabalho: uma lista de recursos orienta um cartão de produto através de estadosDOM
    window-stack"funciona onde você trabalha": janelas de aplicativo sobre um fundo Canvas pintado, um agente executando etapasCanvas + DOM
    live-room Promultijogador: cursores nomeados sobre uma janela de aplicativo, uma proposta, uma votação que é aprovada, uma mudança sendo enviada, um ticker de atividadeCanvas + DOM
    leaderboardcrédito e posição: contribuições caem em linhas, pontos são contados, linhas reordenamDOM
    bloom-flowautomação: um evento percorre um gráfico de fluxo de trabalho e cada etapa floresce em flores generativasCanvas + SVG
    signal-fieldbagunçado → estruturado: fios ruidosos passam por um portão e saem como pistas limpasp5.js
    drop-pilemuitos → um: itens de trabalho caem em uma única bandeja com física real, um contador os totalizaMatter.js (pré-renderizado)
    galton-routerroteamento, aprovações, A/B: pagamentos caem através de um quadro de pinos; uma regra aciona um interruptor e o fluxo se move para as melhores caixasSVG (passeio aleatório com semente)
    receipt-printerbagunçado → estruturado: documentos alimentam uma fenda, um recibo imprime cada campo extraído com sua confiançaDOM + SVG
    score-sheetorquestração, multiagente: uma execução escrita como uma partitura musical, pautas vibram enquanto cada agente trabalhaSVG
    css3d-stackarquitetura, camadas: caixas HTML reais em CSS 3D se levantam enquanto uma solicitação cai através delasCSS 3D
    loommuitos → um, integrações: cada ferramenta é uma faixa de fios de urdidura tecidos em um único tecido diagonal que rola para o eixo do produtoCanvas 2D
    domino-runautomação, gatilhos: uma bola derruba uma corrente de dominós agrupados em etapas, cada etapa acende quando a onda a atingeMatter.js (pré-renderizado)
    weather-boardconfiabilidade, failover: uma tempestade (nuvens shader, chuva, relâmpagos) se forma sobre uma região de um mapa de status, o tráfego é redirecionado, ela limpa com 0 solicitações com falhaShader WebGL + DOM
    ledger-stampaprovações, conformidade, confiança: pagamentos andam em uma esteira indexada passando por um scanner de política, uma prensa de carimbo APROVADO e uma prensa de assinar e selar em uma trilha de auditoria; um acima do limite é carimbado como RETIDO e espera por um segundo aprovadorSVG + DOM
    grain-tallymétricas, escala: milhares de grãos (cada um um lote fixo de eventos reais) respiram como um anel de poeira, despejam nos dígitos do total, então se ordenam em uma barra por fonte com sua contagem exata; o número é construído a partir de seus dados, não contadoCanvas 2D (partículas, t puro)
    lens-of-orderbagunçado → estruturado, classificação, IA que vê: um campo de 1 bit com pontilhado de blobs à deriva (ainda não compreendidos); uma lente de aumento preenche cada blob em sua cor de classe, o contorna e o rotula com uma confiança, deixando um rastro de cor desbotadaCanvas 2D (campo por célula, pontilhado Bayer)
    water-slide-funnelfunil de conversão: pilotos deslizam uma rampa por estágio; a piscina de cada beira pega as desistências daquele estágioSVG
    gold-pan Propesquisa enquanto digita: cada tecla gira a bateia até que três pepitas com preço permaneçamCanvas 2D
    museum-heatmap Proanálise de produto: pegadas de visitantes aquecem o chão ao redor dos recursos onde as pessoas param; o ranking vem do calorCanvas 2D
    cell-divisionramificação de banco de dados: principal se divide em branches, uma é descartada, uma mescla de volta com sua mudançaCanvas 2D (metaballs)
    scratch-off Proprevisão: a folha de metal raspa para revelar o horário de partida real antes do painel da companhia aérea alcançarCanvas 2D
    sieve-tray Prodetecção precoce: marcadores caem através de uma malha fina; os poucos que ficam presos são levantados e sinalizadosMatter.js (pré-renderizado)
    rube-goldberg Proantes / depois: uma bolinha de recibo trava em cinco engenhocas antigas, então cai por uma rampa em um segundoSVG
    language-balloons Prolocalização: bolhas de palavras em oito escritas flutuam e montam a frase de cada localidade, RTL incluídoMatter.js (pré-renderizado)
    balloon-deploy Prodeploys: cada etapa de build infla o envelope; a 100% o release decolaSVG
    pufferfish Proescalonamento automático: um peixe-balão incha para corresponder a cada onda de tráfego enquanto um peixe de capacidade fixa é sacudidoSVG
    gear-tiers Propreços: planos desenhados como kit de acampamento, de tenda a acampamento base, com um alternador mensal / anualSVG
    permission-chessboard Profunções e permissões: cada peça de função pousa no tabuleiro e acende apenas os quadrados que pode usarSVG
    tree-ringsano em revista: um anel por ano, tão largo quanto o ano foi movimentado, com entalhes para as primeiras vezesSVG
    parchment-changelogchangelog: um pergaminho desenrola um release de cada vez, cada um tinta quando é lançadoSVG + DOM
    moving-boxesmigração: um carrinho de mão carrega cada caixa da ferramenta antiga para o novo prédio, nada perdidoSVG + DOM
    privacy-pebbles Proredação de PII: um rodo transforma cada detalhe pessoal em um seixo idêntico; a frase ainda é legívelSVG + DOM
    ant-trail Procategorização automática: formigas carregam o recibo, memorando e aprovação de cada swype para o slot de razão corretoCanvas 2D
    sunrise-payroll Profolha de pagamento global: um nascer do sol cruza oito fusos horários e paga cada cidade às suas 9h locaisSVG
    whiteout Procalma: um painel movimentado se dissolve em névoa, deixando o único número que importaShader WebGL + DOM
    ink-flood Protheming, white-label: um chip de tinta inunda todo o produto em um novo esquema de coresSVG
    integration-deck Prointegrações: cada ferramenta é uma tecla em um teclado isométrico grande; um fluxo de trabalho toca como um acorde enquanto um log de execução digita cada etapaThree.js
    margin-rails Proproveniência: um memorando se escreve enquanto passagens transportadas de arquivos passados deslizam em trilhos nomeando sua fonteSVG + DOM
    pigeonhole-wallmemória: documentos arquivam em escaninhos etiquetados, e uma solicitação puxa as três fontes de que precisaSVG + DOM
    redline-front Prorevisão de contrato: uma frente de revisão varre o documento e o devolve como um redline finalizado com autoridades verificadasSVG + DOM
    step-railcomo funciona, integração: um token viaja por etapas numeradas; cada cartão abre no que sua etapa produziu e o último pousa o resultadoSVG + DOM
    pipeline-boardfluxos de trabalho, pipeline: cartões avançam coluna por coluna em um quadro kanban enquanto contagens e totais os seguemDOM
    account-healthretenção, sucesso do cliente: uma tabela de saúde reproduz o mês; uma conta escorrega para em risco, um playbook dispara e ela se recuperaSVG
    split-wipeantes / depois, consolidação: um divisor varre o trabalho manual disperso e cada fragmento se encaixa em uma superfície de produtoDOM
    roadmap-railroadmap, marcos: um marcador de Hoje caminha pelo eixo do tempo; marcos enviados são preenchidos e o lançamento-chave se abre em um cartãoSVG
    trust-ringssegurança, conformidade: solicitações passam por anéis de controle concêntricos ao redor dos dados; a não autorizada é parada e registradaSVG
    balance-scalepreços, qualidade vs custo: três balanças de prato, cada inclinação computada a partir das pontuações; a nossa inclina para a qualidadeSVG
    crate-discrepancyreconciliação: bandejas levantam de uma caixa e conferem o romaneio; a que está faltando flutua com sua notaSVG + DOM
    press-qateste, CI: builds saem de uma prensa; um braço joga aquele com um teste com falha por uma rampa e ele passa na reexecuçãoSVG
    radar-sweepobservabilidade: cada trabalho em execução é um ponto em um escopo de radar; um cursor alcança e pausa o que está falhandoCanvas 2D + DOM
    agent-checkoutdemonstração de UI de produto, pagamentos de agente: uma solicitação de compra, um cartão virtual mascarado é preenchido automaticamente, o medidor de limite se move pelo valor, o recibo se junta à listaDOM + ui-kit
    click-to-donedemonstração de UI de produto, qualquer recurso de uma ação (convidar, enviar, aprovar, publicar): uma tela real em um quadro de navegador, o cursor digita, seleciona e clica, a câmera se aproxima e se afasta no resultadoDOM + ui-kit
    dashboard-pushdemonstração de UI de produto, análise e relatórios: o valor principal é construído a partir do gráfico enquanto ele desenha, o cursor varre uma dica de ferramenta, a câmera foca no momento que importa, um interruptor de intervalo transforma cada sérieDOM + SVG + ui-kit
    phone-stackdemonstração de UI de produto, celular e notificações: alertas pousam em uma tela de bloqueio com um anel de sinal cada, um toque abre o mais novo na tela do app, um swipe home limpaDOM + ui-kit
    shot-demodemonstração de UI de produto a partir de uma captura de tela: a própria captura de tela do cliente em um quadro; o cursor digita em seus campos reais e clica em seu botão real, os valores mudam na cara da marca, um holofote e um balão de chamada pousam no resultadoDOM + captura de tela + ui-kit
    integration-deck é o padrão 3D: um objeto tátil, uma ação física, bandas planas toon, um contorno a tinta, uma câmera isométrica verdadeira e rótulos no tipo da marca. As outras cenas de objeto Three.js (um hub de órbita, uma parede de classificação, um logotipo extrudado, uma vitrine glTF) ficam fora do conjunto público até serem retrabalhadas; as ferramentas 3D (vendor/three-full.min.js, ve

…

[truncado para tradução]

Habilidades Relacionadas