Communitygithub.com

Edição de Cortes (sem API)

Esta skill deve ser usada para produzir um corte vertical (1080×1920) para Reels do Instagram e TikTok, do começo ao fim e sem nenhuma API — pesquisar e baixar a fonte sem tomar bloqueio, ranquear as falas, escrever o roteiro, cortar sem comer palavra, conferir fala, áudio e imagem quadro a quadro, animar a metade de cima em papel recortado no HyperFrames e renderizar.

O que é Edição de Cortes (sem API)?

Esta skill automatiza todo o fluxo de produção de cortes verticais (1080×1920) para Reels do Instagram e TikTok, sem depender de APIs externas pagas. Ela nasceu no canal de cortes do Raul Sena e compila as melhores práticas aprendidas com erros reais. A skill suporta duas modalidades: vídeo real (para perfis institucionais) e papel recortado (para canais de opinião, com animação na metade superior). O ecossistema é composto pelo HyperFrames (edição e renderização local), Whisper local (transcrição) e alinhador forçado MMS_FA (tempo palavra a palavra). O fluxo inclui desde a pesquisa e download de fontes sem bloqueio, ranqueamento de falas, escrita de roteiro, corte preciso sem cortar palavras, conferências de áudio e vídeo, animação, sonoplastia, até a renderização final. As regras de ouro incluem: nunca cortar no meio de uma palavra, legenda contínua de 1 a 3 palavras, área de segurança para todas as plataformas, e telas cheias em momentos estratégicos. A instalação é feita uma vez por máquina com um comando que prepara todo o ambiente.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add MickaelAlecsander/edicao-de-cortes

Perguntar na sua IA favorita

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

Documentação

O que Edição de Cortes (sem API) faz?

Esta skill reúne tudo o que o canal aprendeu editando cortes: pesquisa e download, ranqueamento, roteiro, corte, conferências e animação. Cada regra veio de um erro que já foi ao ar ou quase foi. Ela roda num ambiente sem API nenhuma:

  • Editar e renderizar: o HyperFrames (npx --yes [email protected] …).
  • Ler e ouvir o áudio: o Whisper local (whisper.cpp pelo HyperFrames, ou faster-whisper).
  • Medir o tempo de cada palavra: o alinhador forçado local (MMS_FA, torchaudio) e o envelope do áudio.

Dois modos: escolher antes de começar

ModoQuandoModelo
Reels de vídeo realPerfil institucional ou de marca (ex.: @amigosdobem): a pessoa ou a ação na tela inteira, manchete, nome e função, imagens de cobertura, logo e legenda. Pouca ou nenhuma animação.assets/modelo_reels/ (ver o LEIA-ME.md dele)
Papel recortadoCanal de cortes de opinião (o do Raul): a metade de cima animada em papel, o apresentador embaixo e telas cheias de animação.assets/modelo/ e references/animacao-hyperframes.md

Na dúvida, perguntar qual dos dois. Tudo o que vem antes da animação (tema, roteiro, corte sem comer palavra, conferências de fala e de áudio, legenda, área de segurança, finalização e entrega) vale igual para os dois. No reels de vídeo real, a Etapa 3 é o montar_reels.py no lugar das cenas, e as regras de personagem, papel e telas cheias de animação não se aplicam.

