Communitygithub.com

Jenesyx/reel-story

Usar quando o usuário executar /reel-story, ou pedir a edição Reel em tela cheia e com movimento intenso — orador em tela cheia, cortes para seus próprios clipes B-roll, adesivos e widgets aparecendo nas palavras faladas, um mascote, palavras gigantes atrás do orador, sem legendas — a partir de uma gravação de cabeça falante em raw/.

O que é reel-story?

Este skill automatiza a criação de um Reel de formato curto com edição de história em tela cheia e movimento intenso, a partir de uma gravação de cabeça falante. Ele é ideal para produtores de conteúdo que desejam transformar um take bruto em um vídeo dinâmico, com cortes para B-roll do criador, adesivos e widgets que surgem nas palavras faladas, um mascote reagindo e momentos de profundidade com palavras gigantes atrás do orador. O skill suporta plataformas como Instagram e YouTube Shorts, e funciona integrado a ferramentas como ffmpeg, Python (via ambiente virtual), Hyperframes e Node.js. O processo inclui transcrição, rastreamento facial, curadoria de B-roll, criação de um roteiro de batidas (beats), geração de matte de profundidade, montagem de cenas, renderização rápida para verificação e renderização final, gerando um relatório ao final. As regras de batida garantem mudanças a cada 2-4 segundos, misturando modos (orador + adesivos, corte para B-roll, momentos de profundidade, tela cheia com bolha de câmera), e lidam com segurança com texto em persa/árabe e latino.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jenesyx/arta-edit-studio/tree/main/.claude/skills/reel-story

Perguntar na sua IA favorita

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

Documentação

Reel — Edição de história (tela cheia com movimento)

O orador permanece em tela cheia. A história é contada por cortes para os próprios clipes do criador, adesivos/cartões/widgets que surgem nas palavras faladas, um mascote reagindo e momentos de profundidade onde palavras gigantes ou um fundo de marca ficam atrás do orador (máscara de pessoa). Exemplo prático: examples/story/story_stoodi_inviteraw.py.

Argumentos: $ARGUMENTS

Padrões (alterar apenas se o usuário disser)

Leia reel.config.json primeiro (fallback para reel.config.example.json).

CoisaPadrão
LegendasNenhuma. Gráficos de palavras-chave estão ok; nunca uma transcrição contínua
ÁudioMixagem própria do take, intacta — finish.py remuxa. Sem efeitos sonoros, sem fundo musical
TakePresumir já cortado, corrigido, com música adicionada → não cortar nem corrigir. Bruto/sem corte → perguntar primeiro
B-rollbroll_dir do config; descrições em work/_catalog/<pasta>/NOTES.md
Marcabrand + palette do config. Sem arquivos de mascote → sem cenas de mascote
CTAPalavra-chave do comentário enorme na tela; cartão de seguir = apenas texto @<handle do criador>, nunca um recorte de rosto
Idiomalanguage do config (Whisper + qual classe de texto usar)

Entradas

Nome do take + tópico vêm dos argumentos. Pergunte uma vez, em uma mensagem, apenas o que estiver faltando: o take já está cortado/corrigido/com música; palavra-chave do comentário; nomes ou jargões que o Whisper pode ouvir errado; clipes que eles querem incluir ou excluir.

Pipeline

PY = .venv/Scripts/python.exe -X utf8 (Windows) ou .venv/bin/python -X utf8 (macOS/Linux). Etapas longas em segundo plano.

