Communitygithub.com

editar-criativo

Ferramenta de criação em lote de vídeos criativos (9:16) para anúncios Meta/TikTok. Cria pastas, escreve roteiros, gera narração com voz neural grátis ou ElevenLabs, edita b-roll, aplica legendas e efeitos sonoros, e exporta os vídeos prontos.

editar-criativo란 무엇인가요?

O **editar-criativo** é um skill automatizado para criação de anúncios em vídeo no formato 9:16 (vertical) para plataformas como Meta e TikTok. Ele organiza todo o fluxo de produção: desde a estruturação de pastas de oferta, escrita de roteiros (hook + body), geração de narração por voz neural (grátis via Edge TTS ou ElevenLabs), corte de b-roll sincronizado com a fala, aplicação de faixa de gancho, legendas palavra por palavra (caixa roxa ou palavra amarela), efeitos sonoros e trilha, até a exportação final dos vídeos em `01_prontos`. O skill suporta três modos principais: criação de criativos novos (para testar ângulos), modelagem de criativos (vídeos do zero baseados na estrutura de um criativo que já escala) e variações de hook sobre um criativo validado (mantendo o vídeo original). Ele é invocado sempre que o usuário mencionar a vontade de editar, criar, modelar ou variar criativos, mesmo sem citar o nome do skill explicitamente. A ferramenta funciona em qualquer plataforma que suporte execução de scripts Python 3.10+ e ffmpeg, como Claude Code, Cursor ou Codex, e é ideal para profissionais de marketing digital que precisam produzir grande volume de anúncios de forma rápida e consistente.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/matheuserick038-crypto/editar-criativo/tree/HEAD

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Editar criativo

Kit em kit/ (ao lado deste arquivo). Todos os scripts são Python 3.10+ e usam ffmpeg/ffprobe. No Windows execute com python (não python3). Se ffmpeg não estiver no PATH da sessão, os scripts o encontram pelo PATH do usuário automaticamente.

KIT = <pasta deste SKILL.md>/kit

1. Oferta e pastas

Descubra o nome da oferta (pergunte se não veio no pedido). Raiz padrão: ~/Documents/Ofertas (no Windows, %USERPROFILE%\Documents\Ofertas).

python "$KIT/criar_oferta.py" "Velas de Natal"

Cria (ou completa, sem apagar nada) a estrutura:

PastaConteúdo
_worktemporários (limpos ao final)
01_prontoscriativos finais .mp4 + lote_XX_resumo.csv
02_brutosb-roll e vídeos de referência
03_apresentadoragravações de UGC / apresentadora
04_imagensfotos do produto, prints da página
05_audiosnarrações (<id>.mp3 + <id>.palavras.json)
06_efeitos9 efeitos sonoros do kit + musica*.mp3 opcionais (trilha)
07_roteiroslotes de roteiro .json
08_validadoscriativos que já vendem (base para modelagem/variação)

Leia oferta.json. Se produto/publico/promessa estiverem vazios, pergunte ao usuário (ou leia a página de vendas se ele passar o link) e preencha — os roteiros dependem disso.

2. As quatro perguntas (uma única chamada AskUserQuestion)

  1. Modo — "O que vamos fazer?"
    • Criativos novos — testar ângulos e roteiros novos
    • Modelagem de criativos — vídeos do zero com a estrutura de um criativo que já vende/escala (do próprio usuário ou do mercado)
    • Variações de validados — reaproveitar o próprio vídeo validado e trocar só o hook

