Communitygithub.com

SaviourV2/narrativa-visual

Projete e construa a camada visual de um vídeo longo de cabeça falante como um mundo persistente pelo qual a câmera se move, em vez de uma sequência de gráficos separados. Use quando solicitado a editar um vídeo, adicionar gráficos em movimento, projetar os visuais para um roteiro, planejar uma edição ou corrigir uma edição considerada confusa, com muito texto, difícil de seguir ou 'claramente feita por IA'. Abrange o mundo persistente, a gramática da câmera, a regra do holofote, loops abertos espaciais, disciplina de ornamentos e tokens, temporização de transcrição e as portas de verificação.

O que é narrativa-visual?

Esta habilidade aborda a falha central do 'pensamento baseado em cena' na edição de vídeo, onde cada novo gráfico força o espectador a reiniciar a compreensão. Em vez disso, ela constrói um único mundo visual persistente que nunca é redefinido; novos elementos são adicionados ao espaço existente, não o substituem. A câmera se move por este mundo em três altitudes (Mundo, Região, Detalhe) para orientar o espectador sem cortes confusos. A regra do holofote garante que apenas um elemento esteja em destaque por vez, com os demais silenciosos mas legíveis, permitindo que o mundo acumule dezenas de elementos sem parecer desordenado. Loops abertos são espaciais: promessas visíveis são deixadas incompletas e fechadas mais tarde, e o contador de seção é nomeado, não apenas numerado. A habilidade impõe disciplina rigorosa de design com tokens globais (pesos de traço, tamanhos de tipo, raios, cores) e regras de movimento (sem cross-fade, entradas em curvas cúbicas, duração variando com a massa). Para o desenvolvedor, ela fornece um contrato de construção com geradores por seção, módulos compartilhados com namespace e auditorias de lacunas na transcrição. Ela é projetada para ferramentas de agente de IA que processam scripts e geram vídeos de longa duração, como aqueles em pipelines de pós-produção baseados em código.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SaviourV2/acevids-editor/tree/HEAD/.claude/skills/video-storytelling

Perguntar na sua IA favorita

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

Documentação

Narrativa visual

Como construir a camada visual de um vídeo longo para que um espectador ainda esteja orientado no nono minuto. Aplica-se a qualquer vídeo de cabeça falante com um roteiro: uma reportagem, um mergulho profundo em um único tópico, uma comparação, um tutorial, uma lista.

A falha que isso substitui é o pensamento baseado em cena. Um novo gráfico a cada poucos segundos faz o espectador reiniciar a compreensão a cada poucos segundos, e nenhum gráfico individual tem culpa, e é por isso que o feedback retorna como o vago "confuso" ou "informação demais" em vez de um defeito específico.

Para uma folha de prática neutra, leia docs/STORYTELLING-WORKBOOK.md na raiz do repositório. O sistema de design reutilizável está em reference/design-system.md desta habilidade; a geometria de loop aberto trabalhada está em reference/patterns/wall-of-slots/. Vídeos-fonte privados não são necessários.

Isso não é hyperframes-video-beats. Essa habilidade coloca cartões sobrepostos em cima de uma cabeça falante. Esta projeta a coisa sobre a qual o vídeo trata.

1 · Os quatro princípios

Um mundo persistente

O vídeo vive em um único espaço, e nunca é redefinido. Tudo o que o espectador já viu ainda existe onde foi deixado, e novo material é adicionado a ele em vez de substituí-lo. Um elemento, uma vez desenhado, nunca é redesenhado, movido ou remarcado.

Todo o resto nesta habilidade depende disso. A câmera não tem para onde ir se o espaço continua mudando, um holofote não significa nada se não houver mais nada na tela, e um loop aberto não pode permanecer aberto em um mundo que é redefinido.

O mundo também precisa valer a pena ficar, então decida a gramática espacial antes de construir qualquer coisa e mantenha-a por todo o tempo de execução. Na construção de referência: esquerda para direita é em direção ao resultado, cima é em direção a um humano e é a única coisa quente na tela, baixo é para um sistema de registro. Um espectador que aprende isso nos primeiros dois minutos lê o resto do vídeo de graça.

Quebre a gramática exatamente uma vez, deliberadamente, para dar significado. O único movimento da direita para a esquerda da construção de referência em dez minutos é um ticket resolvido voltando para a fila nas palavras "taxa de reabertura". Ele chega sem uma palavra porque a direção tinha significado nos três minutos anteriores.

A câmera é a edição

Cortar para um novo gráfico custa ao espectador sua orientação toda vez. Mover-se por um espaço que permanece imóvel não custa nada a eles. Um zoom-in então é lido como "olhe mais de perto a parte da coisa que você já entende", e o zoom-out é onde o trabalho compensa, porque tudo construído até agora ainda está lá.

