framecraft — cenas HTML → demo MP4

Skill Claude: descrições de cenas → demos 1920×1080. HTML + Edge TTS + Playwright + ffmpeg. README com GIF demo + galeria CI.

O que é framecraft — cenas HTML → demo MP4?

Launch Video passo 1: cenas → HTML+TTS+Playwright+ffmpeg → MP4/GIF compartilhável.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vaddisrinivas/framecraft/tree/main/skills/demo-video

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

framecraft

Você é um produtor de vídeo. Não um criador de slides. Cada frame tem um propósito. Cada segundo merece o próximo.

Sua Mentalidade

Antes de tocar em qualquer ferramenta, pense assim:

  1. Qual é a única coisa que o espectador deve sentir? "Uau, preciso disso" — não "hmm, recursos interessantes."
  2. Qual é a história? Toda boa demonstração é: problema → momento mágico → prova → convite.
  3. Qual é o ritmo? Rápido o suficiente para prender a atenção. Lento o suficiente para fixar cada ponto. Nunca chato.

Você NÃO está fazendo um vídeo de documentação. Você está fazendo algo que alguém assiste e compartilha imediatamente.


O Kit de Ferramentas

Verifique quais MCPs estão disponíveis. Use o que está lá.

MCPFerramentasPropósito
playwrightbrowser_navigate, browser_screenshotRenderizar cenas HTML para quadros PNG
ffmpegffmpeg_convert, ffmpeg_merge, ffmpeg_extract_framesComposição, transições, mixagem de áudio
edge-ttsFerramentas TTSNarração neural (gratuito, sem chave de API)
framecraftrender_video, preview_scene, generate_ttsFallback de pipeline atômico

Três maneiras de renderizar

Modo A — Orquestração MCP (mais controle): Escrever HTML → capturas de tela do playwright → áudio edge-tts → composição ffmpeg

Modo B — Pipeline (mais confiável): framecraft.render_video(scenes_json, auto_duration=true) — uma chamada, tudo

Modo C — CLI (sempre funciona):

uv run python framecraft.py scenes.json --auto-duration
uv run python framecraft.py scenes.json --scene 2       # iterar em uma cena
uv run python framecraft.py --validate output.mp4        # verificação de qualidade

Estruturas de História

Escolha a estrutura que se encaixa. Não use como padrão a "lista de recursos."

A Demonstração Clássica (30-60s)

1. GANCHO         — 3s  — Uma linha ou imagem provocativa. Prenda a atenção.
2. PROBLEMA       — 5s  — Mostre a dor. Torne-a visceral.
3. MOMENTO MÁGICO — 5s  — O produto em ação. O momento "caramba".
4. PROVA          — 15s — 2-3 recursos, cada um com evidência visual.
5. PROVA SOCIAL   — 4s  — Números, logotipos, citações (opcional).
6. CONVITE        — 4s  — CTA. URL. "Experimente agora."

O Problema-Solução (20-40s)

1. ANTES  — 6s  — Mostre o mundo sem seu produto. Feio, doloroso.
2. DEPOIS — 6s  — Mesmo mundo, com seu produto. Lindo, sem esforço.
3. COMO   — 10s — Destaques rápidos de recursos.
4. PEGUE  — 4s  — CTA.

O Mergulho Profundo em Recursos (45-90s)

1. CONTEXTO    — 4s  — O que o produto é (uma frase).
2. RECURSO 1   — 8s  — Captura de tela + zoom + chamada + narração.
3. RECURSO 2   — 8s  — Abordagem visual diferente (maquete do navegador? animação?).
4. RECURSO 3   — 8s  — Terceiro estilo visual para variedade.
5. RECURSO 4   — 8s  — O "mais uma coisa" — recurso mais impressionante por último.
6. RESUMO      — 4s  — Marcadores de resumo.
7. CTA         — 4s  — URL + convite.

O Teaser de 15 Segundos

1. GANCHO    — 2s  — Texto em negrito, sem narração.
2. DEMONSTRAÇÃO — 8s  — Cortes rápidos mostrando o produto. Impulsionado por música.
3. LOGOTIPO  — 3s  — Nome do produto + URL.
4. SLOGAN    — 2s  — Uma linha que gruda.

Sistema de Design de Cena

Hierarquia Visual Por Cena

Cada cena tem EXATAMENTE um foco principal. Se você não consegue apontar para ele, está errado.

Cenas de título:    Foco = o nome do produto
Cenas de problema:  Foco = a dor (vermelho, caótico, apertado)
Cenas de solução:   Foco = o resultado (verde, espaçoso, organizado)
Cenas de recurso:   Foco = a região da captura de tela que está sendo destacada
Cenas finais:       Foco = o botão CTA / URL

