Communitygithub.com

beachyphotoandfilm-arch/video-skills

Cria uma capa exclusiva para cada Reel do Instagram no estilo da sua marca. Lê sobre o que é o vídeo, escreve um título curto, escolhe uma das suas fotos de uma biblioteca marcada, organiza como as suas capas existentes e gera uma prova em tamanho de celular. Processa localmente, sem usar IA para gerar imagens.

O que é video-skills?

Esta skill cria automaticamente capas personalizadas para Reels do Instagram, garantindo consistência visual com o estilo da sua marca. Ela analisa o conteúdo do reel (transcrição, legenda e cartela de texto inicial), sugere um título atrativo baseado em tipos de gancho predefinidos e seleciona uma foto real da sua biblioteca que corresponda ao tema, evitando repetições das últimas 9 capas usadas. O layout é gerado localmente usando HTML/CSS e renderizado com Puppeteer, posicionando o texto no espaço vazio da foto para evitar sobreposição no rosto. A skill produz duas provas: uma visão completa da capa e uma simulação do grid do Instagram em tamanho de celular, permitindo verificar a legibilidade do título antes da aprovação final. Ela é compatível com fluxos de agendamento de mídias sociais e pode ser acionada com comandos como "make covers" ou "design the IG covers".

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/reel-covers

Perguntar na sua IA favorita

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

Documentação

Capas de Reels

Cada reel ganha a sua própria capa. Ela é construída com suas fotos reais e configurada com sua tipografia real, mantendo o texto dentro da área que o Instagram mostra no grid do perfil.

Config: defina sua marca aqui

Edite estas opções uma vez antes da primeira execução.

configuraçãoondepadrão
cor de destaque--brand em scripts/cover.html#3b82f6
fonte do título--display-font em scripts/cover.htmlAnton (grátis, Google Fonts)
fonte do subtítulo.sub em scripts/cover.htmlMontserrat Bold (grátis)
subtítulo padrãosuas capasex. "de um Cozinheiro Caseiro", ou nenhum
pasta de fotosphotos_dir em library.json<CAMINHO_PARA_SUAS_FOTOS_DE_CAPA>
pasta de fotos no Canva (opcional)canva_folder em library.json<SEU_ID_DE_PASTA_NO_CANVA>
documento mestre de capas no Canva (opcional)referência para seu estilo atual<SEU_ID_DE_DOC_MASTER_DE_CAPA_NO_CANVA>
design rascunho no Canva (opcional)usado para exportar fotos do Canva<SEU_ID_DE_DESIGN_RASCUNHO_NO_CANVA>
log de capasvariável de ambiente COVER_LOG para pick.pydrafts/social/cover-log.json na raiz do projeto
onde as capas finalizadas vãopasso 8<SUA_PASTA_DE_VIDEOS>/<Video> YYYY-MM-DD/Covers/
palavras proibidasregras em hooks.mdsua lista (ex. nome de uma oferta antiga)

Feito para o Instagram. A capa pode ser usada em uma postagem normal do IG + TikTok + Shorts como a miniatura do vídeo (ex. videoThumbnailUrl do Metricool). Apenas o grid do Instagram importa para o design. Nunca substitua uma capa que uma postagem já possui.

Nunca use IA para gerar a imagem. Os fundos são suas fotos e os layouts são copiados das suas capas. O código apenas os organiza.

Estilo padrão da marca (mude a gosto)

Referencie apenas suas capas mais recentes no seu documento mestre. Estilos antigos dos quais você já se desfez não contam.

  • uma foto sua brilhante e neutra com um adereço relevante (notebook, câmera, celular, produto), com parede lisa onde o texto será colocado
  • o título em fonte de exibição branca, EM CAIXA ALTA sempre, centralizado, 2 ou 3 linhas, bem pequeno
  • um subtítulo opcional em Montserrat Bold, maiúsculas e minúsculas normais
  • padrão: sem sombra, sem contorno, sem faixa ou escurecimento atrás do texto, sem texto colorido com a cor de destaque
  • sem rótulos, sem tipo inclinado, sem fontes cursivas ou de script, sem layouts de números grandes ou séries
  • o único extra: uma seta simples desenhada à mão na cor de destaque, de vez em quando
  • nada abaixo do ícone do reel: o grid do Instagram coloca o ícone no canto superior direito de cada tile. O render.mjs avisa se algo estiver em x acima de 760 e y abaixo de 540.

As regras de título, tipos de gancho e rótulos estão em hooks.md. Leia-o antes de escrever um título.

Arquivos