Atenção — "melhora esse validado e cria variações": quando o usuário manda um criativo dele que vende e pede variações/versões melhores, o padrão é Modelagem (vídeos totalmente novos, com roteiro e imagens novas, usando o validado só como referência de estrutura). Só use "Variações de validados" (que reaproveita as imagens e o áudio do vídeo enviado) se o usuário pedir explicitamente para manter o vídeo original. 2. Quantidade — "Quantas variações?" 5 / 10 / 20 / 50 3. Legenda — "Qual estilo de legenda?"

  • Variar entre os dois (Recomendado) — alterna caixa roxa e palavra amarela entre as variações
  • Caixa roxa — palavra falada dentro de uma caixa roxa
  • Palavra amarela — palavra falada em amarelo, sem fundo
  1. Narração — "Como vamos fazer a narração dos novos hooks e bodies?"
    • Gerar com voz grátis (Recomendado) — vozes neurais em português, sem custo
    • Gerar com ElevenLabs — usa a conta do usuário e consome créditos
    • Já tenho as narrações — coloco os áudios em 05_audios

Se o usuário já respondeu algo no pedido, não pergunte de novo.

ElevenLabs: a chave fica em ~/.config/editar-criativo/.env (ELEVENLABS_API_KEY= e, opcional, ELEVENLABS_VOICE_ID=). Se faltar, ofereça abrir o arquivo no Bloco de Notas para o usuário colar. Nunca imprima a chave nem a coloque em comando de shell.

3. Material visual

Liste 02_brutos, 03_apresentadora e 04_imagens. Fontes de material, nesta ordem de preferência:

  1. Material do próprio usuário (fotos/vídeos do produto, gravação da página): sempre o melhor.
  2. Bancos gratuitos (Pexels + Pixabay) — b-roll de apoio, uso comercial liberado:
    python "$KIT/buscar_midias.py" "<pasta_oferta>" "candle making" --qtd 6
    python "$KIT/buscar_midias.py" "<pasta_oferta>" "christmas candle" --tipo foto --qtd 4
    
    • Faça 3–5 buscas com termos em inglês que cubram o que a narração mostra (processo, ingredientes, resultado, cena de uso, emoção). --listar mostra antes de baixar.
    • Biblioteca local primeiro: todo download fica em ~/Documents/Ofertas/_biblioteca (videos/, fotos/, indice.json com as tags do banco + termos já buscados). Cada busca procura lá antes e só chama a API para o que faltar — economiza requisições. Os arquivos entram na oferta por hardlink (sem ocupar espaço duplicado). --sem-api usa só a biblioteca; --forcar-api ignora a biblioteca. Por isso use termos em inglês consistentes entre ofertas ("stretching", "back pain", "yoga mat"…).
    • Padrão: prefere vertical e completa com horizontal (o kit recorta), vídeos de até 40 s, --qtd itens novos de cada tipo. Vídeos vão para 02_brutos/, fotos para 04_imagens/, créditos em 02_brutos/creditos.csv (coluna origem: biblioteca ou banco).
    • Depois de baixar, escolha as mídias certas para cada criativo em midias/midias_baixo em vez de deixar o sorteio — b-roll que combina com a fala converte mais.
    • Não use banco de imagens para simular depoimento: pessoa reconhecível não pode parecer endossar a oferta.
    • Chaves grátis em ~/.config/editar-criativo/.env (PEXELS_API_KEY, PIXABAY_API_KEY). Se faltar, o script avisa; ofereça abrir o arquivo no Bloco de Notas para o usuário colar. Funciona com uma só. (Em nov/2026 o Pexels pausou a emissão de chaves novas; o usuário usa só o Pixabay até reabrir.)
  3. Referências de redes sociais (para modelagem/variação), com links que o usuário aprovar: python "$KIT/baixar.py" "<pasta_oferta>" <url1> <url2> ... --pasta 08_validados. Use apenas material que o usuário tem direito de usar.

Gravação de tela do web app / página: o usuário grava (Win+Alt+R) e salva em 02_brutos.

4. Roteiros por modo