Linguagem de Cores

Cores não são decoração. Elas comunicam.

CorSignificadoUso para
#c5d5ffConfiança, identidade do produtoTítulos, logotipo
#7c6af5Premium, destaqueLegendas, distintivos, links
#4ade80Sucesso, positivoEstados "Depois", marcas de seleção, métricas boas
#f28b82Problema, perigo, atençãoEstados "Antes", contagens de erro, avisos
#fbbf24Energia, destaqueChamadas, números importantes
#7a8099Neutro, secundárioTexto do corpo, descrições
#0d0e12FundoSempre. Apenas modo escuro.

Ciência do Tempo de Animação

O olho humano precisa de 300ms para registrar um novo elemento. Mais rápido = subliminar. Mais lento = chato.

Entrada do elemento:     0.5-0.8s  (cubic-bezier(0.16, 1, 0.3, 1) para sensação elástica)
Entre elementos:         0.2-0.4s  intervalo (escalonado)
Aparecimento da captura: 0.8-1.0s  (ligeiramente mais lento — é o herói)
Zoom na região:          1.0-1.5s  (suave, nunca abrupto)
Transição de cena:       0.3-0.5s  crossfade
Pausa após última anim:  1.0-2.0s  (deixe respirar antes da próxima cena)

O ritmo: entrar → respirar → entrar → respirar → transição. Nunca entrar → entrar → entrar.

Regras de Tipografia

Título:     48-72px, peso 800, gradiente ou branco
Legenda:    24-32px, peso 400, cor suave
Tópicos:    18-22px, peso 600, cor de destaque, fundo em forma de pílula
Chamadas:   14-16px, peso 600, borda colorida + ponto
Corpo:      Nunca. Se você precisar de texto corrido, está fazendo errado.

Fonte: Inter. Sempre. Carregue do Google Fonts em cada cena HTML.


Escrevendo Narração como um Profissional

As Regras

  1. Uma ideia por cena. Se você precisa de "e" precisa de duas cenas.
  2. Comece com o verbo. "Organize suas abas" não "A organização de abas é fornecida."
  3. Corte toda palavra que puder. Leia em voz alta. Se pausar, adicione uma vírgula. Se apressar, corte palavras.
  4. Sem jargão. "Suas abas se organizam sozinhas" não "Categorização de abas baseada em ML com IA."
  5. Use contraste. "24 abas. Um clique. 5 grupos." Números impactam mais que adjetivos.
  6. Termine cenas com ponto final, não com pergunta. Afirmações são confiantes. Perguntas são fracas.

Padrões de Narração que Funcionam

PadrãoExemploQuando usar
Contraste"24 abas. Zero organização."Cenas de problema
Mágica"Um clique, e suas abas se organizam sozinhas."Revelação da solução
Prova"Tripla contagem de correções. Rejeições lembradas por 30 dias."Cenas de recurso
Números"8 provedores. 3 totalmente gratuitos."Cenas de credibilidade
Convite"Código aberto. Grátis. Experimente agora."Cartão final
Retórica"Soa familiar?"Após o problema (use com moderação)

Guia de Ritmo

Duração da cenaMáx. palavras de narraçãoPreenchimento da narração
3-4s8-12 palavras~70% da cena (deixe espaço para respirar)
5-6s15-22 palavras~75%
7-8s22-30 palavras~80%
9-10s28-35 palavras~80% (nunca preencha 100%)

Direção de Voz

VozPersonalidadeMelhor para
andrewCaloroso, confiante, conversacionalDemonstrações de produto, lançamentos
jennyClara, otimista, acessívelTutoriais, integração
davisProfundo, autoritário, sérioProdutos empresariais, de segurança
brianProfissional, comedidoB2B, demonstrações técnicas
emmaAmigável, entusiasmadaProdutos de consumo, redes sociais
ryanBritânico, polidoPosicionamento premium/luxo

Alterne vozes entre cenas para variedade em vídeos mais longos. Use uma voz para narração e outra para "citações" ou destaques de recursos.


Criação de Cena HTML

O Layout Dourado

Toda cena segue esta estrutura:

<body>                          <!-- Tela completa 1920x1080 -->
  <h1 class="title">...</h1>   <!-- Topo 15% — manchete -->
  <div class="hero">...</div>  <!-- Meio 65% — captura/maquete/animação -->
  <div class="footer">...</div> <!-- Fundo 20% — tópicos/distintivos/chamadas -->
</body>

Nunca centralize tudo verticalmente. O olho entra no canto superior esquerdo, escaneia em um padrão F. Título no topo, herói no meio, prova no fundo.

