Communitygithub.com

editar-reel

Edita reels do usuário (vídeos verticais falando para câmera para Instagram) seguindo um fluxo aprovado: transcrição local com Whisper, remoção de pausas/muletadas/tomadas repetidas, gancho em maiúsculas, títulos com gráfico animado a cada 2–3 s, logotipos reais de marcas, legendas de uma linha, efeitos sonoros calibrados, voz em -14 LUFS e render com HyperFrames.

O que é editar-reel?

Esta habilidade automatiza a edição profissional de reels do Instagram – vídeos verticais com o usuário falando diretamente para a câmera – usando um fluxo aprovado e reprodutível. Ela realiza transcrição local com faster-whisper, remove pausas (≥0,2 s), muletas e tomadas repetidas, e estrutura o conteúdo em blocos com gancho em maiúsculas (0–2 s), títulos a cada 2–3 s com gráficos animados e legendas de uma linha. Integra logotipos reais de ferramentas/marcas mencionadas, aplica efeitos sonoros calibrados (volume de cada efeito vs. voz), normaliza o áudio em -14 LUFS e renderiza com a CLI HyperFrames. Suporta os estilos 'Tarjeta' (padrão), 'Frases' e 'Cine', todos com cena de encerramento do logotipo da marca do usuário. Inclui controle de qualidade rigoroso: snapshots de cada bloco, verificação de contraste, layout, cortes de texto, e comparação com 'ouro' (reels aprovados anteriormente). O perfil do usuário (nome, marca, logo, pasta de clipes) é armazenado em `~/.claude/skills/editar-reel/perfil.json`. A habilidade é ativada sempre que o usuário pedir para editar, montar, cortar, legendar ou 'deixar pronto' um reel, clipe do CapCut ou vídeo vertical seu.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Alexandrevnc/editar-reel/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

Editar um reel

Este é o fluxo já aprovado com o reel do WhatsApp (references/ejemplo-whatsapp.reel.json). O objetivo é que o próximo reel saia igual sem que eu tenha que explicar novamente: mesmo estilo, mesmos critérios, mesmas verificações. Fale com ele em português e sem jargão técnico desnecessário.

Antes de tudo: perfil e instalação

Leia ~/.claude/skills/editar-reel/perfil.json (nome do usuário, sua marca, o logo do encerramento e onde ele guarda os clipes). Chame-o pelo nome e use a pasta de clipes dele na etapa 1. Se perfil.json não existir, ou faltar alguma ferramenta do ambiente, é a primeira vez neste Mac: siga INSTALAR.md (instalar tudo e criar o perfil) antes de editar qualquer coisa.

Ambiente (deixado pronto por install.sh, veja INSTALAR.md)

  • HyperFrames CLI: ~/.npm-global/bin/hyperframes (telemetria desativada). Exporte sempre PATH="$HOME/.npm-global/bin:$PATH" HYPERFRAMES_NO_TELEMETRY=1 HYPERFRAMES_SKIP_SKILLS=1; o shell do Claude não carrega ~/.zshrc.
  • faster-whisper: ~/.venvs/whisper/bin/python (com av<16; a nova versão do PyAV quebra o faster-whisper).
  • FFmpeg em /opt/homebrew/bin. O python3 do sistema (3.9) serve para os scripts sem numpy.
  • Biblioteca de efeitos sonoros: ~/Movies/Reels/_sfx/. Os 13 originais (whoosh_1/2, pop_1/2, tick, ding, message, counter, typing, clock, slide, hit, riser) tocam sozinhos com os gráficos; estilo "sons da Apple": curtos, limpos, suaves. Há ~45 mais (impactos, whooshes, caixa registradora, cliques, iPhone…) para usar manualmente: catálogo e quando usar cada um em references/sfx.md.
  • Scripts desta skill: SK=~/.claude/skills/editar-reel/scripts.
  • Logo do encerramento: o de perfil.json (cierre). O da vinagre.tech, vetorizado, está em assets/vinagre-tech/; o de outra marca fica em assets/marca/ (veja INSTALAR.md).

Estilos

O usuário pede os reels por estilo ("edite com o estilo 2"). Se não disser nenhum, use o estilo 1. Todos compartilham o fluxo abaixo (transcrever, cortar, QA, sons, master); muda a etapa 5–6. Todos terminam com o encerramento do logo da sua marca (o de perfil.json; 1,6 s, fundo branco, scripts/outro.py): o vídeo nunca acaba de repente. Sai por padrão (exceto se "cierre": null no perfil); "outro": null em reel.json o remove, "outro": {"bg": "#000"} o altera.

