Communitygithub.com

danbaruka/ai-video

Crie vídeos verticais curtos (TikTok, Reels, YouTube Shorts, 30 a 90 s) em um estilo branco animado e limpo a partir de um único arquivo video.json, usando pouquíssimos tokens. Três modos. "Gerado" adiciona voz neural gratuita e design em movimento. "Imagens" coloca suas capturas de tela, fotos e páginas da web em um iPhone real, navegador ou tela cheia. "Filmado" adiciona legendas e cenas animadas sobre um clipe de pessoa falando. A habilidade escreve o roteiro, gera a voz, sincroniza legendas palavra por palavra, anima cada cena, adiciona música e efeitos sonoros, verifica se nenhum texto transborda a tela e renderiza o MP4. Funciona em inglês, francês e muitos outros idiomas. Use-a sempre que alguém pedir um vídeo curto, um Short, um Reel, um TikTok, um explicador animado, um lote de vídeos, um vídeo sem rosto, legendas animadas, ou quiser produzir muitos vídeos rápido e barato, mesmo que nunca diga "habilidade".

O que é ai-video?

ai-video é uma habilidade especializada para agentes de IA (como Claude Code, Cursor, Codex) que permite a criação de vídeos verticais curtos e estilizados (TikTok, Reels, YouTube Shorts) com mínimo consumo de tokens, a partir de um único arquivo JSON. Ao invés de exigir que o agente escreva centenas de linhas de HTML/CSS/JavaScript de animação, a habilidade define um formato JSON conciso (60 a 120 linhas) que descreve o roteiro, as cenas (de um catálogo de 16 tipos), a voz, as legendas e a marca. O script `make.mjs` então gera automaticamente o áudio (via edge-tts), anima as cenas (usando HyperFrames e GSAP), sincroniza legendas palavra por palavra e renderiza o MP4 final, tudo offline e com cache inteligente. A habilidade suporta três modos de operação: 'Gerado' (voz sintética e animação completa), 'Imagens' (incorpora capturas de tela e fotos em dispositivos mockados) e 'Filmado' (adiciona legendas animadas sobre um vídeo de pessoa falando). Isso torna a habilidade ideal para produção em massa de conteúdo de redes sociais, vídeos explicativos sem rosto e legendas animadas, com custo de token drasticamente reduzido (cerca de 65.000 tokens para um vídeo de 60 segundos) e sem necessidade de edição manual.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danbaruka/claude-code-ai-video/tree/main/skills/ai-video

Perguntar na sua IA favorita

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

Documentação

O que ai-video faz?

Um vídeo é um arquivo video.json: as frases que a voz diz e, para cada ideia forte, uma cena escolhida de um catálogo de 16 tipos. O script scripts/make.mjs faz todo o resto. Nunca escreva HTML, CSS ou código de animação manualmente. A única exceção é o momento único que merece um visual personalizado (tipo html).

ideia ─► roteiro (frases) ─► video.json ─► make.mjs ─► contato (revisão) ─► --rendu ─► MP4 + capa + texto de postagem

As chaves do JSON estão em francês (phrases, texte, scene, voix, marque…), assim como os tipos de cena (titre, chiffre, liste…). Escreva-as exatamente como mostrado nesta habilidade. O texto que a voz diz pode estar em qualquer idioma.

Antes do primeiro vídeo (uma vez)

sh <habilidade>/scripts/install.sh      # verifica node ≥ 18, ffmpeg, python3; instala edge-tts em <habilidade>/.venv

<habilidade> é a pasta deste arquivo. A primeira execução baixa HyperFrames (via npx), GSAP e os logotipos. Depois disso, tudo fica em cache.

O fluxo de trabalho

  1. O tópico, em uma frase. Se o usuário não fornecer nenhum, sugira 3 e deixe-o escolher.
  2. O roteiro. Leia references/writing.md: ganchos que funcionam, estrutura, duração.
    • Mire em 9 a 14 frases e 110 a 170 palavras.
    • Conte cerca de 2,7 palavras por segundo, mais 0,35 s entre frases: 130 palavras perfazem cerca de 50 s.
  3. O arquivo. Escreva videos/<id>.json no projeto do usuário. O formato está abaixo, e o catálogo completo está em references/scenes.md. Coloque os arquivos de mídia em videos/medias/.
  4. Construir. node <habilidade>/scripts/make.mjs videos/<id>.json gera a voz, a página, a verificação e a contato, sem renderizar (cerca de 1 min).
  5. Revisar. Abra apenas uma imagem: videos/rendus/<id>-planche.jpg.
    • Ela mostra o quadro 1, depois cada cena no seu final (depois que todos os seus elementos chegaram), depois o cartão de encerramento.
    • Corrija o JSON e execute o comando novamente. A voz fica em cache: apenas as frases alteradas são refeitas.
  6. Renderizar. Adicione --rendu. Leva cerca de 1 min para 45 s de vídeo. Você obtém:
    • videos/rendus/<id>.mp4;
    • -couverture.jpg, a capa, que é o quadro 1;
    • <id>.txt, com o título, legenda, hashtags e comentário fixado.
  7. Publicar. Leia references/publishing.md para horários de postagem por país do público, cadência de postagem e legendas. Nunca publique nada sem a autorização explícita do usuário.

