Communitygithub.com

Interior Reels

Transforme clipes brutos de projetos de interiores em Reels 9:16 prontos para upload, com transições e texto, seguindo padrões de edição reutilizáveis.

O que é Interior Reels?

Esta skill transforma clipes brutos de design de interiores, arquitetura ou propriedades em vídeos no formato 9:16 (Instagram Reel/TikTok) com transições e texto. Ela capacita o assistente de IA a tomar decisões editoriais com base na inspeção visual de cada clipe (em vez de depender de nomes de arquivo), seguindo uma estrutura narrativa de interiores (entrada → áreas públicas → privadas) e uma alternância de escalas (aberto, detalhe, aberto). A skill suporta modos de edição 'Seguir Referência' (réplica exata do padrão) e 'Personalizado' (adaptação livre), e gerencia revisões por meio de blocos de perguntas estruturados em JSON. Principais recursos incluem: seleção automática de estabilização, análise de qualidade de clipes (partes escuras, vazias ou borradas), preferências do cliente por meio de arquivos JSON (sobreposição, clipes, padrão) e um fluxo de treinamento de padrões para refinar a precisão. As regras absolutas garantem que texto e logotipos sejam controlados pelo cliente via GUI, que o áudio venha exclusivamente dos arquivos de sobreposição do cliente ou da biblioteca do estúdio, e que o assistente nunca modifique as escolhas do cliente sem permissão. A skill se integra a ferramentas de linha de comando Python para digitalização, pré-visualização e renderização, e exige que o assistente revise visualmente todos os clipes e quadros antes da renderização final.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/alfianwilfredo/edit-skill/tree/main/skill/interior-reels

Perguntar na sua IA favorita

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

