/bb:edit
Objetivo
Transformar material bruto em um vídeo curto que um estranho pare para ver, sinta algo e aja: um master 1080×1920 e um master 1080×1350 para o Feed, ambos a aproximadamente −14 LUFS, com um plano de edição que justifique por que cada corte está onde está.
Antes de tudo: verifique este Mac
python3 "${CLAUDE_SKILL_DIR}/scripts/setup.py" --data "${CLAUDE_PLUGIN_DATA}"
Ele imprime uma linha de status por ferramenta, cada uma com a correção exata, depois READY ou NOT READY. É seguro executar novamente e leva segundos depois que tudo estiver instalado. A primeira execução compila as ferramentas Python, o que leva alguns minutos.
Se estiver NOT READY, forneça à pessoa as linhas de correção e pare. Se apenas os modelos estiverem faltando, diga que são cerca de 490 MB e, com autorização, adicione --download-models ao mesmo comando. Linhas OPTIONAL não bloqueiam nada.
Depois: pergunte o que estamos tentando fazer
A pessoa que executa isso detém o contexto, e o que ela disser aqui é o que torna o trabalho bom. Um anúncio nosso falhou porque nada foi perguntado; um reel funcionou porque alguém deu contexto real.
Veja primeiro o que já está lá (material, roteiro, briefing, anotações) e reformule, para que ela confirme em vez de redigitar. Pergunte em uma única rodada curta (AskUserQuestion se tiver, caso contrário na mensagem).
Pergunte primeiro, sempre, a menos que já tenham te dito:
- O que estamos tentando fazer e que tipo de vídeo é? Um vídeo de conscientização, um reel de portfólio, um anúncio pago vendendo algo, UGC ou um fundador falando, bastidores, outra coisa?
Depois, apenas o que estiver faltando:
- Para quem é e o que eles devem sentir ou fazer depois de assistir?
- Qual estilo? Qual referência é a mais próxima? Você mostrará opções no material real para escolher.
- Material, som ou música, duração e onde será veiculado.
Se for um anúncio, o comprador e o estágio do roteiro são mantidos, ou /bb:script é executado primeiro. Uma edição nunca troca a ideia ou uma alegação; isso volta para o roteiro.
Coloque as respostas em job/brief.md e trabalhe até o fim. A única outra parada são as opções na etapa 2. Se já deram tudo, ou disseram "vai logo", não pergunte. Se ninguém puder responder (execução sem supervisão), diga o que teria perguntado e assuma a leitura sensata.
O gosto pertence ao job
A pergunta 1 define o job: escreva-o na primeira linha de job/brief.md. O que alguém gostou em um vídeo não se aplica a outro. Um reel orgânico e um anúncio são jobs diferentes: o anúncio deve vender. Portanto, um anúncio é julgado por para quem é, pelos pontos de venda do produto, pela prova e pelo motivo de compra, não pelas piadas ou sensação de uma peça orgânica. Lições de um corte orgânico não vinculam um anúncio, e vice-versa.
Por quê
Edições genéricas de IA cortam em cada batida musical, dão a mesma duração a cada cena, aproximam tudo e param no momento em que a última palavra termina. Cada uma dessas foi rejeitada aqui (veja lessons.md). Os livros de edição respondem melhor às mesmas perguntas, então os consultamos por decisão: Murch para onde um pensamento termina, Pearlman para ritmo e a pergunta aberta, Block para onde o olho vai. Os livros são perguntas e passagens, nunca vozes.
Como é um bom resultado
- O quadro 0 já funciona como uma imagem estática com o som desligado: o produto, um resultado ou uma surpresa, nunca um logotipo ou saudação.
- Uma pergunta se abre no gancho e permanece aberta até a recompensa.
- Os cortes ocorrem onde um pensamento ou movimento termina, não em uma grade. Pelo menos uma cena é mantida ao lado de outras mais rápidas, para que pareça uma pausa intencional.
- A coisa mais brilhante ou em movimento em cada cena é o que se deve olhar. O texto fica sob o queixo ou em um céu limpo, nunca sobre uma boca, e nunca empilhado com outra linha dizendo as mesmas palavras.
- O fechamento é mais calmo que a cena anterior e o pedido é claro. O final funciona: a música termina em seu próprio final ou em uma frase real, nunca um fade em uma música ainda tocando, e nunca sobre seus próprios últimos acentos.
- O som real está presente. As pessoas no material são ouvidas por cima da música, e o maior momento da música coincide com o maior momento da imagem.
- O material parece como foi filmado: a cor natural do iPhone, enquadramento estático, um zoom suave apenas no produto, sem zooms móveis, sem preenchimento espelhado, sem barras pretas.
- O 4:5 é recriado a partir da mesma EDL, para que legendas e rostos permaneçam no quadro.
Comandos
Arquivos de referência escrevem de forma curta. O estado do shell não persiste entre comandos, então use sempre a forma completa e forneça a forma completa também para um agente crítico.
PYsignifica"${CLAUDE_PLUGIN_DATA}/venv/bin/python", o Python que o setup construiu. Execute todo script Python aqui com ele.scripts/...significa${CLAUDE_SKILL_DIR}/scripts/....references/...significa${CLAUDE_SKILL_DIR}/references/....search.pysignificapython3 "${CLAUDE_PLUGIN_ROOT}/skills/books/scripts/search.py".
Fluxo de trabalho
Pasta do job: <cliente>-<job>/ na pasta em que a pessoa está, ou na que o briefing nomear (job/). O material permanece onde está; apenas as renderizações são escritas.
- Leia e ouça. Execute
PY scripts/listen.py clips <material> --out job/soundantes de planejar: ele transcreve cada clipe e encontra falas, risadas, gritos e picos de nível. Leia tudo. Falas fora da câmera geralmente são a ideia e dizem o que uma cena realmente é (um clipe de "aplicação" de um anúncio era um diretor dizendo "você não precisa aplicar nada"). Execute tambémPY scripts/listen.py song <faixa>e leia as palavras: elas podem lutar contra a imagem ou ajudar. Depois, quaisquer notas do cliente,lessons.md, a pasta do cliente com edições anteriores (apenas aquele cliente, vejaexamples/README.md), o roteiro ou briefing. Executescripts/probe.sh <material> > job/footage-log.md, depois assista aos clipes e adicione os melhores momentos com timecode. Converta HDR comscripts/proxies.shantes de qualquer outra coisa. Um log de material escrito por outra pessoa é uma pista, não um fato: veja um quadro de cada seleção antes de colocá-la na EDL (scripts/sheet.sh <clipe> <início> <duração> job/sheets, para que nada seja escrito ao lado do material). Liste cada alegação que o roteiro ou briefing faz contra o momento do clipe que a mostra; uma alegação que nenhum clipe mostra é alterada ou cortada agora, não pelo crítico. Escreva a vibe em uma linha, nas palavras da pessoa. - Planeje. Carregue
references/plan.md,rhythm.md,eye.md,sound.md. Meça a música comPY scripts/beats.py <faixa>: tempo, primeira batida e o mapa de loudness, que mostra onde a faixa já está se movendo paramusic.start. Por batida (gancho, virada, recompensa, fechamento): o que sentir, o ritmo, onde o olho pousa, o som. Uma pesquisa por coluna. Escrevajob/plan.md, cada linha com um id de passagem. - Opções. Cerca de três tratamentos por seção (casual, médio, extremo) como cartões: um quadro e uma linha cada. A pessoa escolhe. Se ela não estiver presente, ou disse "vai logo", escolha, registre o motivo em
options.mde mantenha os outros visíveis; uma tabela de opções é suficiente. - Corte bruto. Carregue
references/formats.md. Escrevajob/edl.json, depoismix.py(o som) ecut.py --draftnos proxies.scripts/sheet.shno resultado,listen.py cutno resultado, e leia o relatório e sua imagem de forma de onda. Olhe para a folha de quadros, a tira do gancho e o quadro 0 você mesmo, e assista uma vez com o som desligado. - Crítico. Um agente novo recebe
job/brief.md(para julgar contra o job), quadro 0 em tamanho real, os quadros, a tira, o relatório do listen, o log do mix, a lista de alegações,references/critic.mde o comando completo desearch.py. O quadro 0 vai primeiro, porque uma miniatura pode ser mal interpretada. Não suas anotações nem este chat. Ele retorna notas por batida, no máximo três correções com ids de passagem, e um veredito. - Final. Corrija o que o crítico encontrou (ou escreva por que o briefing vence). Aponte a EDL para arquivos SDR de qualidade total, renderize sem
--draft, depoisreframe.pypara o 4:5, depoischeck_cut.pyelisten.py cutno resultado. Corrija todo FAIL; leia todo WARN. Diga claramente que ninguém ouviu: o relatório mede, não ouve, então as linhas de voz e o mix vão para os ouvidos da pessoa. Folhas de ambos os masters. README.txt e entrega conformeformats.md.
Responda com os dois arquivos, quadro 0, uma linha por batida sobre o que mudou após o crítico, e uma frase mencionando os livros uma vez. As citações permanecem em plan.md, nunca no vídeo.
Limites rígidos
- Uma alegação ou ideia alterada volta para
/bb:script. Se o material ou o som matar a ideia, pare e refaça o diagnóstico e o roteiro, com o crítico; nunca insira uma nova linha durante o corte. Um anúncio nosso trocou sua linha na edição e foi publicado sem público e sem razão de existir. - Opções antes de um rascunho, sempre. Se ninguém estiver, escolha e registre; nunca pule.
- Nunca desacelere ou acelere uma voz.
cut.pysilencia o áudio próprio de uma cena quando sua velocidade não é 1. - Sem denoise, sem desfoque, sem zooms móveis, sem preenchimento espelhado, sem barras pretas. HDR vai para SDR primeiro com avconvert. Sem correção de cor em talking heads e UGC. Um visual leve apenas quando o briefing pedir (
lookna EDL), dito em voz alta na resposta. - Nunca envie com o som do clipe desligado e sem motivo escrito no plano.
- Uma cena nunca prova mais do que aconteceu: se o áudio disser que foi simulado, não é prova.
- Legendas no idioma falado, cada palavra que importa, nunca sobre a boca, nunca empilhadas com um destaque.
- Alegações, preços e ofertas na tela vêm do briefing ou do site ativo do cliente, nunca inventados.
- Nada vai para um cliente, é publicado ou gasta dinheiro sem o sim da pessoa. A entrega para o Drive do cliente e qualquer mensagem são redigidas para ela; ela envia.
Saber-fazer
- Texto: O ffmpeg do Homebrew não tem
drawtextnem libass, então o texto é desenhado como PNGs porscripts/text_png.swift(CoreText, compilado uma vez porcut.py) e sobreposto comoverlay. Fontes estão emassets/fonts/(Geist Black, Geist Bold, Playfair Display Itálico); a fonte de um cliente vai no blocostylesda EDL por caminho. - Whisper é inglês e ouve mal vozes fora da câmera.
listen.pyusa o modelo pequeno em inglês. Verifique qualquer linha que for legendar lendo os quadros; para uma leitura mais clara de uma linha duvidosa,setup.py --download-largeadiciona um modelo maior (1,6 GB), quelisten.py clips --largeusa. - Velocidade: renderizações finais rodam a cerca de 3 a 5 quadros por segundo para um 1080×1920 de fontes 1080p enquanto outras codificações rodam; um anúncio de 30 s leva de 3 a 5 minutos. Use
--draftpara o corte bruto. Execute renderizações longas como tarefas em segundo plano. - Cortes alinhados à batida:
beats.pymedebpmeoffsetdo arquivo. Meça a faixa inteira: ela verifica se suas duas metades concordam, e uma janela curta sobre uma introdução pode travar no pulso errado. Dê à música umbpmeoffset(segundos no arquivo do primeiro tempo forte) ou uma lista debeats. Marque as cenas cujo final deve cair em uma batida com"snap": true; o padrão ajusta apenas essas.cut.py --beatsimprime a grade contra os cortes atuais. Ajuste a virada e a recompensa, não todo corte:check_cut.pyavisa quando mais de 80% dos cortes estão em uma batida. - Tempo do texto: vincule o texto a uma cena (
"shot": 2, "at": 0.3, "dur": 1.2) em vez de segundos absolutos, para que siga a cena quando um ajuste de batida mover um corte. - Loudness:
loudnormde duas passagens para −14 LUFS em modo linear, depois um limitador a 4× a taxa de amostragem;cut.pymede o arquivo e recodifica com um teto mais baixo se o AAC ultrapassar −1 dBTP. A música fica 14 dB abaixo do áudio do clipe por padrão quando alguma cena mantém seu próprio som; definamusic.gain_dbpara alterar. - 4:5:
reframe.pyenquadra cada cena exatamente como o 9:16 e pega uma janela de 1350 linhas por cena (y45, padrão 285). O texto mantém seu lugar na imagem e é puxado 40 px para dentro. Mantenha o texto do 9:16 entre as linhas 330 e 1590 e o 4:5 não precisará de trabalho extra. - Zonas seguras (9:16): nada acima da linha 270 ou abaixo de 1590, exceto cartões em tela cheia; os 12% inferiores são o botão do Meta.
- Folhas de quadros:
sheet.sh <video> [início] [duração]escreve uma folha de 40 quadros (tempos no .txt ao lado), uma tira de 10 fps do gancho (ou qualquer janela) e o quadro 0. Quadros de flash aparecem na tira, não na folha. - Finais de clipe:
cut.pyavisa quando ooutde uma cena ultrapassa o último quadro da imagem e mantém esse quadro, para que o master nunca fique aquém do seu áudio. Recueoutse um congelamento aparecer. - Câmera na mão e zoom suave:
xé um número por cena, então um assunto com câmera na mão que deriva sai da janela, e um zoom suave multiplica a deriva. Veja a janela daquela cena em movimento (sheet.sh <render> <início da cena> <duração>dá uma tira de 10 fps) antes de confiar no enquadramento. - Tempos das palavras derivam: os tempos por palavra do Whisper podem estar até 2 s errados. Antes de colocar uma linha, transcreva o trecho sozinho; uma palavra perdida em qualquer extremidade significa que o corte está errado.
- Sincronia labial: cópias de telefone podem ter áudio cerca de 0,1 s adiantado. Verifique um clipe antes de cortar; se a voz liderar, ajuste
inna imagem, nunca nas palavras. - A busca nos livros:
search.py "<palavras literais>" --job feel|rhythm|eye --book murch|pearlman|block --k 6, depois--show <id>para ler uma anotação. Palavras literais funcionam; perguntas não.
Referências (carregar por decisão)
references/plan.md: o plano de quatro batidas, uma linha por batida por coluna, e as consultas por coluna.references/rhythm.md: onde um corte cai, se mantém, padrão muda, a pergunta aberta.references/eye.md: para onde o olho vai, posicionamento do texto, zonas seguras, a faixa 4:5.references/sound.md: a etapa de ouvir, voz, música, efeitos, loudness, o final.references/critic.md: a rubrica, carregada apenas pelo agente crítico.references/formats.md: formato da EDL, os scripts em ordem, saídas, onde os finais vão.references/drawings.md: animação desenhada à mão sobre um corte, quando o briefing a solicita.
Lições
lessons.md contém linhas datadas de reações e resultados reais. Leia na etapa 0; o crítico verifica o corte contra as últimas cinco. Esta pasta é substituída em cada atualização, então lições de um cliente vão na pasta desse cliente, e uma lição para todos entra através do repositório (CONTRIBUTING.md).