Economizando tokens: as regras que importam

Esta habilidade é barata porque o modelo escreve 60 a 120 linhas de JSON por vídeo, em vez de 250 a 400 linhas de HTML e código de animação. Em um teste cego, um agente novo produziu um vídeo de 60 s finalizado com cerca de 65.000 tokens, incluindo a leitura desta habilidade. Para manter isso:

  • Não abra make.mjs, lib/*.mjs, style.css ou o index.html gerado. O catálogo de cenas é suficiente. Abra o código apenas se um comando falhar e sua mensagem não for suficiente.

  • Leia uma referência apenas para sua etapa:

    EtapaReferência
    escritawriting.md
    escolha de cenascenes.md
    voz, filmagem ou capturas de telamodes.md
    publicaçãopublishing.md

    Nunca releia uma referência já lida na conversa.

  • Uma contato, não capturas de tela. Para verificar um vídeo, olhe <id>-planche.jpg uma vez. Nunca pegue um quadro por segundo e nunca inspecione o MP4 quadro a quadro.

  • Confie na verificação. O comando executa a verificação HyperFrames (texto transbordando, texto oculto, erros de tempo de execução) e a resume em algumas linhas.

    • "aucun débordement, aucune erreur" significa que está limpo.
    • Uma linha ✗ sempre deve ser corrigida.
    • Uma linha ⚠ vale a pena ser lida: corrija se afetar o texto.
  • Lotes levam um comando. Escreva os N arquivos primeiro. Depois execute node make.mjs videos/a.json videos/b.json … --rendu em segundo plano e aguarde a conclusão sem observar sua saída.

  • Edite no lugar. Para corrigir algo, altere apenas a frase ou cena com problema no JSON. Nunca reescreva o arquivo inteiro.

  • Sem caça a ativos. Logotipos (logo:bitcoin, logo:metamask…) e 45 ícones (icone:cle…) já estão embutidos. Procure na web por uma imagem apenas se o usuário pedir uma.

O formato video.json

{
  "id": "wallet-key",
  "titre": "Your crypto is not in your wallet",
  "langue": "en",
  "voix": { "nom": "en-US-AndrewMultilingualNeural", "debit": "+4%" },
  "marque": { "nom": "BDan", "visuel": "icone:etincelle" },
  "prononcer": { "USDT": "U S D T" },
  "phrases": [
    { "texte": "Your crypto is not in your *wallet*.",
      "scene": { "type": "titre", "lignes": ["Your crypto", "is not in", "your *wallet*"], "visuel": "icone:portefeuille" } },
    { "texte": "The key fits in *twelve words*.",
      "scene": { "type": "chiffre", "valeur": "12", "apres": "words", "au": "twelve", "couleur": "accent" } },
    { "texte": "It's called the recovery phrase." }
  ],
  "fin": { "texte": "I'm BDan.", "sous": "Let's talk new tech.", "audio": "medias/signature.wav" },
  "publication": { "titre": "…", "legende": "…", "hashtags": ["crypto"], "commentaire": "…" }
}
  • phrases[].texte: o que a voz diz, palavra por palavra.

    • *palavra* marca a palavra forte: aparece em itálico colorido, pulsa quando falada e a câmera aproxima-se dela.
    • Use no máximo uma por frase.
  • scene: inicia uma nova cena.

    • Uma frase sem cena estende a anterior, o que dá tempo para ler.
    • No modo filmado, uma frase sem cena mostra o rosto; lá, "scene": "suite" estende a cena.
  • au ("em"): o elemento aparece naquela palavra da frase, por exemplo "au": "Ledger".

    • Sem au, os elementos se distribuem sozinhos: um por frase quando há tantos elementos quanto frases, caso contrário em intervalos uniformes.
  • Visuais, onde quer que uma cena os aceite: "logo:binance", "icone:cadenas", "emoji:🔑", ou um caminho como "medias/screenshot.png" (arquivos .svg são incorporados).

  • voix: a voz. nom é o nome da voz, debit é a velocidade. fichier aponta para sua própria gravação.

  • langue: "fr" por padrão. Defina "en" para inglês, junto com uma voz em inglês.

  • marque: a pequena pílula de marca no canto inferior esquerdo. nom é o nome da marca, visuel seu logotipo.

  • prononcer: formas faladas. Elas mudam como a voz diz uma palavra, nunca o texto mostrado na tela.

  • fin: o cartão de encerramento, com o logotipo marque, texte e sous (um subtítulo).

    • audio reproduz uma despedida gravada no cartão.
    • Sem audio, o cartão permanece 2 s, em silêncio.
  • titre: o nome do vídeo nos arquivos. O título do YouTube vai em publication.

  • Opcionais:

    ChaveEfeito
    musiqueum arquivo de música, com volume reduzido sob a voz
    couleurscores, por exemplo {"accent": "#2f6bff", "accent2": "#5fa3ff"}
    sons: falsesem whooshes nas transições
    blancsilêncio entre frases, 0,35 s por padrão
    pausesilêncio extra após uma frase
    sousTitres: falsesem legendas
  • A frase 1 sempre tem uma cena. O quadro 1 é a capa que as pessoas veem nos feeds, então use um titre curto e de gancho.

As 16 cenas (parâmetros e exemplos em references/scenes.md):

Para mostrar…tipo
o gancho, uma linha impactantetitre
um número (preço, recorde, porcentagem)chiffre
2 a 6 pontos, ferramentas ou dicasliste
um método em 2 a 5 etapasetapes
A versus B, antes / depois, mito / fatoduel
marcas, moedas, aplicativoslogos
uma captura de tela ou gravação de tela de aplicativotelephone
um site, uma páginanavigateur
uma foto, como cartão ou tela cheiaimage
uma conversa (IA, suporte, golpe)chat
um perigo, um golpe, boas notíciasalerte
uma tendência, uma comparação em númerosgraphique
um comando, uma instalaçãoterminal
uma citação de alguémcitation
um conceito e sua explicaçãocarte
o momento único que merece um visual inventadohtml

Varie as cenas.

  • Dê a cada ideia forte sua própria cena: 6 a 10 cenas por vídeo.
  • Nunca use o mesmo tipo duas vezes seguidas e mude a ordem dos tipos de um vídeo para o próximo.
  • Um estilo fixo não deve se tornar um modelo. Se três vídeos seguidos compartilham a mesma sequência de cenas, os espectadores desistem.

Os três modos (detalhes em references/modes.md)

  • Gerado: o JSON é tudo que você precisa.
    • A voz é edge-tts: gratuita, sem chave, muitos idiomas.
    • Defina voix.nom para mudar a voz ou o sotaque.
  • Imagens: suas capturas de tela e fotos vão para telephone, navigateur ou image, a partir de videos/medias/.
    • Uma voz gravada ou clonada vai em "voix": { "fichier": "medias/voice.wav" }.
    • Ela é transcrita localmente (whisper) e sincronizada com suas frases.
  • Filmado: defina "rush": "medias/clip.mp4". O áudio do clipe é a voz.
    • Frases sem cena mostram o rosto, com legendas na parte inferior.
    • Uma cena cobre a tela pela duração de sua ideia.
    • Escreva as frases a partir da transcrição: a habilidade as sincroniza palavra por palavra.

Antes de renderizar: a lista de verificação

  • A frase 1 declara o tópico claramente, e seu título é lido em menos de um segundo.
  • Toda palavra técnica é explicada na mesma frase ou na seguinte.
  • Há no máximo uma palavra forte por frase e 6 a 10 cenas de tipos variados.
  • Números vêm de uma fonte real e verificada. Uma cena chiffre carrega source quando o número vem de outra pessoa.
  • O contato é revisado, a verificação está limpa e nenhum aviso "mot introuvable" (palavra não encontrada) é deixado.
  • O final dá uma razão para ficar (o que vem a seguir, uma frase para lembrar), não uma pergunta vaga.
  • Marcas são mostradas para falar sobre elas, nunca para sugerir uma parceria.
  • Conversas inventadas carregam "mention": "Exemple fictif", ou "Example" em inglês.

Quando algo quebra

MensagemO que fazer
voix : … edge_ttsexecute sh <habilidade>/scripts/install.sh
mot « x » introuvableum au deve repetir uma palavra de sua frase de cena, como escrita
logo « x » introuvableforneça um arquivo ("medias/x.svg"), ou tente o nome da marca sem espaços
texto transbordaencurte o texto, ou mude para uma cena mais larga (carte ou liste em vez de duel); não mexa no CSS
uma palavra é mal pronunciadaadicione-a a prononcer, por exemplo {"Ledger": "Ledjer"}

Habilidades Relacionadas