Escreva em português do Brasil (ou de Portugal se a oferta for PT), tom UGC falado, frases curtas.

  • hook: 1 frase, 6–14 palavras, ≤ 3 s falado. Quebra padrão, curiosidade, dor ou resultado.
  • gancho_tela: texto da faixa vermelha, ≤ 7 palavras, complementa (não repete) o hook.
  • body: 15–35 s falados (~40–90 palavras): problema → mecanismo/demonstração → prova → CTA.
  • cta_tela (opcional): texto curto da faixa verde nos últimos 3 s ("LINK NA DESCRIÇÃO").
  • Varie ângulos no lote: dor, curiosidade, antes/depois, prova social, objeção, demonstração, preço/ancoragem, urgência sazonal, "erro comum", lista. Não repita a mesma abertura.
  • Respeite políticas de anúncio: nada de promessa de cura, renda garantida, ou "você é [atributo pessoal]".

Criativos novos: N roteiros com ângulos diferentes.

Modelagem de criativos: o criativo de referência fica em 08_validados (ou baixe pelo link). Transcreva: python "$KIT/transcrever.py" "<arquivo>" — e, se a parte visual importar, assista com a skill watch. Mapeie a estrutura (tipo de hook, blocos e duração de cada um, CTA) e escreva N roteiros com a mesma estrutura para esta oferta. Não copie o texto. Nenhum quadro nem áudio do vídeo de referência entra nos vídeos novos.

Checklist de modelagem (anote no lote em estrutura_modelada):

  1. Duração e blocos de fala — ex.: gancho 0–3,5 s → apresenta o produto → benefícios → CTA com preço.
  2. Formato visual — tela cheia ou dividida; o que aparece o tempo todo (demonstração, apresentadora, tela).
  3. Elementos fixos que vendem — reproduza com o kit:
    • faixa com nome + preço fixa no topo → faixa_fixa (entra depois do gancho, para não ter cara de anúncio no 1º segundo);
    • contador sobre o exercício/passo ("12 reps", "8 x lado") → rotulos;
    • estilo de legenda e gênero da voz → legenda e voz iguais aos do validado.
  4. Preço e oferta exatamente como no validado (é o que ele vende), salvo pedido em contrário.
  5. Se o validado tem CTR baixo e venda boa: o corpo funciona e a abertura não para o dedo. Mantenha a estrutura do corpo e invista no gancho: tensão, teste ("tenta encostar a mão no chão…"), número/conta ("117 exercícios por menos de R$ 10"), quebra de crença. Faixa de gancho desde 0 s, imagens próprias do gancho em midias_gancho (moedas, esqueleto, academia), cortes a cada ~1,8 s, e encaixe: "desfoque" quando o b-roll for horizontal em tela cheia.

Variações de validados (só quando o usuário quer manter o vídeo original): transcreva o criativo que já vende, encontre onde o hook original termina (fim da 1ª frase, geralmente 2–5 s) e escreva N hooks novos. Cada criativo leva só hook (sem body) e "base": {"video": "08_validados/arquivo.mp4", "a_partir_de": <segundos>} — o kit monta hook novo narrado + body original com o áudio original.

  • Corte em a_partir_de logo antes da 1ª palavra depois do hook (pule o silêncio — ex.: hook acaba em 3,56 s, próxima palavra em 4,16 s → 4,05). Use transcrever.py para ter o tempo de cada palavra.
  • Use voz do mesmo gênero da narração original (a emenda soa estranha com troca de voz) e a mesma legenda do validado, se ele tiver uma parecida. O kit iguala o volume do hook novo ao do validado (LUFS) sozinho.
  • CTR baixo com venda boa = o corpo vende e a abertura não para o dedo: troque só os 3–6 s iniciais (gancho com tensão/teste/número, faixa de gancho desde 0 s, corte a cada ~1,3 s com "ritmo": 1.3).

5. Lote de roteiros

Grave em <oferta>/07_roteiros/lote_NN.json (próximo número livre):

{
  "modo": "novos",
  "legenda": "variar",
  "narracao": {"motor": "edge", "voz": "pt-BR-AntonioNeural", "velocidade": "+8%"},
  "criativos": [
    {
      "id": "c01",
      "angulo": "curiosidade",
      "layout": "dividida",
      "hook": "Ninguém acredita que essa vela foi feita em casa.",
      "gancho_tela": "Ninguém acredita que foi feita em casa",
      "body": "Eu comecei com uma panela comum e um pote de vidro...",
      "cta_tela": "Link na bio",
      "midias": ["02_brutos/x.mp4", "04_imagens/y.jpg"],
      "midias_baixo": ["02_brutos/z.mp4"]
    }
  ]
}

