O que Interior Reels faz?
Transforme clipes brutos de projetos de interiores em Reels 9:16 prontos para upload. O script é apenas uma ferramenta. Decisões editoriais (qual cena, qual parte, qual ordem) são tarefa do Claude e devem ser baseadas na visualização de cada clipe, não em suposições a partir do nome do arquivo.
SKILL = pasta desta skill. Todos os scripts: python3 SKILL/scripts/<nome>.py.
Antes de começar (uma vez por sessão)
Execute bash SKILL/setup.sh. Se houver FALHA, resolva primeiro. Leia SKILL/brand.json para obter nome do estúdio, CTA, logotipo, padrão padrão e estilo do cliente.
Regras absolutas (não podem ser violadas)
- Texto e logotipo não são tarefa do assistente. O texto e o logotipo são definidos pelo cliente na GUI e salvos em
<pasta>/_edit/overlay.json.render.pylê este arquivo e substitui todotextoelogotipono plano. Não escrevatextooulogotipoemplan.json, não pergunte ao cliente sobre o conteúdo do texto e não adicione texto próprio aoverlay.json(incluindo CTA debrand.json) a menos que o cliente solicite. - O padrão apenas define cortes e aparência. O que é extraído do padrão: ordem dos slots, duração, movimento, transições e gradação.
texto,exemplo_conteudoelogotipono padrão são apenas anotações do vídeo de referência, não são renderizados. - Altere texto ou logotipo via chat = edite
overlay.json. Se o cliente pedir para alterar o conteúdo do texto, fonte, posição, tempo de exibição, tamanho, cor ou logotipo, edite<pasta>/_edit/overlay.json(formato emPLAN.mdseçãooverlay.json), e renderize novamente. A GUI recarrega este arquivo após sua resposta. Fontes apenas deSKILL/fonts/. Lista de fontes, categoria, características e usos emfonts/fonts.json; escolha a partir dela de acordo com o clima solicitado pelo cliente. Fonte ou tamanho diferente por linha (ex.: "segunda linha usar Great Vibes") é configurado viatextos[].por_linha. Logotipo apenaspreto(brand/logo.png) oubranco(brand/logo-branco.png). Dados do estúdio (nome, sitekeziakarin.com, Instagram@keziakarin.studio) permanecem embrand.json. - Áudio também vem de
overlay.json(audio). Não escolha ou troque a música por conta própria e não escrevamusicano plano. Se o cliente solicitar via chat (trocar música, volume, ponto inicial, final com/sem música, sincronizar batida), editeaudioemoverlay.json(formato emPLAN.md). Música apenas do áudio guia do padrão (patterns/audio/) ou da bilbioteca do estúdio (brand/musica/). Lembre ao cliente que o áudio de referência pertence a terceiros se ele quiser usá-lo no final. - Se
overlay.jsonainda não existir, a renderização ocorre sem texto e logotipo do padrão. Informe ao cliente que o texto e o logotipo podem ser preenchidos na GUI na seção Detalhes. - Não exclua nem substitua
overlay.jsonsem solicitação. Este arquivo é a escolha do cliente. - Tremor é tratado automaticamente.
render.pymede o tremor de cada segmento e estabiliza automaticamente ("estabilizar": "auto", padrão). Não preenchaestabilizara menos que haja um motivo:trueforça a estabilização,falsedesliga (ex.: movimento intencional da câmera). Leia a tabela "Estabilizar" no log de renderização:! tremor residual visível= verifique o resultado;! FALHA= a renderização parou, escolha outro intervalo ou clipe para aquele segmento. Durante a revisão, ainda preenchatremorem_review/*.jsonpara partes claramente tremidas/fora de foco: esse intervalo não será usado quando a renderização ajustarinicio. - Escolha partes adequadas, não use todos os segundos do clipe. Durante a renderização,
render.pyanalisa automaticamente os clipes (_qualidade/) e marca partes escuras, vazias (sem objeto) ou borradas. Segmentos que contêm mais de 0,3 segundos de partes ruins são rejeitados e uma sugestão deinicioé fornecida. Obrigatório: desloqueiniciopara a sugestão, ou reduzaduracao, ou troque o clipe. Não é permitido usar--ignorar-qualidadesem autorização do usuário. - A duração segue a filmagem, não o padrão. Se o intervalo bom do clipe for mais curto que o slot do padrão, encurte esse slot. A duração total do Reel pode ser menor que
duracao_totaldo padrão. Não preencha slots com partes ruins. - Veja o quadro antes do final. As sugestões da análise devem ser verificadas visualizando os quadros no intervalo (grade ou pré-visualização). A análise não sabe se o objeto principal é bom ou se aquela parte é a abertura correta.
- Revise todos os clipes de material primeiro. Execute
scripts/review_material.py <pasta-material>, veja CADA folha em_review/até o final, e preencha o JSON de cada clipe (visto,tremor,intervalo_adequado,decisao).render.pyrecusa a renderização se o clipe não foi revisado ou o segmento está fora dointervalo_adequado(a menos que--ignorar-qualidade). - Verifique o texto após a renderização. A posição do texto é escolhida pelo cliente (grade 3x3). Após a renderização, veja
*_texto<N>_check.jpg(quadrado vermelho = área estimada do texto). Se o texto cobrir o rosto ou objeto principal, informe o cliente e sugira outra posição. Não altere a posição por conta própria sem aprovação. - Clipes escolhidos pelo cliente vêm de
<pasta>/_edit/clipes.json. Leia este arquivo antes de criar o plano (formato emPLAN.mdseçãoclipes.json).abertura= clipe do primeiro segmento,encerramento= clipe do último segmento,nao_usar= não pode ser usado em nenhum segmento. A escolha do cliente prevalece sobre otipo_cenado padrão; se o tipo de cena do clipe for diferente do slot do padrão, informe o cliente. Os melhores segundos dentro do clipe escolhido ainda são selecionados pelo assistente.render.pyrecusa planos que violem este arquivo (não pode ser contornado com--ignorar-qualidade). Não altere nem excluaclipes.json; este arquivo é escrito pela GUI.
Fluxo: editar clipes em Reel
- Colete informações. Obrigatório: pasta de clipes. Opcional: padrão e arquivo de áudio (narração/voice over, mp3/m4a/wav). Texto e logotipo já estão em
_edit/overlay.json, não pergunte. Pergunte apenas o que estiver realmente vazio, no máximo 1 pergunta. Se houver um arquivo de áudio, preenchaaudiono plano (vejaPLAN.md). Áudio não é gravado pela skill: o usuário deve fornecer o arquivo de áudio. Compare o número de clipes na pasta commin_clipesdo padrão. Se for menor, informe o cliente e sugira um padrão commin_clipesmenor ou adicione clipes. Pode prosseguir se o cliente concordar. - Digitalize. Execute
scan_clips.py <pasta>para criar<pasta>/_scan/. - Veja CADA grade
_scan/<clipe>.jpgcom a ferramenta de visualização. Para cada clipe, anote em uma tabela: tipo de cena (aberto / médio / detalhe / walk-through / pan), cômodo, qualidade (tremido, escuro, muito claro, com pessoas ou bagunça), melhores segundos (segundos_quadroemmanifest.jsonmapeia os quadrados da grade para segundos) e direção do movimento da câmera. Não prossiga antes de ver todas as grades. - Escolha um padrão de
SKILL/patterns/*.json, conforme solicitação ou padrão. Se a seleção for automática, escolha aquele cujoadequado_paramais se adequa ao número e conteúdo dos clipes. Leia asnotas_treinamentodo padrão escolhido (se houver) e aplique seus aprendizados ao preencher os slots. - Preencha os slots. Para cada slot em
fluxo, escolha um clipe e segundosinicioque correspondam aotipo_cena, seguindo as regras narrativas abaixo. Copieduracao,movimento,transicao_entrada,efeito_entrada,efeito_saida,escurecere gradação do padrão. Copie tambémmolduraefinalpara o plano, altereslot_logoparasegmento_logo(índice do segmento daquele slot) e preenchasegmento_aberturacom o índice do segmento do primeiro slot de texto do padrão (textos[0].slot), para que o texto de abertura da GUI apareça naquele slot. Se o padrão tivertextos[0].duracao, escreva tambémabertura_duracao_texto(valor numérico, segundos) no plano — isso garante que o texto de abertura seja exibido por tempo suficiente para ser lido. Se o padrão tivertextos[0].ate_slot, escreva tambémtexto_aberturano plano:inicio,animacao,fade,saidacopiados detextos[0], eate_segmento= índice do segmento do slotate_slot. Não copie texto e logotipo. Escreva<pasta>/_edit/plan.jsonde acordo comSKILL/PLAN.md, usando caminhos absolutos.- Padrão com
molduraletterbox: priorize clipes paisagem. Clipes retrato são cortados ao meio em uma faixa 16:9; se for necessário usá-los, informe o cliente. - Reutilizar clipes é permitido se houver menos clipes que o número de slots: intervalos
iniciono mesmo clipe devem ter pelo menos 1 segundo de diferença e não podem estar em dois segmentos consecutivos. A renderização avisa se esta regra for violada. - Se o padrão tiver
nao_suportado, informe o cliente sobre esse efeito antes de renderizar. - Modo de edição da GUI (mencionado na mensagem "Iniciar edição"):
seguir referência(padrão): copie o fluxo do padrão exatamente, não remova, troque ou combine slots. O texto sobreposto já está numerado de acordo com o slot do padrão (quando), e o logotipo usasegmento_logo, portanto a ordem dos segmentos deve ser igual aofluxo. Se faltarem clipes, reutilize clipes (regra acima), não remova slots.personalizado: o padrão é apenas um ponto de partida para o estilo (gradação, transições, efeitos, moldura). A duração e o número de segmentos podem ser ajustados aos clipes. Escreva"modo": "personalizado"no plano, para que o áudio de referência seja sincronizado com a batida.
- Padrão com
- Pré-visualização. Execute
render.py <plano> --preview, e veja*_preview_check.jpg. Verifique: a ordem faz sentido, não há cenas ruins, o texto da sobreposição é legível e não cobre objetos principais, não há quadros congelados estranhos. Corrija o plano e repita se necessário. - Final. Execute
render.py <plano>, veja*_check.jpgmais uma vez, e informe o caminho do vídeo com um resumo de 1-2 frases da sequência de cenas.
Regras narrativas de interiores
- Os primeiros 3 segundos determinam se a pessoa para de rolar. A abertura deve ser a cena mais forte: clara, reta, espaço visível por completo.
- Siga a planta baixa. Ordem dos espaços da entrada para áreas públicas (sala de estar, jantar, cozinha) e depois para áreas privadas (quartos, banheiros). Não pule de um lado para o outro entre cômodos.
- Alterne escalas. Aberto, depois detalhe, depois aberto. Dois abertos de cômodos diferentes em sequência devem ser conectados por uma transição, não um corte seco.
- Direção do movimento deve conectar. Pan para a esquerda é conectado a uma cena que se move para a esquerda ou uma transição
slideleft/smoothleft. Evite direções de movimento opostas em uma mesma junção. - Escolha partes estáveis. Selecione os segundos no meio do movimento, não no início ou parada da câmera. Pule partes tremidas, borradas ou com pessoas.
- Encerramento use a cena mais bonita que tenha uma área limpa para CTA e logotipo.
- Texto: configurado pelo cliente via
overlay.json. Se for solicitado um conselho, sugira no máximo 6 palavras por texto. - Menos clipes que slots: remova slots
detalheprimeiro. Mais clipes que slots: use apenas os melhores, não é necessário usar todos os clipes. - Clipes paisagem: use
"preencher": "desfocar"se a composição for importante. Se o objeto principal estiver no centro,cortarjá é suficiente.
Fluxo: revisão após resultado
Aplica-se quando a mensagem do cliente termina com [modo revisao: ...] (a GUI adiciona quando _edit/plan.json já existe). Objetivo: entender a intenção da revisão antes de alterar qualquer coisa, pois a renderização é demorada. O cliente apenas clica em botões, portanto todas as perguntas DEVEM ser enviadas em blocos perguntas, não em texto livre.
- Nova mensagem de revisão (não é resposta, não é "Executar"):
- Leia
plan.jsone veja*_check.jpgdo resultado anterior. Não altere nenhum arquivo. - Envie uma rodada: no máximo 4 perguntas. O conteúdo são perguntas sobre a intenção (qual cena, quanto, qual estilo) e no máximo 2 constatações do resultado (ex.: cena escura, texto cobrindo objeto), cada uma com opções como "Corrigir" / "Manter".
- Cada pergunta tem 2-4 opções curtas (≤ 6 palavras), exatamente uma opção com
"recomendado": true."multi": trueapenas para escolhas que podem ter mais de uma resposta (ex.: quais cenas substituir). Não adicione opção "Outros"; a GUI já fornece. - Escreva no máximo 1 frase de introdução, depois o bloco, e pare e aguarde.
- Leia
- Mensagem começando com
Resposta:= resposta da rodada. Se ainda houver algo não claro e esta for a primeira rodada, envie uma segunda rodada (mesmas regras). Depois (ou se já estiver claro), envie um blocoresumo: lista de alterações a serem feitas, 1 ponto por alteração. Pare e aguarde. Executar diretamente: ...= use as opçõesrecomendadopara todas as perguntas anteriores e execute sem resumo.Executar conforme resumo.= execute exatamente o conteúdo do último resumo (editar plano/sobreposição, pré-visualizar, finalizar) e relate normalmente.- Mensagem de texto livre com cartão aberto = resposta livre. Trate como
Resposta:. - Máximo de 2 rodadas de perguntas por revisão. Solicitações muito claras (ex.: "mude a fonte para Great Vibes") ainda passam por 1 rodada curta (apenas constatações, ou 1 pergunta de confirmação), depois resumo.
- Mensagem "clipes escolhidos mudaram" (enviada pela GUI após o cliente alterar clipe de abertura, encerramento ou não usar) = revisão normal: leia
_edit/clipes.jsonmais recente e aplique ao plano seguindo as etapas 1-4 acima (regra absoluta 13).
Formato do bloco (JSON válido, um bloco por resposta):
```perguntas
{"tipo": "perguntar", "perguntas": [
{"id": "q1", "titulo": "Qual cena deseja substituir?", "multi": true,
"opcoes": [{"rotulo": "Cena 2 (cozinha)", "recomendado": true}, {"rotulo": "Cena 4 (quarto)"}]},
{"id": "q2", "titulo": "Constatação: cena 3 um pouco escura", "multi": false,
"opcoes": [{"rotulo": "Corrigir", "recomendado": true}, {"rotulo": "Manter"}]}
]}
```
```perguntas
{"tipo": "resumo", "resumo": ["Cena 2 substituída pelo clipe da cozinha no segundo 4", "Cena 3 clareada"]}
```
Fluxo: treinamento de estilo
Aplica-se quando a mensagem termina com [modo treinamento: ...] (enviado da aba Treinamento de estilo na GUI). Objetivo: testar novamente o padrão existente contra seu vídeo de exemplo, relatar incompatibilidades e corrigir o padrão com aprovação do cliente. Todas as perguntas DEVEM ser em blocos perguntas (formato em "Fluxo: revisão após resultado").
- Entrada da mensagem da GUI: nome do padrão, modo (
seguir referência/personalizado) e pasta de clipes. - Material. Leia
SKILL/patterns/<padrao>.jsonincluindonotas_treinamento. Vídeo de exemplo =skill/exemplo-video/<video_exemplo>(pastaexemplo-videoao lado da pasta da skill). Folha de referência: useSKILL/_ref/<nome>/já existente (procure pelo nome do padrão ou nome do arquivovideo_exemplosem extensão; vejafilmstrip.jpg/shots.jpg). Se não existir, executeanalyze_ref.py <video exemplo> --name <pattern> --out <pasta>/_training/<pattern>/ref. - Pasta de trabalho =
<pasta>/_training/<pattern>/. Não toque em<pasta>/_edit/. - Crie um plano de teste. Siga as etapas 3-5 do fluxo "Fluxo: editar clipes em Reel", mas:
- Use o padrão especificado.
- Modo
seguir referência: os clipes devem corresponder exatamente aos slots do padrão, em ordem. Se faltarem, reutilize clipes (regra acima). - Modo
personalizado: você pode ajustar a duração e o número de segmentos. - Não escreva
overlay.json; o foco é apenas na edição visual e na gradação. - Escreva o plano em
<pasta>/_training/<pattern>/plan.json.
- Renderize e compare. Execute
render.py <pasta>/_training/<pattern>/plan.json. Veja*_check.jpg. Compare com o vídeo de exemplo (material da etapa 2). Liste diferenças: cenas faltando, duração muito curta/longa, transições diferentes, gradação diferente. - Relate e corrija. Envie um bloco
perguntascom as diferenças encontradas. Peça ao cliente para aprovar ou sugerir correções. Após aprovação, edite o padrão (SKILL/patterns/<pattern>.json) e atualizenotas_treinamento. - Finalize. Renderize novamente com o padrão corrigido, veja
*_check.jpg, e informe que o padrão foi atualizado.