Editor de vídeo
Uma skill, três partes. Leia este arquivo, depois as regras do motor e o preset que se encaixa, antes de tocar no material.
| Parte | Leia | O que contém |
|---|---|---|
| Motor | engine/ENGINE.md, engine/helpers/ | transcrição (Scribe), takes_packed.md, a EDL, render.py, grade.py, timeline_view.py, as 12 Regras Rígidas, o ciclo pedir → confirmar → executar → autoavaliação. Adaptado de browser-use/video-use (MIT). |
| Preset Instagram | presets/instagram/PRESET.md | vertical 1080x1920: zonas seguras, ritmo de Reel, estilos de legenda (scripts/ig-captions.py), fontes de título (assets/fonts/), regras de correção de cor, regras de som gratuito |
| Preset YouTube | presets/youtube/PRESET.md | 16:9 / 4K: o estágio de corte (corte de papel, apertar, corte fino, auditoria de borda, ar morto), o compositor HyperFrames e sua biblioteca de ~40 formatos, câmera, som, B-roll, Tella, montagem, verificação. Adaptado do kit youtube-edit da WeAreNoCode; opcional, não incluído (presets/youtube/README.md). Se PRESET.md estiver faltando, use as regras de corte do próprio motor. |
| Compartilhado | shared/ | luts/ (Cine_TealOrange, Cine_Film, Cine_Moody, AppleLog_to_Rec709, AppleLog_Cine_*; make_luts.py os reconstrói), sfx/ (seus efeitos sonoros, -3 dBFS, manifest.json), music/ (suas faixas), tools/ (build-manifest.py, ferramentas de corte), img/ |
Os scripts vêm primeiro: quando o usuário ainda não tem um script, ou pede ganchos, ideias ou uma legenda, use a skill script-writer; seus scripts terminam com notas do editor que esta skill executa.
Qual preset
| O pedido | Use |
|---|---|
| Instagram, Reel, story, TikTok, Shorts, material vertical, ou nenhuma plataforma nomeada com material vertical | Preset Instagram (ele pega emprestado o estágio de corte, formatos, câmera e som do preset YouTube; ele diz onde) |
| YouTube, um gancho, formato longo, 16:9 / 4K, um tutorial Tella, montando seções | Preset YouTube |
| Qualquer outra coisa (uma montagem, viagem, uma entrevista, uma edição 16:9 geral) | Motor sozinho, mais looks e sons de shared/; pegue regras dos presets onde couberem |
| Uma gravação de tela para destacar | o preset de onde será postada: zoom na região, escurecer ou desfocar o resto, uma caixa ou sublinhado na palavra, sons de clique e digitação, dados privados desfocados; em um Reel, a gravação fica em um quadro de telefone ou navegador ou é cortada para a parte que importa |
Não tem certeza? Pergunte uma vez: "Isso é para Instagram ou YouTube?"
Caminhos (use estes em todos os comandos)
VE=~/.claude/skills/video-editor; VU="$VE/engine"; VU_PY="$VE/.venv/bin/python"
IG="$VE/presets/instagram"; YT="$VE/presets/youtube"; SK="$YT"; SHARED="$VE/shared"
Todas as saídas vão para <pasta do material>/edit/ (Regra Rígida 12 do motor); nunca escreva dentro de $VE exceto para salvar uma regra, um LUT ou um recurso compartilhado propositalmente.
Regras rígidas que abrangem tudo
- A transcrição custa dinheiro (créditos Scribe). Nunca transcreva a menos que o usuário tenha entregue material e pedido uma edição. As transcrições são armazenadas em cache por nome do arquivo; exclua o JSON em cache de um corte simples após recortá-lo novamente.
- Estratégia antes da execução: descreva o material, proponha o plano (preset, estilo de legenda, visual, música, duração), aguarde um sim.
- As legendas e subtítulos vão por último, depois de qualquer sobreposição.
- Corrija a cor uma vez por vídeo, por segmento durante a extração; proteja a pele; verifique um quadro antes/depois.
- Verifique o arquivo renderizado (quadros em cada corte, loudness -14 LUFS, duração) antes de mostrá-lo.
- Os ajudantes Python rodam com
$VU_PY; opython3do sistema não tem numpy.
Tipos de corte
shared/references/cuts.md: os 10 cortes (corte, salto, correspondência, J, L, fade, dissolução, corte na ação, corte cruzado, smash) com quando usar cada um e a ferramenta que o faz (shared/tools/). Ambos os presets e a skill cinematográfica o usam.
Motion graphics
shared/references/motion-graphics.md: as 7 regras de qualidade contra as quais toda animação é verificada, de onde vêm as referências, o loop de aprendizado (referência → números → modelo → notas → salvo) e o rastreador de modelos. Leia antes de construir qualquer animação; pesquise o registro HyperFrames antes de construir um efeito manualmente.
Escada de renderização (sempre, todo vídeo)
- Renderização de revisão em 720p (rápida; o que o usuário assiste e dá notas):
motor
render.py … --draft(720x1280 / 1280x720), HyperFramesrender … --quality draftem uma cópia da composição com 720 de largura ou o padrão com-o review.mp4depoisscale=720:-2; legendas comig-captions.py --width 720 --height 1280. A autoavaliação é executada neste arquivo. - Final em 4K somente após o usuário aprovar a revisão (sem notas restantes):
motor
render.py … --uhd(2160x3840 vertical / 3840x2160 paisagem, CRF 18), HyperFramesrender … --resolution portrait-4k --quality high(oulandscape-4k; a composição 1080x1920 renderiza com 2x DPR, então texto e gráficos são realmente nítidos), legendasig-captions.py --width 2160 --height 3840(mesmo layout, escalado), masterização de música/loudness como de costume (-14 LUFS). Verifique:ffprobemostra 2160x3840, tags BT.709, duração corresponde à revisão. - Entregue ambos lado a lado:
<projeto>-4k.mp4(o mestre, para upload / YouTube / arquivo) e<projeto>-1080.mp4(uma cópia de alta taxa de bits 1080x1920, ~20 Mb/s, feita a partir do mestre 4K comscale=1080:-2:flags=lanczos). Diga honestamente ao usuário: o Instagram reproduz Reels em até 1080x1920 e recodifica cada upload, então o 4K ajuda dando ao seu codificador a fonte mais limpa (e mantém YouTube/TikTok/reutilização futura em qualidade total), não por mostrar 4K; ative Instagram > Configurações > Qualidade da mídia > "Fazer upload na melhor qualidade". Material gravado em 1080p é upscalado no mestre 4K (sem novos detalhes); diga isso quando for o caso. Uma observação após o final custa uma nova revisão em 720p, depois 4K.
Configuração da máquina (install.sh na raiz do repositório faz a maior parte disso)
| Ferramenta | Estado | Verificação |
|---|---|---|
| ffmpeg completo (libass, zscale, lut3d) | ffmpeg-full vinculado em ffmpeg | `ffmpeg -filters |
| Ambiente Python | $VE/.venv (requests, numpy, pillow, librosa, matplotlib) | cd $VE && uv sync |
| Chave ElevenLabs | $VU/.env (modo 600) | curl -s -o /dev/null -w '%{http_code}' -H "xi-api-key: $(sed -n 's/^ELEVENLABS_API_KEY=//p' $VU/.env)" https://api.elevenlabs.io/v1/user → 200 |
| Node + CLI HyperFrames | Node 26, hyperframes global | hyperframes doctor |
| Skills do agente HyperFrames | instaladas pela CLI como suas próprias skills (hyperframes, hyperframes-core, -animation, -keyframes, -registry, media-use, ...) | hyperframes skills check; leia-as para o contrato de composição |
| auto-editor, yt-dlp, Chrome | instalados | auto-editor --version, yt-dlp --version |
| Testes do preset YouTube (se instalado) | todos passam | cd $YT/scripts && $VU_PY -m unittest tests |
Mantendo-o seu
- "Salve isso na skill": escreva a nota como uma regra simples onde ela pertence: só Instagram → no preset Instagram; só YouTube → no preset YouTube; ambos → na seção compartilhada do preset YouTube (o preset Instagram aponta para lá) ou neste arquivo quando for sobre roteamento ou configuração. Substitua uma regra por uma nova que a contradiga; nunca mantenha ambas.
- Novo visual: edite
LOOKSemshared/luts/make_luts.py, execute com$VU_PY, adicione uma linha à tabela de cores do preset Instagram. Novo estilo de legenda: uma linha na tabela de legendas + uma entrada emSTYLESemig-captions.py. - Atualizações do motor: clone o upstream https://github.com/browser-use/video-use em algum lugar (
git pull) e comparediff -r <clone>/helpers $VU/helperse copie as alterações manualmente; a cópia do motor tem edições de caminho local apenas emENGINE.md.