scripts/cover.htmlo único layout: título + subtítulo opcional, além dos extras arrow / inset / avatar. Configuração da marca no topo.
scripts/render.mjsrenderiza JPGs de 1080x1920 + ambas as provas, e avisa sobre texto fora da zona segura ou arquivos acima de 8MB
scripts/pick.pylista as melhores fotos por tópico, bloqueia as últimas 9 usadas e exibe os layouts e tipos de gancho recentes
library.jsoncada foto, marcada (pose, adereços, onde está o espaço vazio, ponto de foco). Inclui um exemplo; construa o seu.
log de capas (COVER_LOG)cada capa publicada. Isso evita repetições
photos_dirsuas fotos em alta resolução (apenas local, mantenha fora do git)

scripts/ precisa de puppeteer-core (npm i puppeteer-core em scripts/, ou faça um symlink de scripts/node_modules para a instalação de outra skill) além do Google Chrome e ffmpeg. O render.mjs aponta para o caminho padrão do Chrome no macOS; altere executablePath se o seu for diferente.

Como executar

1. Conheça o reel. Você precisa da transcrição, legenda e cartela de texto inicial de cada reel. Nomeie a única promessa que o reel faz.

2. Título. Escolha um tipo de gancho que não seja o mesmo da última capa (pick.py exibe). Escreva 3 ou 4 opções, de 3 a 8 palavras cada, e escolha a mais forte. Ele não deve repetir a cartela de texto inicial palavra por palavra.

3. Foto.

python3 .claude/skills/reel-covers/scripts/pick.py "<palavras do tópico>" --space top

Depois veja as 3 ou 4 principais antes de escolher (crie uma folha de contato com ffmpeg). Combine o adereço com o tópico: notebook para e-mail, sistemas ou site; câmera ou produto para equipamentos; você falando para vendas e mentalidade. Para histórias de clientes, use um inset ou avatar do cliente (com permissão).

4. Layout. Não igual ao da última capa (veja pick.py). Coloque o texto no espaço vazio da foto (space), defina focus para que o rosto fique visível e ajuste y para que o bloco de texto fique entre 300 e 1250.

5. Renderizar.

OUT="<trabalho>/covers" node .claude/skills/reel-covers/scripts/render.mjs covers.json
{"covers":[{"id":"3-o-fechamento-exato","img":"<CAMINHO_PARA_SUAS_FOTOS_DE_CAPA>/<arquivo>.jpg",
  "data":{"head":"o fechamento exato que uso em ligações de vendas","sub":"de um Cozinheiro Caseiro","y":560,"headroom":280}}],
 "history":["<últimas capas enviadas do log de capas, mais recentes primeiro>"]}

Expanda ~ para um caminho real; o render.mjs não faz isso. Uma saída diferente de zero significa um aviso, então corrija antes de compartilhar.

6. Verifique você mesmo primeiro. Abra _proof.png e _grid-phone.png:

  • O título está legível na prova do grid (130px de largura)? Se não, corte palavras.
  • O rosto está livre do texto tanto na capa completa quanto no corte do grid?
  • Ao lado das outras capas no grid, parece diferente (foto, layout, posição do texto) mas claramente do mesmo conjunto?

7. Aprovação. Mostre ao usuário _grid-phone.png e _proof.png, com cada título e uma alternativa. Pergunte: "Essas capas fazem parar a rolagem?" Troque fotos ou palavras conforme solicitado e re-renderize. Leva segundos.

8. Após a aprovação:

  • Copie cada JPG para <SUA_PASTA_DE_VIDEOS>/<Video> YYYY-MM-DD/Covers/, nomeado como o reel (3. o fechamento exato.jpg).
  • Adicione uma entrada por capa ao log de capas: {"date":"YYYY-MM-DD","video":"<slug-do-video>","reel":"3. o fechamento exato","photo":"<arquivo>","layout":"stack","hook_type":"how","head":"o fechamento exato que uso em ligações de vendas","file":"<caminho absoluto para o JPG da capa>"}
  • Passe os arquivos para a etapa de agendamento, que faz upload de cada um e o anexa à postagem do Instagram.

Regras de exclusividade

  • Nenhuma foto usada nas últimas 9 capas. O pick.py aplica isso.
  • Nunca o mesmo layout ou tipo de gancho duas vezes seguidas.
  • Alterne o subtítulo: nenhum, centralizado, ou deslocado à direita e inclinado (subdx, subrot).
  • Varie a posição do texto (superior, meio, alinhado à esquerda ou direita) com base na foto. Não o centralize sempre no topo.
  • Se a biblioteca estiver escassa (todas as boas fotos usadas recentemente), informe e sugira uma nova sessão de fotos em vez de quebrar a regra.