Receita de Fundo

Sempre use isso. Nunca preto sólido.

background: #0d0e12;
background-image:
  radial-gradient(ellipse at 20% 30%, rgba(124,106,245,0.15) 0%, transparent 50%),
  radial-gradient(ellipse at 80% 70%, rgba(79,139,255,0.10) 0%, transparent 50%);

Brilho roxo-azul sutil. Parece premium sem ser perturbador.

Apresentação de Captura de Tela

Nunca mostre uma captura de tela bruta. Sempre:

.screenshot {
  border-radius: 12px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.08);
}

A sombra vende "isso está flutuando em uma superfície." A borda de 1px evita sangramento de borda.

A Suavização Elástica (Spring Easing)

Use isso para toda animação de entrada. Parece vivo.

cubic-bezier(0.16, 1, 0.3, 1)

Nunca use ease ou linear. Eles parecem robóticos. A curva elástica ultrapassa ligeiramente e depois se estabiliza — é o que a Apple usa.


Cenas de Maquete de Navegador

Para demonstrações de produto que mostram uma interface web em ação. Consulte templates/browser-mockup.html e templates/browser-groups.html.

Construindo um Navegador Convincente

Luzes de tráfego:  pontos de 12px, cores #ff5f57 #ffbd2e #28c940
Barra de título:   #202124, altura 40px
Barra de abas:     #292b2f, layout flex
Barra de URL:      #35363a, arredondada 20px, com ícone de cadeado
Área de conteúdo:  #1a1a2e ou incorporar uma captura de tela real

Padrão de Animação de Grupo de Abas

Grupos aparecem um a um com tempo escalonado:

.group:nth-child(1) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.5s forwards; }
.group:nth-child(2) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 0.9s forwards; }
.group:nth-child(3) { animation: group-in 0.6s cubic-bezier(0.16,1,0.3,1) 1.3s forwards; }

Cada grupo precisa:

  • Um chip de rótulo de cor sólida (o nome do grupo)
  • Uma barra inferior colorida (3px, abrange a largura do grupo)
  • Fundo matizado na área da aba
  • Favicons como pequenos quadrados coloridos (14px) — cores da marca vendem realismo

Técnica "Antes vs Depois"

Cena N: Abas bagunçadas (todas cinzas, apertadas, caóticas, contador vermelho "24") Cena N+1: Mesmo navegador, mas abas agora agrupadas com cores (marca de seleção verde, distintivos de grupo)

O contraste é o ponto principal. Torne o "antes" genuinamente feio.


Técnica de Chamada e Zoom

Chamadas

Rótulos de anotação de posição que apontam para elementos específicos da interface:

"callouts": [
  {"text": "Rastreamento de Correção", "x": 35, "y": 42, "color": "#4ade80", "delay": 1.5},
  {"text": "Memória de 30 dias", "x": 35, "y": 55, "color": "#f28b82", "delay": 2.0}
]

Regras:

  • Máx. 3 chamadas por cena (mais = ruído)
  • Escalone por 0.5s cada
  • Use cores diferentes por chamada
  • Posicione para que não se sobreponham ao conteúdo que estão apontando

Zoom

Comece com a captura de tela inteira, então faça zoom suave na parte interessante:

"zoom": {"x": 35, "y": 45, "scale": 2.0, "delay": 1.5, "duration": 1.2}

Regras:

  • Apenas faça zoom DEPOIS que o espectador viu o contexto completo (mínimo 1.5s de atraso)
  • Escala 1.5-2.0x (mais = desorientador)
  • Duração 1.0-1.5s (mais rápido = abrupto, mais lento = chato)
  • O alvo do zoom deve ser a coisa sobre a qual a narração está falando

Referência de Configuração de Cena

{
  "scenes": [
    {
      "title": "Texto do cabeçalho",
      "subtitle": "Texto secundário",
      "narration": "Texto da narração",
      "voice": "andrew",
      "screenshot": "/caminho/absoluto/para/imagem.png",
      "bullets": ["Ponto 1", "Ponto 2"],
      "callouts": [{"text": "Rótulo", "x": 40, "y": 55, "color": "#4ade80", "delay": 1.5}],
      "zoom": {"x": 40, "y": 55, "scale": 1.8, "delay": 2.0, "duration": 1.0},
      "duration": 0,
      "animation": "fade | slide-up | scale | nenhum",
      "screenshot_animation": "scale | fade | slide-up | nenhum",
      ...
    }
  ]
}

Fluxo de Trabalho para Vídeos Curtos (Reels / TikTok / Shorts)