EstiloO que éScriptReferência
1 · CartãoTítulo com gráfico em cartão escuro no topo a cada 2–3 s + legenda pequena de uma linha embaixo.build.pyreferences/ejemplo-whatsapp.reel.json
2 · FrasesFrase grande embaixo em branco (o que vem, translúcido), palavra-chave em pílula, ícones em linha e flutuantes, poucos cartões brancos e planos de gráfico em tela cheia.build_frases.pyreferences/estilo-frases.md
3 · CinemaClipe horizontal em faixa de cinema 16:9 sobre preto (faixas limpas), cor quente, zoom lento, legendas pequenas em minúsculas dos dois lados do rosto, palavra final grande em maiúsculas. Para vídeos próximos ou emotivos.cut_cine.py + build_cine.pyreferences/estilo-cine.md

Movimento v2 (aprovado em 02-11-2026, padrão no estilo 1): regras de references/motion-regras.md (títulos que rolam, números que rolam dígito a dígito, gráficos que chegam inteiros). Reels feitos antes carregam "anim": 1 em seu reel.json para que um retoque não mude o movimento que já foi aprovado.

Os estilos 1 e 2 podem ter também planos motion em tela cheia (terminal do Mac, grade de pontos com um número, órbita de cartões), em "motion" de reel.json: leia references/motion.md para saber quando e como.

Quando o usuário pedir mudanças em um estilo e as aprovar, salve-as no script e na ficha desse estilo. Se ele quiser algo novo, crie um estilo novo (4, 5…) em vez de mudar um aprovado. Faça primeiro uma amostra de ~10 s ("sample_end" em reel.json, estilos 2 e 3) antes de montar o reel inteiro.

Estrutura de cada reel

~/Movies/Reels/<nome-curto>/
  reel.json            o próprio deste reel (você escreve; formato em references/reel-json.md)
  work/                transcrições, cortes, quadros de QA, render intermediário
  projeto/            projeto HyperFrames (index.html gerado + assets/)
  reel-<nome>.mp4    o entregável
  portada-<nome>.jpg a capa para Instagram (etapa 8b)

Fluxo

1. Localizar o clipe

Geralmente está na pasta clips de perfil.json (padrão ~/Movies/CapCut/) ou em suas subpastas. Se houver mais de um candidato e não estiver claro qual é, pergunte com opções (nome, duração, data); editar o errado custa muito tempo. Verifique com ffprobe resolução, fps e duração.

2. Transcrever

mkdir -p ~/Movies/Reels/<n>/work
~/.venvs/whisper/bin/python -I $SK/transcribe.py "<clip>" ~/Movies/Reels/<n>/work medium pt

Cria src.words.json (palavras com tempos), fillers.txt (passada que força Whisper a escrever "eh", "hmm", "tipo"; normalmente ele as ignora) e silences.json. Leia as três coisas.

3. Decidir o que remover (critério seu)

  • Tomadas repetidas: se ele repetir uma frase ou começar e cortar, fique com a última tomada e remova as anteriores.
  • Muletas: as que aparecerem em fillers.txt e não na versão limpa.
  • Silêncios: não precisa marcá-los; cut.py remove os ≥0,2 s deixando 0,07 s de ar de cada lado. Anote os intervalos (tempo original) em remove de reel.json, junto com source. Se não houver nada, coloque "remove": [] e diga ("não havia muletas nem tomadas repetidas", se for o caso: você verificou, não assuma).
cd ~/Movies/Reels/<n> && hyperframes init projeto --example blank --resolution portrait --non-interactive
python3 -I $SK/cut.py ~/Movies/Reels/<n>

Cria o projeto HyperFrames (antes de cortar: init precisa que a pasta projeto não exista) e depois corta, gera 1080×1920 a 30 fps e deixa a voz a -14 LUFS em projeto/assets/cut_norm.mp4; as palavras com tempos novos ficam em work/cut.words.json.

4. Olhar o enquadramento

