Communitygithub.com

beachyphotoandfilm-arch/video-skills

Crie miniaturas e títulos para vídeos com cabeça falante. Extrai frames graduados em resolução total do material bruto, renderiza variantes no estilo da marca em dois layouts comprovados e as prova no tamanho de celular, onde o clique realmente é decidido. Ative com "criar miniaturas", "miniatura para este vídeo", "título e miniatura" ou após o corte de um vídeo.

O que é video-skills?

Este skill automatiza a criação de miniaturas e títulos atrativos para YouTube, especificamente para vídeos do tipo "cabeça falante". Ele extrai frames de alta qualidade diretamente do material bruto em 4K (não de exportações), aplica uma LUT de correção de cor e gera variantes de miniatura em dois layouts otimizados: "full-bleed" (imagem ocupando toda a tela) e "painel" (sujeito em um painel quadrado à direita). O processo segue regras baseadas em pesquisas de desempenho, como usar de 3 a 5 palavras, garantir que o rosto do apresentador seja o elemento dominante e testar as miniaturas no tamanho de ~210px (simulando a visualização em celular). O skill é acionado por comandos como "make thumbnails" ou "thumbnail for this video", e requer o Puppeteer para renderização headless via Chrome. Ele é parte de um pipeline maior que inclui skills de edição de papel e sobreposições de vídeo.

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

Perguntar na sua IA favorita

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

Documentação

Miniaturas e títulos

Defina sua marca aqui

Edite o bloco :root no início de scripts/layout-fullbleed.html e scripts/layout-panel.html:

ConfiguraçãoVariável CSSPadrão
cor de destaque--brand-accent (+ --brand-accent-rgb como r,g,b)#4a90e2
cor do texto claro--brand-light#f2f2f2
cor da tinta escura (traço, fundo do painel)--brand-ink#0d131a
fonte de exibição (texto grande)--font-display'Anton','Bebas Neue',Impact,sans-serif
fonte do corpo (texto pequeno)--font-body'Inter',sans-serif

A fonte de exibição deve estar instalada localmente, pois a renderização ocorre no Chrome headless a partir de file://. Anton e Bebas Neue são gratuitas no Google Fonts.

Defina também sua LUT de correção de cor em scripts/frames.sh (LUT_DEFAULT), ou passe LUT=/path/to.cube por execução.

Padrões de estilo (ajuste a gosto)

  1. Nunca coloque nada sobre o rosto. Sem gradiente de vinheta sobre o assunto. Ou um painel com bordas nítidas com o rosto totalmente livre, ou imagem total com texto em espaço vazio.
  2. Extraia frames do RAW 4K, não de uma exportação. Frames de exportação 1080p parecem borrados.
  3. Graduação do frame primeiro. Material em Log (S-Log3 etc.) é plano e cinza sem graduação. Aplique a LUT com lut3d (veja frames.sh). Pule a LUT se a câmera gravar um perfil finalizado.

Regras que vieram da pesquisa

  • Três a cinco palavras, e menos é melhor. A miniatura não é onde o vídeo é explicado.
  • Um rosto vence. A maioria dos vídeos de sucesso usa um. Expressão forte supera uma neutra.
  • Um assunto dominante, duas ou três cores, alto contraste.
  • Avalie a ~210px. A maioria das decisões de visualização acontece no celular. Se não funcionar lá, nada mais importa.
  • Título e miniatura não devem se repetir. Duas metades de uma ideia. Mantenha os títulos curtos e específicos (aproximadamente 50-60 caracteres para não serem truncados).
  • Testes A/B no YouTube Studio são melhores do que discutir, então dê ao usuário 2-3 opções reais.

Qual layout

Full-bleed vence no tamanho de celular e é o padrão. Lado a lado a 210px, o rosto aparece cerca de duas vezes maior do que na versão com painel, e as sublinhas do painel desaparecem completamente.

  • layout-fullbleed.html: frame graduado de ponta a ponta, 1-3 palavras na fonte de exibição com traço de tinta pesado, colocado em espaço vazio (parede, porta) e nunca sobre o rosto. Predefinições stab, stat, bottom, band (uma faixa sólida de destaque na parte inferior). Exemplos de variantes legadas e, f, g, h.
  • layout-panel.html: assunto em um painel quadrado limpo à direita, texto em uma metade escura à esquerda. Use quando a ideia precisar de um diagrama (a grade de pontos) ou duas linhas de texto. Exemplos de variantes a-d.

Execute

# 1. frames graduados a partir do raw, em momentos expressivos (use a transcrição para encontrá-los)
bash <skill>/scripts/frames.sh "<SEU_DISCO_DE_MIDIA>/<pasta>/C0001.MP4" "<trabalho>" 178 310 459 503

# 2. observe-os antes de escolher - uma folha de contato vence o palpite
ffmpeg -i hi-*.jpg -filter_complex hstack=... contact.jpg

# 3. renderize variantes + a folha de prova em tamanho de celular
WORK=<trabalho> OUT=<saida> node <skill>/scripts/render.mjs variants.json

variants.json:

[{"id":"E-no-time","layout":"fullbleed","v":"e","img":"full-C0001-503.jpg"},
 {"id":"S-custom","layout":"fullbleed","img":"full-C0001-310.jpg",
  "data":{"preset":"stab","head":"OCUPADO?","kicker":"TENTE ISSO"}},
 {"id":"B-3x","layout":"panel","v":"b","img":"cut-C0001-97.jpg"}]

O texto em full-bleed pode ser passado por variante como data (preset, head, kicker, side, size), ou adicionado como um novo bloco v legado no HTML do layout. O texto do painel vive nos blocos v de layout-panel.html; adicione uma nova variante adicionando um bloco, mantendo 3 palavras.

Requer puppeteer-core: reutilize ../video-overlays/scripts/node_modules ou npm i no diretório de scripts. render.mjs inicia /Applications/Google Chrome.app/...; altere o caminho em outros sistemas.

Escolhendo o frame

Procure por sobrancelhas levantadas, uma mão aberta, boca no meio da palavra. Use a transcrição para encontrar um momento com energia, então extraia um frame um segundo depois. Frames com olhos mortos estragam tudo. Os recortes em frames.sh assumem uma fonte 4K (3840x2160) com o assunto ocupando cerca de 46% da largura do frame; ajuste os deslocamentos crop= se seu enquadramento for diferente.

Saída

Renderize em 1920x1080 (o YouTube faz o downsampling de forma limpa), mantenha abaixo de 2MB.

Relacionados

  • paper-edit, video-overlays: o resto do pipeline de vídeo

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

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

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

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