Documentação

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)

  1. 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.py lê este arquivo e substitui todo texto e logotipo no plano. Não escreva texto ou logotipo em plan.json, não pergunte ao cliente sobre o conteúdo do texto e não adicione texto próprio a overlay.json (incluindo CTA de brand.json) a menos que o cliente solicite.
  2. 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_conteudo e logotipo no padrão são apenas anotações do vídeo de referência, não são renderizados.
  3. 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 em PLAN.md seção overlay.json), e renderize novamente. A GUI recarrega este arquivo após sua resposta. Fontes apenas de SKILL/fonts/. Lista de fontes, categoria, características e usos em fonts/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 via textos[].por_linha. Logotipo apenas preto (brand/logo.png) ou branco (brand/logo-branco.png). Dados do estúdio (nome, site keziakarin.com, Instagram @keziakarin.studio) permanecem em brand.json.
  4. Áudio também vem de overlay.json (audio). Não escolha ou troque a música por conta própria e não escreva musica no plano. Se o cliente solicitar via chat (trocar música, volume, ponto inicial, final com/sem música, sincronizar batida), edite audio em overlay.json (formato em PLAN.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.
  5. Se overlay.json ainda 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.
  6. Não exclua nem substitua overlay.json sem solicitação. Este arquivo é a escolha do cliente.
  7. Tremor é tratado automaticamente. render.py mede o tremor de cada segmento e estabiliza automaticamente ("estabilizar": "auto", padrão). Não preencha estabilizar a menos que haja um motivo: true força a estabilização, false desliga (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 preencha tremor em _review/*.json para partes claramente tremidas/fora de foco: esse intervalo não será usado quando a renderização ajustar inicio.
  8. Escolha partes adequadas, não use todos os segundos do clipe. Durante a renderização, render.py analisa 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 de inicio é fornecida. Obrigatório: desloque inicio para a sugestão, ou reduza duracao, ou troque o clipe. Não é permitido usar --ignorar-qualidade sem autorização do usuário.
  9. 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_total do padrão. Não preencha slots com partes ruins.
  10. 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.
  11. 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.py recusa a renderização se o clipe não foi revisado ou o segmento está fora do intervalo_adequado (a menos que --ignorar-qualidade).
  12. 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.
  13. Clipes escolhidos pelo cliente vêm de <pasta>/_edit/clipes.json. Leia este arquivo antes de criar o plano (formato em PLAN.md seção clipes.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 o tipo_cena do 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.py recusa planos que violem este arquivo (não pode ser contornado com --ignorar-qualidade). Não altere nem exclua clipes.json; este arquivo é escrito pela GUI.

Fluxo: editar clipes em Reel

  1. 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, preencha audio no plano (veja PLAN.md). Áudio não é gravado pela skill: o usuário deve fornecer o arquivo de áudio. Compare o número de clipes na pasta com min_clipes do padrão. Se for menor, informe o cliente e sugira um padrão com min_clipes menor ou adicione clipes. Pode prosseguir se o cliente concordar.
  2. Digitalize. Execute scan_clips.py <pasta> para criar <pasta>/_scan/.
  3. Veja CADA grade _scan/<clipe>.jpg com 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_quadro em manifest.json mapeia os quadrados da grade para segundos) e direção do movimento da câmera. Não prossiga antes de ver todas as grades.
  4. Escolha um padrão de SKILL/patterns/*.json, conforme solicitação ou padrão. Se a seleção for automática, escolha aquele cujo adequado_para mais se adequa ao número e conteúdo dos clipes. Leia as notas_treinamento do padrão escolhido (se houver) e aplique seus aprendizados ao preencher os slots.
  5. Preencha os slots. Para cada slot em fluxo, escolha um clipe e segundos inicio que correspondam ao tipo_cena, seguindo as regras narrativas abaixo. Copie duracao, movimento, transicao_entrada, efeito_entrada, efeito_saida, escurecer e gradação do padrão. Copie também moldura e final para o plano, altere slot_logo para segmento_logo (índice do segmento daquele slot) e preencha segmento_abertura com 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 tiver textos[0].duracao, escreva também abertura_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 tiver textos[0].ate_slot, escreva também texto_abertura no plano: inicio, animacao, fade, saida copiados de textos[0], e ate_segmento = índice do segmento do slot ate_slot. Não copie texto e logotipo. Escreva <pasta>/_edit/plan.json de acordo com SKILL/PLAN.md, usando caminhos absolutos.
    • Padrão com moldura letterbox: 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 inicio no 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 usa segmento_logo, portanto a ordem dos segmentos deve ser igual ao fluxo. 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.
  6. 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.
  7. Final. Execute render.py <plano>, veja *_check.jpg mais 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 detalhe primeiro. 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, cortar já é 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.

  1. Nova mensagem de revisão (não é resposta, não é "Executar"):
    • Leia plan.json e veja *_check.jpg do 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": true apenas 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.
  2. 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 bloco resumo: lista de alterações a serem feitas, 1 ponto por alteração. Pare e aguarde.
  3. Executar diretamente: ... = use as opções recomendado para todas as perguntas anteriores e execute sem resumo.
  4. Executar conforme resumo. = execute exatamente o conteúdo do último resumo (editar plano/sobreposição, pré-visualizar, finalizar) e relate normalmente.
  5. Mensagem de texto livre com cartão aberto = resposta livre. Trate como Resposta:.
  6. 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.
  7. 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.json mais 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").

  1. Entrada da mensagem da GUI: nome do padrão, modo (seguir referência / personalizado) e pasta de clipes.
  2. Material. Leia SKILL/patterns/<padrao>.json incluindo notas_treinamento. Vídeo de exemplo = skill/exemplo-video/<video_exemplo> (pasta exemplo-video ao lado da pasta da skill). Folha de referência: use SKILL/_ref/<nome>/ já existente (procure pelo nome do padrão ou nome do arquivo video_exemplo sem extensão; veja filmstrip.jpg/shots.jpg). Se não existir, execute analyze_ref.py <video exemplo> --name <pattern> --out <pasta>/_training/<pattern>/ref.
  3. Pasta de trabalho = <pasta>/_training/<pattern>/. Não toque em <pasta>/_edit/.
  4. 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.
  5. 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.
  6. Relate e corrija. Envie um bloco perguntas com 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 atualize notas_treinamento.
  7. Finalize. Renderize novamente com o padrão corrigido, veja *_check.jpg, e informe que o padrão foi atualizado.

Habilidades Relacionadas