Lições de layout

  • O corte 9:16 coloca o rosto no alto. A maioria das fotos é 2:3. Escaladas para 1920 de altura, perdem as laterais, não o topo, então um rosto que parece baixo na original fica por volta de y 600 a 800. O erro mais comum é o texto ficar sobre o cabelo do sujeito. Verifique cada prova para isso antes de qualquer outra coisa.
  • Corrija com headroom, não diminuindo o texto. "headroom": 150-350 empurra a foto para baixo e estica a parede lisa acima do sujeito. É invisível em paredes de estúdio lisas. Não use em fundos externos movimentados (árvores e céu borram).
  • Tamanho do título: automático é 104px para 4 palavras ou menos, 84px para mais, encolhendo para caber em 3 linhas.
  • Remova o subtítulo se ele tocar a cabeça. É textura, não a mensagem.
  • Posicionar o texto pensando no ícone do reel: comece o bloco em y 560 ou mais baixo (empurre a foto para baixo com headroom para que ele limpe a cabeça), ou mantenha-o alto e use align: left, right: 320. Misture ambos em um lote.
  • Um corte de grid 3:4 não esconde nada acima de y 240. Mantenha o texto começando em 280 ou mais baixo (render.mjs avisa).

Como adicionar fotos

De uma pasta local: verifique md5 contra photos_dir para duplicatas, copie como <nome>-<k>__local<MMDD>.jpg, depois marque.

Do Canva (opcional). O Canva não baixa imagens diretamente de uma pasta de uploads. Uma rota funcional é um design rascunho usado apenas para exportações:

  1. list-folder-items em <SEU_ID_DE_PASTA_NO_CANVA>, e diferencie os ids dos assets contra library.json (mantenha o id em cada nome de arquivo após __).
  2. read-design em <SEU_ID_DE_DESIGN_RASCUNHO_NO_CANVA> com open_transaction, depois uma chamada edit-design com um add_page (2400x3600, título = id do asset) para cada nova foto. Leia os ids das novas páginas, depois uma chamada com um insert_fill por página (página inteira, top 0, left 0). commit.
  3. export-design como PDF, export_quality: pro, depois pdfimages -j -f <primeiro> -l <último> -p all.pdf ex/img. O PDF incorpora os JPEGs originais intocados. A exportação JPG também funciona, mas dá uma URL por página.
  4. Salve cada um como <nome>__<assetid>.jpg em photos_dir. Várias fotos podem compartilhar um nome no Canva, então o id as mantém separadas. Depois, marque-as.

Se a mesma foto foi enviada duas vezes, mantenha uma cópia ok e marque a outra "ok": false, "note": "duplicata de N", ou a regra de não repetição pode pegar a mesma imagem duas vezes.

Marque cada novo arquivo em library.json olhando para ele:

{"file":"photo_-13.jpg","pose":"sorrindo para o notebook","props":["notebook","mesa"],"topics":["email","seguir","sistemas","site"],
 "cap":false,"space":["top"],"focus":"50% 55%","ok":true}

space é onde o texto pode ir sem tocar o rosto. Marque fotos borradas, escuras ou estranhas como "ok":false em vez de excluí-las.

Relacionados

  • video-reels: a cartela de texto inicial, que o título da capa não deve repetir
  • uma skill de agendamento (opcional): faz upload das capas e agenda os reels

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Render finished reels out of DaVinci Resolve, write captions in the creator's voice, attach a custom Instagram cover from reel-covers, and schedule them to Instagram, TikTok and YouTube Shorts through Metricool. Handles the Drive upload hop, collision checks against the existing calendar, and cleanup. Trigger on "schedule the reels", "post these", "put these on the calendar", or after reels are approved.

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Cut vertical Instagram reels out of a long-form talking-head video, hook first. Picks the strongest standalone moments from the transcript, opens each reel on its punchiest line, builds vertical timelines in DaVinci Resolve framed on the speaker's face with the LUT applied, and finishes them: a hook (a held text card, or a word-by-word "build" hook with punch-in) and burned-look captions on V3; this-or-that reels get product graphics and a comment-keyword CTA card. You trim and render, nothing to import. Trigger on "make reels", "clip this for Instagram", "cut some verticals", or after a YouTube video is cut.

beachyphotoandfilm-arch/video-skills

Design YouTube thumbnails and titles for a talking-head video. Pulls graded full-res frames out of the raw footage, renders brand-styled variants in two proven layouts, and proofs them at phone size where the click actually gets decided. Trigger on "make thumbnails", "thumbnail for this video", "title and thumbnail", or after a video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

Habilidades Relacionadas