MÓDULO 3.2

🖱️ 3d-animation-creator

Pega um vídeo (deconstrução de produto, antes/depois, animação 3D) e constrói um site production-quality com scroll-driven animation à la Apple — o vídeo toca para frente e para trás conforme o usuário rola a página.

6
Tópicos
~30
Minutos
Avançado
Nível
Vídeo
Categoria
🎬 VIDEO produto.mp4 FFmpeg extrai frames frame_001.jpg frame_002.jpg… Canvas drawFrame() devicePixelRatio cover-fit SCROLL ① INPUT ② EXTRACT ③ RENDER scroll progress → frame index → canvas draw
1

🧩 O que é / o que faz

Conceito Principal

O 3d-animation-creator é um skill que pega um arquivo de vídeo (ex.: deconstrução/montagem de produto, transformação antes/depois) e constrói um site production-quality com scroll-driven animation. O vídeo toca para frente e para trás conforme o usuário rola — recriando o efeito "scroll-stop" popularizado pela Apple nos lançamentos do iPhone.

O que entrega

  • Site HTML/CSS/JS completo, zero dependências pesadas
  • Canvas com renderização frame-a-frame sincronizada ao scroll
  • Starscape animado como background (canvas fixo ~180 estrelas)
  • Cards de anotação com snap-stop (efeito "boom boom boom")
  • Seção specs com count-up animado via IntersectionObserver
  • Navbar que se transforma em pill com glass-morphism ao rolar
  • Loader de pré-carregamento dos frames antes de exibir
  • Responsividade mobile (layout diferente, mesmo vídeo)