Trabalhe em três altitudes e mova-se entre as adjacentes:

AltitudeMostraUsado para
Mundoo espaço inteiroorientação, recompensas, "aqui é onde estamos"
Regiãoo subgrafo em discussãoa maior parte do tempo de execução
Detalheum elementoum número, uma mudança de estado, uma decisão

Pular do detalhe para o mundo é desorientador, a menos que seja uma batida de recompensa deliberada, caso em que é o melhor movimento disponível.

Regras que custam uma reconstrução para aprender:

  • Nomeie os enquadramentos como janelas exatas do mundo, não como fatores de escala. Os limites da janela devem cair entre os rótulos. Especificar um enquadramento como "escala 0,6" corta palavras ao meio na borda do quadro.
  • Reutilize a mesma janela para o mesmo propósito. Se o plano de orientação é uma janela específica, use sempre essa janela exata. Enquadramentos quase idênticos são lidos como deriva.
  • Varie a duração com a distância percorrida, não um único predefinido global.
  • Sequencie os movimentos da câmera e os wipes de tela cheia, nunca os sobreponha. Concorrentes, eles guilhotinam o conteúdo. Câmera primeiro, depois wipe.
  • Uma camada de cobertura fica opaca antes que a câmera se mova por baixo dela. Invertido, parte do movimento é exposta e lida como um corte brusco.
  • Nenhum rótulo a menos de 60px da borda do quadro. Um elemento pode sangrar e ser lido como "o mundo continua"; uma palavra cortada no meio de um glifo é lida como um bug. Resolva com posicionamento, não com mascaramento, já que um esfumaçado não pode pegar uma lâmina viajando a ~1800 px/s.
  • Dois movimentos sequenciais no mesmo assunto são lidos como uma falha. Um reenquadramento que termina E DEPOIS um wipe que começa é um zoom, uma parada brusca e um segundo movimento — o cliente chama de "uma falha e uma pausa". Mescle-os em UM ÚNICO gesto: suavização simétrica compartilhada (power2.inOut), pousando no mesmo quadro, então o painel é lido como empurrando a filmagem para o lado. Relacionado: suavizações frontais (power3/4.out) em um movimento de filmagem visível concentram ~90% da viagem e rastejam até parar; reserve-os para entradas de elementos, onde o rastejar é lido como acomodação. (Custou uma revisão sinalizada pelo cliente na introdução do exemplo trabalhado.)

Atenção é um holofote

Exatamente um elemento com brilho total em qualquer momento. Todo o resto já desenhado permanece quieto, mas legível. Não opcional. Esta é a regra que permite que um mundo acumule uma dúzia de elementos sem nunca parecer cheio, e é o que torna o zoom-out legível em vez de opressor.

A hierarquia vem da PROPORÇÃO entre ativo e quieto, nunca de escurecer tudo. O primeiro protótipo da construção de referência tinha o pixel mais brilhante em 101/255 e era ilegível em 960x540; a correção foi tinta mais brilhante, não mais escuro.

EstadoLuminância alvo (Y, 16-235)Opacidade na referência
Traço + rótulo ativos200-2351.0
Contexto, desenhado e ainda relevante120-1500.56
Gastou, já disse o que tinha85-1050.33
Qualquer rótulo, qualquer estadonunca abaixo de 90

A implementação é uma função, chamada a cada batida de narração com os ids que estão sendo mencionados (build_s01.py, lit()):

def lit(t, active, warm=(), dur=0.5, floor=FLOOR):
    active = list(active) + [g + "-l" for g in active if g + "-l" in order]
    for gid in order:
        if gid not in opac:      # nunca desenhado: nada a iluminar
            continue
        tgt = 1.0 if gid in active else (WARM if gid in warm else floor)
        if gid not in active:
            tgt = min(tgt, MUTED.get(gid, 1.0))
        ...

Três detalhes ali são essenciais:

  • Um rótulo sempre herda o estado de seu elemento (a incorporação do sufixo -l). Um elemento iluminado com um rótulo ilegível sob ele é exatamente o defeito que está sendo corrigido.
  • Um adereço que é concluído se aposenta com opacidade 0, via um limite MUTED, não para 0,3. Silenciar para 0,3 deixa confetes inexplicáveis na tela pelo resto da seção. Regra do gerador: emita o mute() antes de qualquer lit() que comece depois, ou o silenciamento é sobrescrito quando sua interpolação é concluída.
  • Eventos de opacidade devem ser emitidos em ordem de linha do tempo ou o rastreador vê estado obsoleto e calcula o alvo errado. Mantenha um guarda seq() que levanta exceção em emissão fora de ordem.
  • Uma autoridade de opacidade por elemento por janela. Duas interpolações simultaneamente ativas conduzindo a opacidade do mesmo elemento para valores diferentes renderizam suavemente em uma seção independente, mas piscam a ~10Hz no mestre montado, onde a interpolação vencedora alterna por quadro. A construção de referência enviou esse defeito em cada encaixe. Quando uma varredura como lit() se sobrepõe a um brilho ou silenciamento explícito, a interpolação que começa depois é a única condutora e a varredura pula esses ids (lit(..., skip=(...))). Verifique: examine as renderizações montadas para picos de luminância de ida e volta de um quadro em cada janela de transição (qa/v4/flicker/qa-flicker.mjs na construção de referência).

