Communitygithub.com

Jenesyx/reel-split

Use quando o usuário executar /reel-split, ou pedir o explicador de tela dividida Reel — um painel animado de widgets no topo de ~45 % do quadro, com o orador abaixo durante todo o tempo, sem legendas, sem efeitos sonoros — típico para vídeos do tipo "Encontrei esta ferramenta / Aqui estão 5 dicas", em gravação de cabeça falante raw/.

O que é reel-split?

Este skill automatiza a criação de vídeos de tela dividida (split-screen) no estilo "Reel", onde um painel permanente ocupa a parte superior do quadro (por padrão 45% da altura) exibindo widgets de interface do usuário — cartões, medidores, botões, terminais, chips — que ilustram exatamente o que está sendo dito. O orador permanece abaixo, em escala 1, sem movimentos, e o áudio é o original da gravação, sem legendas ou efeitos sonoros adicionados. O pipeline completo inclui: análise do vídeo com ffprobe, transcrição com Whisper (com suporte a nomes e jargões), rastreamento facial, planejamento de cenas baseado na fala (cada widget sincronizado com palavras-chave), geração de HTML/JS via Hyperframes, renderização rápida e final, e um relatório de verificação. O skill é suportado em Windows, macOS e Linux, e inclui tratamento especial para texto em Farsi/Árabe, mapeamento de tom HLR, e um sistema de "safe box" para evitar sobreposição com elementos da interface do Instagram ou status do telefone. O exemplo de trabalho está em `examples/split/`, com um plano e módulo de cena de um vídeo real de 100 segundos sobre cinco habilidades do Claude.

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

Perguntar na sua IA favorita

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

Documentação

Reel — Edição de tela dividida (painel de 45% sobre o orador)

Um painel creme permanente preenche o topo do quadro (1080 × split.panel_height, padrão 864 = 45%) com widgets no estilo de interface — cartões, medidores, botões, terminais, chips — que ilustram exatamente o que está sendo dito. O orador fica abaixo na escala 1 e nunca se move. Finalização: a palavra-chave do comentário grande na tela, depois um cartão de seguir. Exemplo trabalhado: examples/split/ (plano + módulo de cena de um vídeo real de 100 segundos sobre cinco habilidades do Claude).

Argumentos: $ARGUMENTS

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

Leia reel.config.json primeiro (volta para reel.config.example.json se não existir).

CoisaPadrão
Divisão"split": split.panel_height (864 → painel 45%, orador 55%; 960 = 50/50)
Oradorescala 1, sem zoom, sem movimento; rosto centralizado na região do orador (speaker_y)
Caixa segura"safe": split.safe = [64, 160, 64, 32] → conteúdo da cena fica em 952 × 672 começando 160 px abaixo (o cabeçalho do Instagram / a barra de status do telefone escondem o topo)
Legendas / Efeitos sonoros / MúsicaNenhum adicionado. Áudio = mix original da gravação, remuxado por finish.py
GravaçãoAssumir que já está cortada, corrigida de cor, com música adicionada → usar como está. Raw/sem corte → perguntar primeiro
CTAPalavra-chave do comentário (palavra ou número) enorme em um cartão de balão de fala; cartão de seguir "handle": handle_do_criador, apenas texto, nunca um corte de rosto
Paletasplit_palette: painel creme, texto tinta, preenchimentos de destaque; texto sobre creme usa accent_deep (contraste)

Entradas

Nome da gravação + tópico vêm dos argumentos. Pergunte uma vez, em uma mensagem, apenas o que estiver faltando: a gravação já está cortada/corrigida/com música; a palavra-chave do comentário; nomes ou jargões que o Whisper pode ouvir errado (nomes de ferramentas e produtos).

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; folha de contato ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg e olhe para elaparede vazia acima da cabeça? já editado?
2Transcrever$PY tools/transcribe.py <take> --prompt "<nomes, jargões>"revisar nomes de ferramentas; lacunas > 3 s → re-transcrever janela
3Rosto$PY tools/face_track.py <take> --split <panel_height>imprime speaker_y
4Plano de batidauma cena por ideia, tipicamente 3-7 s, cada widget fixado a uma palavra falada (cue = início da palavra). Cenas mudam conteúdo, nunca layout
5Arquivo de planowork/<take>/showcase.json a partir de examples/split/showcase.json: video ("../../raw/<file>"), split, speaker_y, safe, scenes_module, scenes[] {kind, start, end, cue{...}}, handle na cena de seguir; _note registra os números dos rostos
6Cenastools/scenes_<slug>.py a partir de examples/split/scenes_5skills.py: um sc_<kind>(i, s) -> (html, js) por tipo, dicionário RENDER, CSS/JS opcionais. Coordenadas dentro da caixa segura (952 de largura); ids s{i}-*; tempos de cue absolutos. sc_comment, sc_follow são o CTA
7Construir$PY tools/showcase_build.py <take>; em work/<take>/sc: npx hyperframes lint public → 0 erros; npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <meio de cada cena>; ler folhas, corrigirtexto dentro do painel, nada abaixo do cabeçalho
8Renderização rápida$PY tools/finish.py <take> --seconds 12; ler work/<take>/sc/quick_sheet.jpg
9Renderização completa$PY tools/finish.py <take> (segundo plano) → final/<take>/, verificar, qa/sheet.jpgler a folha
10Relatóriocaminho, duração, cenas, resultado da verificação. Se algo novo foi aprendido, adicione a esta habilidade

Regras do painel

  • Widgets ilustram a frase sendo falada agora: um cartão de repositório quando eles nomeiam o repositório, um medidor quando eles comparam, um tachado quando dizem "não isto".
  • Cada cena desaparece 0,25 s antes da próxima (o construtor faz isso); dentro de uma cena, elementos aparecem em suas palavras de cue.
  • Números na tela devem ser contagens reais da gravação.
  • Os tipos de cena construídos em showcase_build.py (hook, repo, cta, …) são anteriores à caixa segura de 45% e podem transbordá-la; escreva tipos em tools/scenes_<slug>.py baseados em examples/split/scenes_5skills.py em vez disso.
  • Texto em Farsi / Árabe: classe .fa (RTL no elemento, nunca dir="rtl" no <html>), letter-spacing: 0, dígitos via fa(), um zero grande como Latin 0.
  • Sem tweens sobrepostos em uma propriedade, sem Math.random / from:"random", slides de entrada carregam autoAlpha:0 no estado de origem.
  • Se qualquer clipe de origem for HDR (HLG), mapeie o tom primeiro (TONEMAP em tools/story_assets.py) — finish.py para em "promoção automática de HDR".
  • hyperframes snapshot não é prova da renderização — a etapa 8 é.

Individual skills in this repo

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

Habilidades Relacionadas