O que NÃO faz

  • Não usa players de vídeo (`<video>`) — todo controle é via canvas
  • Não processa o vídeo em runtime — precisa extrair frames com FFmpeg antes
  • Não gera o vídeo — só consome frames já extraídos
  • Não serve os arquivos — precisa de servidor local (não funciona via file://)
Canvas API
drawImage() com cover-fit
FFmpeg
extração de frames JPEG
Scroll-Stop
efeito Apple-style
Vanilla JS
zero frameworks pesados
2

🎣 Quando dispara

Regra: o Claude aciona este skill quando detecta intenção de criar um site com vídeo controlado pelo scroll — ou quando o usuário menciona qualquer dos gatilhos abaixo. A detecção é por texto, não por arquivo anexado.

Gatilhos que ativam o skill

1

"3D animation"

O gatilho mais direto. Qualquer menção ao nome do skill ou à técnica de animação 3D controlada por scroll.

2

"scroll-stop build" / "scroll animation website"

Intenção de construir — não só entender. O usuário quer o site final.

3

"scroll-driven video" / "build the scroll-stop site"

Variações idiomáticas — todas mapeiam para o mesmo skill.

4

"Apple-style scroll animation" / "video on scroll"

Referência visual clara ao padrão Apple de lançamento de produto.

5

Arquivo de vídeo + pedido de controle

Usuário fornece um .mp4 e pede para "controlar pelo scroll" ou "fazer scrub interativo".

📋 Step 0 — The Interview (obrigatório)

Antes de construir, o skill faz uma entrevista com o usuário para coletar:

  • • Caminho do arquivo de vídeo
  • • Diretório de output para os frames
  • • Número de frames desejados (30–120)
  • • Seções de anotação (texto + momento do vídeo)
  • • Especificações do produto (para count-up)
  • • Paleta de cores preferida
  • • Velocidade do scroll (200–800vh)
  • • Título e subtítulo do hero
"3D animation"
gatilho principal
"scroll-stop"
intenção de construir
Apple-style
referência visual
Step 0
entrevista obrigatória
3

🚀 Como melhora suas páginas

✓ FAZER — o que o skill resolve

  • Transforma um vídeo simples em experiência interativa imersiva
  • Entrega site completo com loader, navbar, hero, specs, footer
  • Controla a narrativa: o usuário "lê" o produto rolando a página
  • Performance: canvas + requestAnimationFrame, sem pop-in
  • Retina-ready: usa devicePixelRatio para nitidez em HiDPI
  • Mobile: layout compacto, cards em linha única, posição bottom:1.5vh

✗ EVITAR — quando não usar

  • Vídeos longos (>10s) — prefira 3–6s para o efeito scroll funcionar bem
  • Frames em PNG — use JPEG <100KB cada para evitar lentidão
  • Abrir via file:// — frames não carregam sem servidor local
  • scroll-behavior: smooth no CSS — interfere no controle frame-a-frame
  • Primeiro frame colorido/escuro — precisa ser branco para o loader funcionar

Dica de velocidade: A altura do container .scroll-animation controla o ritmo: 200vh = rápido, 500vh = suave, 800vh = cinemático. Ajuste conforme a densidade de informação do produto.

📊 Benchmarks realistas

60–120
frames recomendados para 3–6s de vídeo a 20fps
<100KB
tamanho máximo por frame JPEG sem travar o scroll
~180
estrelas no starscape para background vivo sem custo
Storytelling
rolar = narrar produto
rAF
requestAnimationFrame
IntersectionObserver
dispara count-up
Glass-morphism
navbar pill on scroll
4

⚙️ Como funciona por dentro

Pipeline de 6 passos (SKILL.md)

0

Step 0 — The Interview

Coleta caminho do vídeo, output dir, número de frames, seções de anotação, specs para count-up, paleta, velocidade do scroll, título/subtítulo.

1

Step 1 — Analyze the Video

Extrai metadados: duração, resolução, fps. Determina quantos frames extrair (recomendado: duração × 20).

2

Step 2 — Extract Frames via FFmpeg

Roda o comando FFmpeg para gerar frames JPEG numerados no diretório de output.

3

Step 3 — Build the Website

Gera o HTML completo com canvas sticky, loader, starscape, navbar, hero, annotation cards, specs, footer.

4

Step 4 — Key Implementation Patterns

Canvas com devicePixelRatio. Cover-fit desktop, zoomed contain-fit mobile. Snap-stop com lock de overflow ~600ms. Navbar pill transform. Count-up com easeOutExpo staggerado 200ms.

5

Step 5 — Customize Content

Aplica a paleta de cores, textos, número de cards e specs fornecidos na entrevista.

6

Step 6 — Serve & Test

Instrui o usuário a rodar um servidor local (ex.: python -m http.server) para testar o site.

Canvas — Retina Support Step 4 — padrão obrigatório
// Canvas com suporte a Retina / HiDPI
canvas.width  = window.innerWidth  * window.devicePixelRatio;
canvas.height = window.innerHeight * window.devicePixelRatio;
canvas.style.width  = window.innerWidth  + 'px';
canvas.style.height = window.innerHeight + 'px';
ctx.scale(window.devicePixelRatio, window.devicePixelRatio);

// Mapeamento scroll → frame
window.addEventListener('scroll', () => {
  const scrollTop = window.scrollY;
  const maxScroll  = scrollContainer.scrollHeight - window.innerHeight;
  const progress   = Math.min(scrollTop / maxScroll, 1);
  const frameIdx   = Math.floor(progress * (frames.length - 1));
  if (frameIdx !== currentFrame) {
    currentFrame = frameIdx;
    requestAnimationFrame(() => drawFrame(frames[frameIdx]));
  }
}, { passive: true });

⚠️ Dependência Obrigatória: FFmpeg

O skill detecta se FFmpeg está instalado. Se não estiver, instrui o usuário: brew install ffmpeg (macOS) ou equivalente. Frames não carregam sem servidor HTTP local — nunca via file://.

position: sticky
canvas fixo no viewport
passive: true
otimização do scroll
easeOutExpo
easing do count-up
snap zone
600ms de lock overflow
5

💬 Exemplo prático + PROMPT pronto

Cenário: Deconstrução de um smartwatch

Você tem um vídeo de 4 segundos mostrando um smartwatch se desmontando peça por peça (deconstrução de produto). Quer um site onde o usuário rola a página e o relógio se desmonta na tela — com anotações aparecendo em cada componente (bateria, tela AMOLED, processador) e uma seção final com as especificações técnicas animadas.

PROMPT — Cole no Claude Code dispara 3d-animation-creator
3D animation

Tenho um vídeo de deconstrução de smartwatch em:
/Users/eu/videos/watch-deconstruct.mp4

Quero um site scroll-stop Apple-style com:
- Frames extraídos em: /Users/eu/site/frames/
- 80 frames totais
- Velocidade: 600vh (cinemática)
- Cor dominante: #a855f7 (roxo)

Anotações (3 cards):
1. "Tela AMOLED 1.4"" — no frame 20
2. "Bateria 300mAh" — no frame 45
3. "Chip Snapdragon W5" — no frame 65

Specs (count-up):
- "1.4"" / tela
- "300mAh" / bateria
- "5 dias" / autonomia
- "IP68" / resistência

Título: "Por dentro do Tempo"
Subtítulo: "Cada componente, revelado"

O que acontece: O Claude inicia a entrevista (Step 0), confirma os parâmetros, roda o comando FFmpeg para extrair os 80 frames, e entrega um único arquivo HTML com todo o site — loader, starscape, canvas sticky, 3 annotation cards com snap-stop, seção specs com count-up e navbar pill.

Comando FFmpeg gerado pelo skill
ffmpeg -i /Users/eu/videos/watch-deconstruct.mp4 \
  -vf "fps=20,scale=1920:-1" \
  -q:v 3 \
  /Users/eu/site/frames/frame_%03d.jpg
-vf fps=20
extrai 20fps
scale=1920:-1
mantém aspect ratio
-q:v 3
qualidade JPEG alta
frame_%03d
nomes numerados
6

🧬 Combina com / limites

🎬

animation-designer

Módulo 3.1

Cria as animações CSS/GSAP/Framer Motion que depois podem ser renderizadas como vídeo. Use animation-designer para fazer o vídeo de entrada do 3d-animation-creator.

Fluxo: animation-designer → exporta vídeo → 3d-animation-creator
⚛️

remotion

Módulo 3.3

Gera vídeos programáticos em React. O output MP4 do Remotion é o input perfeito para o 3d-animation-creator — vídeo com precisão de frame → site scroll-stop.

Fluxo: remotion → .mp4 → FFmpeg → canvas scroll-stop
🎞️

HyperFrames

Módulo 3.4

O HyperFrames converte HTML animado → MP4 via Chrome headless + FFmpeg. Use para renderizar animações HTML complexas e depois alimentar o 3d-animation-creator com o vídeo gerado.

Fluxo: HyperFrames (HTML→MP4) → 3d-animation-creator (MP4→scroll-site)

✓ COMBINE COM

  • animation-designer para criar o vídeo-fonte com animações CSS/GSAP
  • remotion quando o vídeo precisa ser gerado programaticamente em React
  • HyperFrames para converter animações HTML complexas em MP4 de entrada
  • frontend-design para refinar o HTML final com mais polimento visual
  • impeccable para revisão de qualidade do site entregue

✗ NÃO USAR QUANDO

  • O usuário quer apenas uma animação CSS simples — use animation-designer
  • O vídeo não existe ainda e não há plano para criá-lo antes
  • O ambiente não suporta FFmpeg e o usuário não pode instalá-lo
  • O conteúdo é texto/dados — use canvas-design ou algorithmic-art
  • Precisa de autoplay de vídeo normal — use a tag <video> diretamente

Posição na Trilha 3 🎞️ Mídia

3.1 🎬
animation-designer
CSS, GSAP, Framer Motion — cria animações
3.2 🖱️ ← VOCÊ ESTÁ AQUI
3d-animation-creator
FFmpeg, Canvas, scroll-stop — site a partir de vídeo
3.3 ⚛️
remotion
React, renderização programática de vídeo
3.4 🔁
seedance + HyperFrames
HTML→MP4 via Chrome headless + FFmpeg
T3 completa
animation → 3d → remotion → HyperFrames
Entrada
qualquer .mp4 de 3-6s
Saída
site HTML completo
Upstream
remotion / HyperFrames

📋 Resumo do Módulo 3.2

O que você aprendeu

  • O 3d-animation-creator constrói sites scroll-stop Apple-style a partir de vídeos
  • Usa FFmpeg para extrair frames JPEG e Canvas API para renderizá-los
  • O skill dispara por "3D animation", "scroll-stop build", "Apple-style scroll animation"
  • Inclui starscape (~180 estrelas), navbar pill, annotation cards com snap-stop e count-up
  • Step 0 (entrevista) é obrigatório — coleta caminho, frames, anotações e specs
  • Combina com animation-designer (upstream), remotion e HyperFrames para o vídeo-fonte
  • Vanilla JS, zero frameworks pesados, { passive: true }, requestAnimationFrame

Próximo módulo:

⚛️

3.3 remotion

Renderização programática de vídeo com React — frames controlados por código, output MP4.

Dica de estudo: Tente encadear Módulo 3.1 → 3.2: crie uma animação CSS com animation-designer, exporte como vídeo (via HyperFrames), e alimente o 3d-animation-creator. É o pipeline completo da Trilha 3.