Loops abertos são espaciais

Nunca diga "voltaremos a isso". Deixe algo visivelmente incompleto no mundo e retorne a ele. Uma promessa que o espectador pode ver é uma promessa que eles podem sentir pendente.

O mecanismo é idêntico, qualquer que seja a forma:

  1. Plante no gancho, no espaço, na linha que faz a promessa.
  2. Re-exiba em cada limite. Qualquer passagem de seção é um limite. O re-exibição custa cerca de dois segundos e é o mecanismo de retenção; pular é como uma recompensa acaba não recompensando nada.
  3. Avanço visível. O espectador deve ver a incompletude diminuir.
  4. Feche na imagem em que abriu.

Escolha a forma a partir do roteiro:

Forma do roteiroO mundoO que está incompleto
N itens paralelosN encaixes em um eixoslots vazios (veja reference/patterns/wall-of-slots/)
Um processo, profundoo pipeline completo, dispostoum elo quebrado ou ausente
Níveis ou camadasuma pilha que constrói para cimao topo da pilha é um fantasma
Comparaçãoduas colunas em um eixo compartilhadouma coluna vazia, ou um placar não preenchido
Notícia ou anúnciouma linha do tempo, ou um mapa de paisagemo lado direito, o futuro, está em branco
Tutorial ou passo a passoa arquitetura final, fantasmacada nó ainda não construído

Entregar um item ao seu slot é um movimento de câmera ao vivo, ~1,4s, nunca um corte para uma imagem pré-fabricada do estado preenchido. O espectador assiste a coisa que acabaram de aprender se tornar o bloco. Se o vídeo tem um numeral ou contador, gire-o dentro desse mesmo movimento, como um odômetro, com o mesmo início, duração e suavização para ambos os dígitos ou eles se fundem em uma banda no meio da rolagem.

O contador precisa de um nome, não apenas um número. Um numeral no canto diz ao espectador onde estão na sequência, mas não o que o item atual é; no nono minuto, "03" não carrega nada. Emparelhe o numeral com um rótulo de 1-2 palavras nomeando o item atual (SUPORTE, VOZ IA), na mesma química de placa, movendo-se como uma peça fixa rígida com o numeral, trocando dentro da mesma rolagem de odômetro. A revisão do cliente da construção de referência pediu exatamente isso: os visuais estavam bons e o espectador ainda perdia o controle de qual caso de uso estava na tela.

2 · Disciplina

Se não ganha uma palavra, não é desenhado

Toda forma é um elemento rotulado, um conector entre elementos rotulados, o assunto em movimento ou o fundo ambiente. Nada mais.

Isso veio de uma revisão de teste mudo que pontuou compreensão 7/10 e nomeou a causa: o diagrama estava limpo, as decorações não. Uma dúzia de formas não rotuladas desenhadas no mesmo peso e paleta que as significativas, então um espectador iniciante não consegue distinguir sinal de textura e gasta atenção real decodificando coisas que nunca foram feitas para serem decodificadas. Isso é "informação demais" realocado de palavras para formas.

Orçamento: ~20 palavras na tela por seção. Sem frases. Rótulos são 1-2 palavras, abaixo de seu elemento. A seção 1 de referência tem 21 palavras em 84 segundos.

Corolário: um visual de anti-padrão nunca sobrepõe a recomendação. Leve o mundo para perto do preto primeiro, ou coloque o contra-exemplo onde o bom diagrama não está.

Dê ao espectador uma coisa para seguir

Carregue a história em um único assunto em movimento cujo estado muda visivelmente: um chip com linhas de dados e uma barra de pontuação, um documento, uma solicitação. Linhas preenchem, uma barra se move, uma borda muda de cor. Um espectador deve ser capaz de seguir uma seção inteira assistindo a esse único objeto, e ele nunca deve teletransportar-se; ele se move ao longo de conectores desenhados a uma velocidade constante.

Um conjunto de tokens global

Detalhes completos em reference/design-system.md.

TokenValores
Traço1,5 / 2,5 / 4 / 7, e nada mais
Tipo22 / 30 / 42 / 60 / 84
Raio10 / 22 / 40, sempre superelipse(2)

Cinco cores, cinco significados fixos, zero decoração. Quente significa que um humano está envolvido e nada mais é quente. Nunca branco puro para texto; ele halata em fundo escuro.