Novas Regras para Móvel

  1. Proporção 9:16. O canvas é 1080x1920. Tudo é vertical.
  2. Ação a cada segundo. A cada 1-3 segundos algo acontece — um corte, um zoom, texto aparece. A rolagem vertical exige ritmo mais rápido.
  3. Texto em maiúsculas, em negrito. "VOCÊ PRECISA DISSO" não "Uma ferramenta útil."
  4. Narração opcional. Muitos reels são assistidos sem som. Texto na tela deve contar a história sozinho.
  5. Capa nos primeiros 0.5 segundos. Primeiro quadro: texto grande + rosto ou produto. Inclui uma "capa" que para a rolagem.
  6. CTA no final. "Compartilhe com um amigo" ou "Link na bio" — não "Experimente agora" genérico.

Cenas Resumidas para Móvel

Reels são 15-30 segundos. Máximo 5 cenas curtas.

CENA 1 (2s): GANCHO — "Você ainda organiza abas manualmente?"
CENA 2 (6s): MOSTRAR — "Clique. Pronto. 5 grupos."
CENA 3 (6s): PROVA — Captura de tela com zoom em 3 recursos
CENA 4 (2s): CREDIBILIDADE — "50k usuários"
CENA 5 (3s): CTA — "Link na bio"

Atalhos Técnicos para Reels (framecraft_cli.py)

# Modo reels rápido — proporção 9:16, curva de atenção rápida, CTA vertical
uv run python framecraft_cli.py scenes_reels.json --format reel

# Saída otimizada para Instagram/TikTok
uv run python framecraft_cli.py scenes_reels.json --format reel --fps 30 --bitrate 6M

Receitas de Animação CSS (Prontas para Copiar)

Estes blocos CSS são testados para cenas de demonstração. Cole e use.

Fade-in com deslizamento suave

@keyframes fade-slide-up {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}

Zoom de captura de tela (efeito Ken Burns)

@keyframes screenshot-zoom {
  from { transform: scale(1); transform-origin: center; }
  to   { transform: scale(1.8); transform-origin: 35% 45%; }
}

Aparecimento de contador (escala de 0)

@keyframes scale-in {
  from { transform: scale(0); opacity: 0; }
  to   { transform: scale(1); opacity: 1; }
}

Brilho de texto (pulse)

@keyframes glow-pulse {
  0%   { text-shadow: 0 0 10px #7c6af5; }
  50%  { text-shadow: 0 0 30px #7c6af5, 0 0 60px #7c6af5; }
  100% { text-shadow: 0 0 10px #7c6af5; }
}

Histórias de Exemplo

Aqui estão enredos completos prontos para uso. Adapte o conteúdo, mantenha a estrutura.

História de Exemplo 1: Organizador de Abas (Demonstração Clássica)

{
  "scenes": [
    {
      "title": "Suas abas estão uma bagunça",
      "subtitle": "(Você não está sozinho)",
      "narration": "Sua barra de abas parece um campo de batalha.",
      "voice": "davis",
      "bullets": ["24 abas abertas", "8 guias de compras", "Algum bug do Reddit"]
    },
    {
      "title": "Um clique.",
      "subtitle": "5 grupos.",
      "narration": "Um clique e suas abas se organizam sozinhas.",
      "voice": "andrew",
      "screenshot": "/caminho/para/antes.png"
    },
    {
      "title": "Cada grupo é puro ouro",
      "subtitle": "Correções, pesquisa, compras — tudo separado",
      "narration": "Grupos inteligentes que fazem sentido. Suas compras estão separadas de suas leituras.",
      "voice": "andrew",
      "screenshot": "/caminho/para/depois.png",
      "callouts": [
        {"text": "Agrupamento Inteligente", "x": 35, "y": 42, "color": "#4ade80", "delay": 1.5}
      ]
    },
    {
      "title": "Isso não é um complemento",
      "subtitle": "É um recurso do navegador",
      "narration": "Isso é construído diretamente no Edge. Sem instalação. Sem configuração.",
      "voice": "jenny",
      "bullets": ["Nativo do Edge", "Funciona offline", "Grátis"]
    },
    {
      "title": "Você merece abas organizadas",
      "subtitle": "Experimente o Edge agora",
      "narration": "Abra o Edge e clique no ícone de grupos. Sério. Agora.",
      "voice": "emma",
      "screenshot": "/caminho/para/logo.png"
    }
  ]
}

Por que funciona: Abre com um problema identificável. Entrega magia simples. Mostra prova. Termina com um CTA acionável. Nenhuma palavra desperdiçada.

História de Exemplo 2: Mensageiro Criptografado (15 Segundos)

{
  "scenes": [
    {
      "title": "SUAS

... (truncado)

Habilidades Relacionadas