Regras de ouro (valem em toda etapa)

  1. Sem API. Nada de chave da OpenAI ou de qualquer serviço pago. O Whisper local dá o TEXTO. O tempo fino vem do alinhador MMS_FA e da pausa real no envelope (scripts/pausas.py). O Whisper não é prova de tempo: no C29, o large-v3 pôs palavras até 1,4 s fora do lugar, e cada erro virou uma ponta errada.
  2. Aprovação antes de avançar. Roteiro aprovado → edição → animação → prévia. Nada é agendado ou publicado sem o "pode agendar" do dono do canal. Quando ele pedir "faz até o final", as aprovações do meio se juntam numa só: a da prévia.
  3. Nunca cortar no meio de uma palavra. A ponta é sempre um vale de energia abaixo de −40 dB, antes da palavra SEGUINTE. Toda emenda é ouvida de novo depois de montada (scripts/ouvir_emendas.py).
  4. O Raul inteiro, centrado, sem zoom e nunca travado. A imagem é sempre a do mesmo instante do áudio; em podcast, ela fica em quem está no raciocínio, e quem fala se marca em todo corte com 2 pessoas. Cabeça nunca cortada. Na tela dividida da fonte, o painel dele preenche a janela de baixo; nada de laterais desfocadas. Não pode haver quadro parado com fala. Foto ou gráfico em tela inteira na fonte vai para debaixo de uma TELA CHEIA da animação.
  5. A legenda fica do começo ao fim, de 1 a 3 palavras, com palavrão censurado (F**A).
  6. Área de segurança sempre. Nada embaixo da busca do TikTok, nada saindo pelas laterais, nada embaixo dos botões ou do texto do post. scripts/zona_segura.mjs precisa dar ✓ antes de todo render.
  7. Tela cheia: 3 vezes de 5 s ou mais em vídeo de até 2 min, 4 vezes acima de 2 min. A 1ª vem logo após o gancho.
  8. A melhor faixa de áudio (o Opus do YouTube), um mínimo de recompressão e a saída em −14 LUFS. O efeito sonoro fica sempre por baixo da fala.
  9. Download espaçado. Um pedido por vez, nunca em rajada, com folga entre eles (scripts/baixar.py já faz isso). Um IP marcado com 429 só volta com tempo. O cliente web_safari,mweb serve só para LISTAR vídeos e ler os dados deles (título, idioma, canal). Com ele a legenda some ("has no subtitles" em todo vídeo) e a resolução vem falsa (360p), então legenda e mídia vão no cliente padrão.
  10. Nunca apagar de vez. O que sai vai para _lixeira/, e quem esvazia é o dono do canal. Nunca digitar senha nem token: o login é sempre a própria pessoa quem faz.

Instalação (uma vez por máquina)

O jeito mais fácil: o comando de um passo do README (instalar.ps1 no Windows, instalar.sh no Mac) instala os programas que faltam, baixa a skill e roda o scripts/instalar.py.

O Python dos scripts: se existir o arquivo .python na pasta da skill, todo python dos comandos desta skill é o caminho escrito nele (ex.: ~/.venv-cortes/bin/python). O instalador cria esse ambiente quando o Python do sistema recusa o pip (PEP 668: o do Homebrew no Mac, o do Debian/Ubuntu).

python scripts/instalar.py (com o Python 3.11+) prepara a máquina numa rodada só. No fim, ele diz "✓ pronto para editar" ou lista o que faltou. Ele faz cinco coisas:

  1. Confere o Python, o ffmpeg e o ffprobe, o Node 18+ com o npx e o Chrome. O que não sai por pip ou npm, ele diz como instalar no seu sistema.
  2. Faz o pip install só do que falta (faster-whisper, torch e torchaudio de CPU, numpy, scipy, soundfile, opencv, yt-dlp). O que já está instalado não é atualizado nem rebaixado.
  3. Faz o npm install playwright-core em scripts/, que é de onde o zona_segura.mjs e o erros_js.mjs o importam.
  4. Baixa o Whisper large-v3 (~3 GB) e o MMS_FA (~1,2 GB) e aquece o npx --yes [email protected] e o Chrome do render.
  5. Faz o autoteste: o --help de 3 scripts, o node --check dos .mjs e o assets/modelo/ montado numa pasta temporária.

Ele tem três opções:

  • --so-conferir: só confere e não instala nada.

  • --sem-modelos: pula os modelos.

  • --modelo-whisper medium: para máquina fraca. Depois, passe --modelo medium ao transcrever_local.py.

  • Whisper do HyperFrames (opcional): npx --yes [email protected] transcribe <arquivo> -e whisper -m large-v3 -l pt --json. Ele precisa do whisper-cpp, e o npx --yes [email protected] doctor diz se ele está instalado.

  • O que precisa de internet (o resto roda offline):

    • baixar as fontes (yt-dlp);
    • na 1ª vez, os modelos (o Whisper large-v3 e o MMS_FA) e o Chrome do render; o instalador já baixa os três;
    • o GSAP do CDN, em todo render;
    • as fontes do Google Fonts, na 1ª montagem (depois ficam guardadas em ~/.cache/hyperframes/fonts).
  • Testar a máquina a qualquer hora: python scripts/instalar.py --so-conferir.

Estrutura do projeto