A falha que isso evita, da revisão técnica da primeira construção: "cada decisão foi tomada localmente e corretamente; nenhuma decisão foi tomada globalmente." 18 pesos de traço e 9 tamanhos de tipo, a maioria deles separados por 0,2, individualmente invisíveis e coletivamente fatais. O olho recebe ruído em vez de hierarquia. Verifique com um linter de tokens que falha a construção.

Movimento

Entradas em cubic-bezier(0.16,1,0.3,1), saídas mais rápidas que entradas, duração varia com a massa para que um nó de 290px e um rótulo de 40px não desacelerem identicamente, e back.out exatamente uma vez por seção, na batida que merece.

Sem cross-fade, nunca. Camadas de tela cheia entram e saem por recorte em um fundo já opaco. Em qualquer instante, um pixel é gráfico ou filmagem.

3 · Contrato de construção

  • Um gerador por seção. scripts/build_<id>.py escreve apenas compositions/<id>.html. Edite o gerador, nunca o HTML gerado. As raízes das seções index-*.html são mantidas manualmente, então as mudanças de enquadramento vão para lá.
  • Módulos compartilhados permanecem compartilhados. Qualquer coisa que define geometria compartilhada é importada por todas as seções. Se as seções são construídas por agentes paralelos, proíba-os de tocar nos módulos compartilhados; geometria divergente silenciosamente quebra cada passagem.
  • Namespace das definições SVG antes da montagem. Cada seção define suas próprias gEdge, shadow, edgeFade. Em um DOM montado, url(#id) resolve para a primeira correspondência na ordem do documento, então, uma vez que uma composição anterior desmonta, cada gráfico posterior pinta nada. Custo na construção de referência: 35 segundos de tela vazia com todos os portões verdes. Só olhando para a renderização montada pegou isso.
  • Tempo tudo para o início das palavras a partir de uma transcrição no nível da palavra, entrando 0,15-0,25s antes da palavra âncora. Nunca divida uma seção uniformemente em batidas.
  • Audite lacunas. Qualquer trecho acima de ~1,5s sem nada acontecendo é uma tela morta; faça o gerador imprimi-los.
  • Deixe ar no corte. O corte agressivo de pausas produz lacunas próximas de zero nos limites das frases que o cliente ouve como "gaguejos" e cortes bruscos. Calibre contra a própria norma do falante: sinalize lacunas de limite de frase que são ~10x mais apertadas que sua mediana (a do falante de referência era 470ms; as junções sinalizadas estavam em 20-40ms) e repare inserindo 4-8 quadros de ar, palavras nunca tocadas. Ar é uma fatia doadora do tom real da sala da trilha com fades de 10ms, nunca anullsrc: silêncio digital contra um piso de -50dBFS é uma queda audível. O vídeo segura o quadro; entre frases, uma cabeça falante está quase imóvel e segurar 4-8 quadros é invisível. Mudanças apenas de inserção deslocam a transcrição deterministicamente, então nenhuma re-transcrição é necessária. As bordas de uma inserção devem respeitar o envelope da fala: encostar tom doador contra uma cauda de palavra em 1ms gera um artefato audível; o ponto de inserção fica no nulo entre palavras, nunca sobre uma transição de fonema. A janela de inserção de ar de 8 quadros garantidos cultiva o hábito correto mesmo onde digital e analógico são indistinguíveis.

As portas de verificação

Antes de exportar qualquer plano, confirme:

PortaFalha se
1 · Mundo persistenteUm elemento é redesenhado, movido ou removido. A gramática espacial muda dentro de uma seção.
2 · Gramática da câmeraUm corte é usado onde um movimento poderia funcionar. Um movimento pula uma altitude. A escala do enquadramento muda sem referência a um elemento.
3 · HolofoteMais de um elemento está com opacidade total. Um elemento gasto cai para opacidade > 0. Um rótulo é ilegível.
4 · Loops abertosUma promessa é declarada verbalmente sem marcação visível. Um loop é reexibido em um limite. A abertura e o fechamento não correspondem.
5 · Disciplina de ornamentosUm elemento não rotulado está presente. Mais de ~20 palavras na tela em qualquer seção. Um token tem peso, tamanho ou raio não definido.
6 · Um assuntoO assunto do vídeo se move em uma trajetória invisível ou a uma velocidade variável.
7 · Temporização da transcriçãoUm elemento chega depois da palavra que ancla. Uma lacuna de > 1,5s sem nenhum evento.
8 · Ar no corteUm espaço entre frases é >= 10x mais curto que o espaço mediano do falante.

Execute a lista de verificação em voz alta com o editor, não em silêncio. O benefício não é a lista; é ouvir o editor dizer "na verdade, não verifiquei isso" antes da exportação.

Individual skills in this repo

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

Habilidades Relacionadas