#EtapaComando / açãoVerificar
1Olharffprobe o take; folha de contato ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg e olharespaço acima da cabeça, texto no quadro espelhado?, já corrigido?
2Transcrever$PY tools/transcribe.py <take> --prompt "<nomes, jargões>"revisar nomes; lacunas de palavra > 3 s → re-transcrever essa janela
3Rosto$PY tools/face_track.py <take>imprime FACE = (x, y) e topo da cabeça
4B-roll$PY tools/story_assets.py <take> catalog; ler NOTES.md; olhar as tiras de clipes ainda não descritas e adicionar suas linhas ao NOTES.mdflags HDR / espelhado / VFR
5Roteiro de batidasescrever work/<take>/beats.md: tempo | palavras | modo | o quê. Regras abaixo, técnicas em references/techniques.mdcada batida ancorada a uma palavra
6Máscarase houver algum momento de profundidade: $PY tools/story_assets.py <take> matte (~8 min CPU para 80 s, segundo plano, sem ffmpeg paralelo)work/<take>/matte/fg.webm
7Módulo do takecopiar examples/story/story_stoodi_inviteraw.py → tools/story_<slug>.py (slug: nome do take, não alfanumérico → _); definir NAME, FACE, BROLL, TILES, MIRRORED, cenas, SCENES (DUR opcional — sondado). Nomes do mascote = os arquivos em assets/mascot (minúsculas, espaços → -)
8Assets$PY tools/story_assets.py <take> all (mascote, logotipo, cortes de B-roll, tiles)
9Construir$PY tools/story_build.py <take>; em work/<take>/sc: npx hyperframes lint public → 0 erros (avisos nested_structure são esperados); npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <cada batida>; ler as folhas de contato, corrigir, reconstruir
10Renderização rápida$PY tools/finish.py <take> --seconds 12; ler work/<take>/sc/quick_sheet.jpgsobreposições entram e saem; cores não esmaecidas
11Renderização completa$PY tools/finish.py <take> (~12 min para 80 s, segundo plano) → final/<take>/, verificar, qa/sheet.jpgler a folha quadro a quadro
12Relatóriocaminho, duração, batidas, clipes usados, qualquer coisa invertida/remapeada de tom, verificar resultado. Se algo novo foi aprendido, adicionar a este skill

Regras de batida

  • Algo muda a cada 2–4 s; nunca mais de ~5 s de orador puro.
  • Misture os modos: orador + adesivos · corte para B-roll (~25–30% do tempo) · momento de profundidade (4–6 por reel) · tela cheia com o orador como bolha de câmera (1–2 no máximo).
  • Deixa = tempo de início da palavra falada em transcript.json. Cada elemento sai antes da próxima batida.
  • Palavras de profundidade vão acima da cabeça (topo da cabeça da etapa 3): uma palavra gigante por vez, a palavra anterior voa para fora. Linhas empilhadas acabam escondidas atrás da cabeça.
  • Zonas seguras: nenhum texto acima de y 150 (cabeçalho do Instagram) ou abaixo de y 1560 (legenda); manter x < 960 entre y 1100–1650 (botões de curtir/comentar).
  • Números mostrados como fatos devem vir do take. Rótulos ilustrativos são aceitáveis.
  • Texto em persa/árabe: classe .fa (RTL com escopo no elemento — nunca dir="rtl" no <html>, isso renderiza preto), letter-spacing: 0, dígitos via fa(), um zero grande como 0 latino (zero persa é um ponto). Texto latino: .en; palavras de exibição gigantes: .blk.

Contrato do mecanismo — bugs já pagos

  • Cena = def scene(c: Comp): c.clip(layer, id, start, end, html, track), c.broll(name, a, b, mstart), c.matte(n, a, b), c.j(js...). Camadas: under (atrás da bolha), tiles, behind (entre take e máscara), fw, broll, over, fx.
  • Divs de clipe recebem id k-<id>; animar #<id>-i ou ids internos — nunca um .clip em si.
  • Qualquer coisa que deslize de fora da tela precisa de autoAlpha:0 em seu estado inicial, ou aparece prematuramente.
  • Primeiro tween de um elemento define seu estado inicial (fromTo renderiza imediatamente); tweens posteriores: .to ou immediateRender:false.
  • Nunca usar from:"random" stagger ou Math.random — embaralhar a ordem DOM em Python com random.Random(seed).
  • Mesma propriedade, mesmo elemento: um tween deve terminar antes do próximo começar (lint overlapping_gsap_tweens).
  • #cam escala/x/y/clipPath/borderRadius controlam aproximações, bolha e mosaico. A máscara fica dentro de #cam, então momentos de profundidade permanecem alinhados em qualquer escala de câmera.
  • B-roll de câmera frontal com texto legível no quadro → adicionar a MIRRORED. Nunca inverter o take principal.
  • Fontes HLG/HDR são remapeadas de tom por story_assets.py. Se finish.py parar em "HDR auto-promotion", uma fonte escapou desse caminho.
  • hyperframes snapshot não é prova da renderização — para isso serve a etapa 10.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Habilidades Relacionadas