<projeto>/
  _fontes/            vídeos e áudios baixados (o <id>_opus.mkv é a fonte do corte)
  _pesquisa/          legendas, transcrições (<id>_palavras.json), radar e notas
  _lixeira/           o que sai (fontes depois de publicadas etc.)
  cortes/cNN-slug/    um corte: ROTEIRO.md, cortes_gerar.py, cortes.json, pos_cortar.py, _cenas.js, montar.py,
                      gera_som.py, som.json, capa/, post.json, assets/ (raul.mp4, raul.wav, tempos.json, dados.js),
                      renders/ (etapa3_bruto.mp4, etapa3.mp4, cNN_previa.mp4, cNN_capa.jpg)
  LOG_CORTES.md       uma entrada por corte (id da fonte, o que foi ao ar, o que o dono decidiu) e as "Lições acumuladas";
                      sem ele, o ranking_shorts.py não tira nenhum id já usado
  REGUA.md            as correções do dono à régua (ler antes de dar nota); RADAR.md é gerado pelo nota_viral.py

O fluxo de um corte

Ler a referência da etapa ANTES de começá-la. Cada uma tem as regras completas e o porquê de cada uma.

EtapaO que fazerReferênciaScripts
0 · TemaAchar candidatos, ranquear falas e shorts, dar a nota da régua, escolher pelo placarreferences/ranqueamento.mdnota_viral.py, ranking_shorts.py, analise_shorts.py, acha_frase.py
1 · FonteListar, ler a legenda, baixar a melhor faixa sem tomar bloqueioreferences/pesquisa-e-download.mdbaixar.py, vtt2txt.py
1 · RoteiroTranscrever o trecho, montar o raciocínio completo, entregar para ✋references/roteiro.mdtranscrever_local.py
2 · CorteMedir as pontas, achar as trocas de câmera, cortar, realinhar, legendarreferences/corte-e-fala.mdpausas.py, trocas.py, cortar.py, alinhar.py, legendas.py, borrar_regiao.py, reenquadrar.py
2 · ConferirOuvir as emendas, olhar quadro a quadroreferences/conferencias.mdouvir_emendas.py, conferir_fins.py, folha_contato.py, travada.py
3 · AnimaçãoRoteiro da animação, cenas, telas cheias, área de segurançareferences/animacao-hyperframes.mdassets/modelo/, roteirista.py, marca.py, zona_segura.mjs, erros_js.mjs
3 · Reels de vídeo realManchete, nome e função, coberturas, logo, cores da marca (no lugar da animação)assets/modelo_reels/LEIA-ME.mdmontar_reels.py, zona_segura.mjs, erros_js.mjs
3 · SomDeixas na palavra da cena, sonoplastia por baixo da falareferences/audio.mdsonoplastia.py (+ assets/foley/)
4 · RenderRender, mux, finalizar, conferir o pronto e mandar a préviareferences/conferencias.mdfinalizar.py, folha_contato.py

Comandos, na ordem (da pasta cortes/cNN-slug/; $S = pasta scripts/ desta skill)

Começar copiando assets/modelo/ para cortes/cNN-slug/ (ver assets/modelo/LEIA-ME.md): ele traz o cortes_gerar.py, o pos_cortar.py, o montar.py, o gera_som.py, a capa e o post.json para preencher. Se a skill não estiver em ~/.claude/skills/edicao-de-cortes, definir EDICAO_CORTES=<pasta da skill>.

python $S/pausas.py <fonte> --palavras <palavras.json> <t:antes:depois> ... --perfil   # cada ponta, antes de escrever
python $S/trocas.py <fonte> --de <s> --ate <s>   # trocas de câmera e de layout no trecho
python cortes_gerar.py                       # escreve o cortes.json (blocos, janelas, recortes, trocas)
python $S/cortar.py .                        # monta assets/raul.mp4, raul.wav e tempos.json (barra ponta em fala)
python pos_cortar.py                         # TEXTO do roteiro realinhado pelo MMS_FA (palavra a palavra)
python $S/legendas.py .                      # assets/dados.js: a legenda em blocos de 1 a 3 palavras
python $S/ouvir_emendas.py .                 # cada emenda no Whisper local + envelope
python $S/conferir_fins.py .                 # as pontas de cada bloco
python $S/folha_contato.py assets/raul.mp4 --cada 2   # o Raul inteiro e a pessoa certa em cada quadro
# (✋2, se o dono pedir: ver o fim de references/corte-e-fala.md) · aqui, pedir o esforço extra antes de animar
python $S/roteirista.py batidas .            # batidas.md: frases, âncoras T() com o n certo, alusões a pessoas
python montar.py                             # index.html (animação + Raul + legenda + marca)
python gera_som.py && python $S/sonoplastia.py .   # trilha de efeitos; no fim confere JS e área de segurança
npx --yes [email protected] render . --fps 24 -q standard -w 6 -o renders/etapa3_bruto.mp4
python $S/sonoplastia.py . --mux             # som sem perda na imagem do render
python $S/finalizar.py .                     # −14 LUFS, travada, prévia de 720p
python $S/folha_contato.py renders/etapa3.mp4 --cada 3   # olhar o vídeo pronto antes de mandar