Campos:

  • legenda: variar | caixa_roxa | palavra_amarela (por criativo também aceita legenda).
  • narracao.motor: edge (grátis) | eleven | existente (lê 05_audios/<id>.mp3 e transcreve). Vozes edge: pt-BR-AntonioNeural, pt-BR-FranciscaNeural, pt-BR-ThalitaMultilingualNeural, pt-PT-DuarteNeural, pt-PT-RaquelNeural. Alterne voz masculina/feminina entre criativos com "voz" no criativo.
  • layout: dividida (tela dividida com linha vermelha, padrão) | cheia.
  • midias / midias_baixo: opcionais. Sem elas, o kit sorteia de 02_brutos, 04_imagens, 03_apresentadora (metade em cima, metade embaixo). Escolha manualmente quando houver mídia que combina com a fala.
  • ritmo: segundos por corte (padrão 2.2). sfx: false desliga efeitos. musica: false desliga trilha.
  • gancho_duracao: força quanto tempo a faixa de gancho fica na tela (padrão: até o fim do hook falado).
  • midias_gancho (tela cheia): mídias usadas só durante o hook; o corpo usa só midias. Evita que a imagem de impacto do gancho (moeda, esqueleto) volte no meio do vídeo. O kit sempre corta no fim do hook.
  • faixa_fixa: {"texto": "117 Exercícios de\nMobilidade e Estabilidade\nApenas R$ 9,90", "cor": "#F97316", "cor_texto": "#111111", "desde": "fim_hook", "y": 0.07, "tamanho": 66, "caixa_alta": false} — faixa que fica do fim do gancho até o fim (ou até o fechamento). \n quebra linha; só texto é obrigatório.
  • rotulos: ["12 reps", "8 x lado", "30 seg"] — rótulo pequeno sobre cada corte depois do hook, em ciclo.
  • encaixe: corte (padrão, recorta o centro) | desfoque — em tela cheia, vídeo horizontal aparece numa faixa larga sobre ele mesmo desfocado, sem perder o movimento (bom para demonstração de exercício).

IDs: c01…cNN em criativos novos, m01… em modelagem, v01… em variações — únicos por oferta, porque 05_audios/<id> e 01_prontos/<id>.mp4 usam o id. Em lotes novos continue a numeração.

Mostre ao usuário uma tabela curta (id, ângulo, hook) e siga para a renderização, a menos que ele tenha pedido para revisar antes.

6. Renderizar

python "$KIT/montar.py" "<oferta>/07_roteiros/lote_NN.json"

Rede: a voz grátis (edge) e o ElevenLabs precisam de internet. Se o shell estiver em sandbox e a narração falhar com getaddrinfo failed / ClientConnectorDNSError, execute o comando fora do sandbox. A voz grátis falha de forma intermitente; o kit já tenta 5 vezes antes de desistir daquele criativo (os demais continuam).

Narra quem ainda não tem narração e monta tudo em 01_prontos/<id>.mp4 (1080x1920, 30 fps, H.264 + AAC), mais 01_prontos/lote_NN_resumo.csv. Lotes grandes demoram (≈20–60 s por criativo): execute em segundo plano. --ids c03,c07 refaz só alguns; narrar.py --refazer --ids c03 regenera a voz.

7. Conferir e entregar

Extraia 1 quadro de 2–3 criativos e veja com Read: ffmpeg -ss 1.5 -i "01_prontos/c01.mp4" -frames:v 1 "_work/check_c01.jpg" Confira: faixa de gancho legível, legenda sincronizada e dentro da tela, cortes sem tela preta. Entregue: pasta 01_prontos, quantidade, e o CSV para nomear os anúncios no Gerenciador.

관련 스킬