Communitygithub.com

launch-video — site→MP4 sem API

Vídeos de lançamento SaaS a partir do site do produto: cenas HTML/CSS → frames Playwright → MP4 ffmpeg + Kokoro TTS local. Sem chaves API. Extração de marca e QA de contact sheet.

O que é launch-video — site→MP4 sem API?

Launch Video passo 1: URL ao vivo → marca → cenas HTML → Playwright/ffmpeg. Zero chaves API.

Funciona com~Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/anudeepadi/launch-video-skills/tree/HEAD/skills/launch-video

Perguntar na sua IA favorita

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

Documentação

Vídeo de lançamento

Renderer: o pacote npm launch-video-skills. Contrato completo da cena: https://github.com/anudeepadi/launch-video-skills#scene-contract

  • npx launch-video-skills setup: uma vez por máquina (Chromium headless + pacotes de voz Python). Requer Node 18+, Python 3.10+, ffmpeg. Pesos Kokoro (~350 MB) e whisper small.en (~480 MB) baixados para ~/.cache/lvk na primeira execução de voz.
  • npx launch-video-skills new <name>: cria launch-videos/scenes/<name>/index.html com launch-videos/kit/ ao lado.
  • npx launch-video-skills render <scene.html> [flags]: escreve em ./out/.
  • Download do Chromium trava → export LVK_CHROME=/path/to/chrome-headless-shell (qualquer build local).
  • Python do python.org no macOS falha SSL → export SSL_CERT_FILE=$(python3 -c 'import certifi;print(certifi.where())').

O que separa um bom vídeo de lançamento de "AI slop" está em references/craft.md. Leia antes de storyboard.

Passos

  1. Marca e fatos do produto ao vivo. Busque o site com Playwright. Grave texto literal do título, subtítulo, nomes de recursos, conteúdo de exemplo do próprio site (threads de demonstração, prompts, código, listas de issues) e CTAs. Leia estilos computados para família/peso/ espaçamento de fonte e amostras de cores de pixel para fundo/texto/destaque (variáveis CSS ficam obsoletas). Salve o logotipo SVG e quaisquer imagens em launch-videos/scenes/<name>/assets/. Use a fonte do site apenas se sua licença permitir redistribuição; caso contrário, use a fonte mais próxima incluída (Inter, JetBrains Mono, Space Grotesk). Nunca invente métricas, clientes, integrações ou UI. Se algo está marcado como planejado/pré-visualização, omita ou rotule. Se você não conseguir obter exemplos reais de UI, pare e diga. Coloque a URL de origem e a data em um comentário no topo da cena.
  2. Roteiro, depois storyboard. Uma ou duas linhas curtas por tomada, extraídas do texto do site; 20–40 s no total. Use say quando a forma falada diferir (pontos, acrônimos: say: 'Build A.I. agents'). 5–6 tomadas, uma ideia cada: gancho (produto ou título na tela em até 2 s) → primeiro momento de uso → produto em ação (UI real reconstruída em HTML a partir do exemplo do próprio site, nunca uma captura de tela) → segunda capacidade → 3 pilares ou como funciona → CTA com logotipo. Marcas calmas: music.style: 'ambient', SFX suave (0,2–0,6). Ferramentas de desenvolvedor: 'pulse' e hits. Voz é opcional; só música é comum no X.
  3. Escreva launch-videos/scenes/<name>/index.html em relação a ../../kit/kit.css e kit.js. Comece a partir do modelo scaffolded. Marque as tomadas data-shot="id" sem --in/--out codificados. Linhas de voz vão em SCENE.voice.lines (key, shot, text/say, at/after, pause beats). Prenda beats à fala com data-on="key", data-on="key:word", data-edge="e". Chame K.layout() após definir SCENE, então derive beats JS de K.at/K.end/K.shot: velocidade de digitação = comprimento do texto / duração falada, clique do cursor na palavra chave, dicas de som de digitação a partir das mesmas constantes. onFrame(t) deve ser puro em t. Transformações JS vão em wrappers sem classe de animação CSS. Sem filter: blur, backdrop-filter grandes ou modos de mesclagem em tela cheia.
  4. Loop de revisão. npx launch-video-skills render launch-videos/scenes/<name>/index.html --sheet 1. Cada linha <- ASR heard: é uma possível pronúncia incorreta: reescreva com say e verifique novamente (whisper às vezes ouve incorretamente áudio correto; sinalize para audição humana). Leia o PNG da planilha para: texto sobre imagens ocupadas, legibilidade de texto pequeno, quadros vazios, colisões durante transições, digitação terminando antes do fim da tomada, destaque de sintaxe quebrado. --stills t1,t2 para verificações em resolução total. Itere com observações de gosto ("muito rápido", "não está claro o que aconteceu") em vez de uma única tentativa.
  5. Renderize e verifique. npx launch-video-skills render launch-videos/scenes/<name>/index.html --workers 4. Então:
    • ffprobe: h264 + aac, duração esperada.
    • volumedetect: média cerca de −19 a −17 dB, máximo abaixo de −1 dB.
    • Sincronia: transcreva o MP4 final com timestamps de palavras faster-whisper small.en; a primeira palavra de cada linha dentro de ~0,2 s da linha do tempo impressa no log. Palavras chave chegam nos beats visuais.
    • Continuidade: compare quadros entre limites de worker (contagem de quadros / workers).
  6. Entregue. Entregue o caminho do MP4. Nunca sobrescreva um corte anterior (mv -n ou um novo --out). Diga claramente que voz e música são sintetizadas e não foram verificadas por ouvido. Ofereça texto pós que evite alegações "feito em um prompt". Vozes pagas (ElevenLabs, OpenAI, Google) são uma troca dentro do lib/tts.py do pacote; mencione apenas se o usuário quiser uma leitura mais humana.

Habilidades Relacionadas