Como entregar

  • Roteiro: no formato de references/roteiro.md: linha da história, blocos com o texto completo e a cena de cada um, telas cheias, capa, autocrítica com nota e, no fim, a lista do que fica de fora.
  • Prévia: a prévia de 720p e a capa, com o resumo do vídeo:
    • as telas cheias;
    • o que foi conferido (área de segurança, travada, loudness);
    • o que foi corrigido depois do 1º render;
    • a legenda do post. Depois, esperar o "pode agendar". O pedido explícito de deixar agendado ("quero pronto, tudo perfeito, agendado") já vale como o "pode agendar" daqueles vídeos.
  • Legenda do post (post.json): informação útil com o crédito ao apresentador ("Para o Raul Sena, …"), até ~430 caracteres (no TikTok, a de ~600 perdeu o começo no campo em 3 tentativas; as de 421 e 426 entraram), sem travessão nem aspa angular e com palavrão censurado. No fim, as hashtags: as 2 da marca, de 3 a 5 do tema do jeito que as pessoas buscam e de 1 a 2 gerais, sem acento nem espaço. O trecho do post.json é o começo da legenda: ele acha o post no Studio.
  • Três redes no mesmo horário: o "pode agendar" do TikTok vale para o Instagram e o Facebook no MESMO horário, sem pedir de novo. Depois do horário, conferir que o post saiu nas três (no C80 e no C83 o Instagram falhou por bloqueio da conta).
  • Folga no TikTok: conta nova passa todo post pela revisão ("Conteúdo sob análise", até 12 h). Agendar com 2 h ou mais de folga, nunca a menos de 20 min do horário.
  • Decisão visual (layout, estilo, capa): mandar as opções em IMAGEM para o dono escolher.
  • Depois de mexer em código ou ferramenta: o resumo vem completo: o que mudou, por quê, o que ficou de fora e o que falta fazer.

Instagram (Reels)

O mesmo vídeo serve para o Reels e para o TikTok. No Instagram:

  • Subir o arquivo renderizado (renders/etapa3.mp4), nunca um vídeo baixado do TikTok: o Instagram diminui o alcance de vídeo reciclado com marca d'água.
  • A legenda do post aceita até 2.200 caracteres, mas só a 1ª linha aparece antes do "mais": ela precisa ser o gancho. Hashtags: de 3 a 5 do tema, mais as da marca (o Instagram recomenda poucas e relevantes).
  • A capa aparece na grade do perfil no recorte 3:4 do centro: o rosto e a manchete inteiros dentro dele (a capa do modelo já é feita assim). No app, ela entra em "Editar capa" → "Adicionar da galeria".
  • A área de segurança do zona_segura.mjs (busca em cima, botões à direita, texto do post embaixo) vale para os dois. No 1º post, olhar um print do Reels publicado em cada tela cheia e, se a interface cobrir algo, ajustar os limites.
  • Duração: de 1 a 2 min (o Reels aceita até 3).
  • Os números da régua e da grade (horários, pesos, limites de views) foram medidos no TikTok deste canal: no Instagram, recomeçar o placar com os próprios dados.

Outro canal

A skill nasceu no canal de cortes do Raul Sena e os exemplos são dele. Para usar com outro apresentador ou outra marca, trocar:

  • A marca: CONTA e o avatar no

…

[restante do conteúdo foi truncado, mas a skill continua com mais seções como 'Outro canal' e detalhes de personalização. Para a tradução completa, favor fornecer o restante do markdown original.]

Habilidades Relacionadas