Extraia uma tira de quadros (ffmpeg -i projeto/assets/cut_norm.mp4 -vf "fps=1/5,scale=270:-1,tile=6x1" -frames:v 1 work/contact.png) e localize o rosto: no reel de referência ele ia de ~520 a ~1160 px na vertical, com parede livre à direita. O título vai acima da cabeça (cartão de 170 a 430 px), as legendas sobre a camiseta abaixo do microfone de lapela, o logo da introdução na parede junto à cabeça. Se este clipe tiver outro enquadramento, ajuste layout e a posição de logos em reel.json.

5. Escrever o conteúdo em reel.json

Leia references/reel-json.md e references/graficos.md. O que está decidido:

  • Gancho (0–2 s): duas linhas grandes em MAIÚSCULAS, caixas amarelas com texto preto. Uma pergunta ou afirmação que resuma a dor que o vídeo apresenta, não uma frase literal. Visível desde o primeiro quadro.
  • Títulos: 2–5 palavras, mudam a cada 2–3 s, resumem o que ele diz naquele trecho, cada um com seu gráfico animado.
  • Logos: cada vez que ele nomear uma ferramenta ou marca, o logo real (Simple Icons; se não existir, o SVG oficial do kit de imprensa dela em projeto/assets/logos/<slug>.svg). Nunca um logo inventado ou aproximado.
  • Legendas: pequenas, uma linha, embaixo, palavra ativa na cor de destaque. Corrija em fixes os erros do Whisper que você notar (nomes próprios, "um gente" → "um agente", etc.).
  • Planos motion (opcional, um ou dois por reel): quando ele disser que pede algo ao Claude ou explicar passos de uma automação → terminal; quando soltar um número → dots; quando fizer a conta do que ganha ou perde por ano → months; "olha tudo que montei" → orbit; clientes escrevem ou chegam mensagens → notify; ele diz um número de receita ou resultados → chart. Eles são desejados: dão respiro ao vídeo (ofereça um se não houver). Veja references/motion.md. Proponha-os apenas se contarem o que ele diz; se tiver dúvida, pergunte.
  • Chamada final: se ele pedir para escrever uma palavra ou nomear a marca, último bloco com "graphic": "logo" e um ding em sfx_extra exatamente quando ele disser essa palavra.
  • Sons literais (opcional): quando ele disser algo com um som próprio (dinheiro → cash, soltar o celular → iphone_lock, escrever uma mensagem → phone_typing), adicione em sfx_extra nessa palavra. Leia references/sfx.md; um ou dois a cada 10 s no máximo, e memes apenas se ele pedir.

6. Preparar sons e gerar a composição

python3 -I $SK/prep_sfx.py ~/Movies/Reels/_sfx ~/Movies/Reels/<n>/projeto/assets/sfx
python3 -I $SK/build.py ~/Movies/Reels/<n>
cd ~/Movies/Reels/<n>/projeto && hyperframes lint

prep_sfx remove o silêncio inicial de cada som (senão ele toca atrasado em relação à animação), corta os longos com fade e os equaliza a -3 dBFS de pico. O riser é cortado para terminar em seu ponto alto (0,2–2,0 s do arquivo atual); se o arquivo mudar, veja sua envoltória e ajuste SPEC. Em lint são esperados e ignorados: nested_structure_needs_subcomposition e timeline_track_too_dense. Qualquer erro, ou um aviso de outro tipo, deve ser corrigido.

7. Controle de qualidade de quadros (antes de renderizar, sempre)

Extraia um quadro de cada bloco, no meio do bloco quando a animação já tiver terminado:

hyperframes snapshot --at <gancho≈1.0>,<cada bloco: start+1.3>,... --no-end --describe false -o ../qa

Monte-os em uma folha (ffmpeg -pattern_type glob -i 'qa/frame-*.png' -vf "scale=360:-1,tile=6x2" ...), olhe-os e amplie as áreas duvidosas (recortes em tamanho real do cartão e das legendas). Procure e corrija:

  • texto cortado ou saindo do cartão / uma palavra sozinha em uma linha;
  • algo sobre o rosto (em qualquer bloco, também com o zoom de 1,08 dos cortes);
  • pouco contraste (texto claro sobre parede branca → precisa de fundo escuro);
  • legendas tampando o microfone de lapela ou o logo da camiseta de forma feia;
  • um gráfico que não se entenda ou pareça estranho (aconteceu com o primeiro head: foi refeito). Repita o snapshot a cada correção. Mãos passando na frente das legendas não podem ser evitadas; não é um defeito.

Comparar com o ouro. references/oro/ tem a folha de 12 quadros dos reels aprovados de cada estilo (estilo1-whatsapp, estilo1-18k, estilo2-fras, estilo3-reto40). Após o render (etapa 8) extraia a do novo reel com python3 -I $SK/hoja.py <reel>.mp4 work/hoja.png, coloque ao lado da do seu estilo e responda: qual das duas está mais vazia, mais plana ou com os gráficos menores? Se for a nova, isso é o primeiro a ser corrigido. Quando o usuário aprovar um reel que pareça melhor que o ouro do seu estilo, adicione a folha dele a references/oro/.

8. Renderizar, verificar o áudio e masterizar

hyperframes render --fps 30 -o ../work/render_mix.mp4
~/.venvs/whisper/bin/python -I $SK/measure_sfx.py ~/Movies/Reels/<n> ~/Movies/Reels/<n>/work/render_mix.mp4
python3 -I $SK/master.py ~/Movies/Reels/<n>/work/render_mix.mp4 ~/Movies/Reels/<n>/reel-<n>.mp4
  • measure_sfx informa o volume de cada efeito em relação à voz. Objetivo: golpe -6 dB, ding -8, message ≈-8, pop/whoosh/slide -11 a -13, tick -14, relógio/contador/riser -16, teclado -18 a -20. Se algum desviar mais de 2 dB (por exemplo, porque um arquivo de _sfx mudou), corrija com sfx_vol e renderize novamente. Um efeito soar mais alto que a voz é o erro grave: ele abafa o que é dito.
  • master.py leva o reel a -14 LUFS (pico -1,5 dB) copiando o vídeo sem alterá-lo. É necessário porque o mixer do HyperFrames reduz o mix em ~1,8 dB, deixando-o em ~-16 LUFS.
  • Verifique o entregável: 1080×1920, 30 fps, duração esperada, -14 LUFS.

8b. Capa

python3 -I $SK/cover.py ~/Movies/Reels/<n>

Quadro limpo do vídeo com o gancho em caixas amarelas, centralizado na faixa que o Instagram mostra na grade do perfil (3:4), para que no feed se leia sobre o que é cada vídeo. Gera portada-<n>.jpg e work/portada-feed.png (como ficará recortada). Vai com o título no centro (decidido em 02-11-2026, mesmo que cubra parte do rosto; no vídeo o gancho continua no topo, acima da cabeça). Olhe-a: o quadro ("cover": {"at"}) precisa ter boa expressão e nada cortado. "cover": {"y"} ou python3 -I $SK/cover.py <reel> 560 apenas se ele pedir outra altura. O usuário a envia ao publicar em "Editar capa → Adicionar do rolo da câmera".

9. Entregar

Diga a ele onde estão o .mp4 e a capa, e resuma em poucas linhas: quanto foi cortado (de X s para Y s e o que foi removido), o gancho, os títulos (ou os mais representativos), quais logos aparecem, quais correções de legenda você fez e o que corrigiu no controle de qualidade. Se algo for uma decisão sua discutível (por exemplo, o gancho é um resumo, não uma frase literal), diga e ofereça mudar.

10. Limpar (apenas quando o usuário aprovar o reel)

Cada reel deixa ~150 MB de intermediários e o disco geralmente está cheio. Quando ele confirmar que o reel está bom (não antes: enquanto ele retoca, você precisa deles), mova para a Lixeira (~/.Trash/reel-<n>-intermedios-<data>/, nunca rm: assim ele pode recuperá-los) tudo o que for regenerável: work/*.mp4, work/*.mov, work/*.png, qa/, versões descartadas do reel, quaisquer assets/*.mp4 que index.html não usa mais e os assets/sfx/*.wav que index.html não nomeia (prep_sfx copia toda a biblioteca, ~15 MB; se um retoque precisar de outro som, ele é executado novamente). Conserve reel.json, work/*.json, projeto/ (com assets/cut_norm.mp4 e sfx/) e o .mp4 final: com isso dá para retocar sem precisar cortar novamente. Diga a ele quanto ocupou o que foi movido e que o espaço é liberado ao esvaziar a Lixeira. Se cut_norm.mp4 faltar ao retocar, cut.py o regenera a partir do clipe original (se ele ainda estiver no CapCut).

Música

Não coloque música no vídeo. O usuário adiciona a música ao publicar no Instagram.

Habilidades Relacionadas