Communitygithub.com

ccreator-space/video-storytelling

Projete e construa a camada visual de um vídeo longo com cabeça falante como um mundo persistente pelo qual a câmera se move, em vez de uma sequência de gráficos separados.

O que é video-storytelling?

Esta skill (para agentes de IA como Claude Code, Cursor ou Codex) ensina a construir a camada visual de vídeos longos com cabeça falante (notícias, tutoriais, deep dives) de forma que o espectador permaneça orientado mesmo após nove minutos. Em vez do pensamento tradicional de 'cena' (que troca de gráfico a cada poucos segundos, forçando o espectador a reiniciar a compreensão), a skill propõe um **mundo persistente único** onde tudo o que foi desenhado continua existindo. Os quatro princípios fundamentais são: mundo persistente, câmera como edição (movendo-se em três altitudes: mundo, região e detalhe), atenção como um foco de luz (apenas um elemento em brilho total por vez) e loops abertos espaciais (promessas visuais que são retomadas). A disciplina inclui: desenhar apenas o que é mencionado, usar um único token global (pesos de traço, tamanhos de fonte, raios), evitar cross-fade e seguir um contrato de construção rigoroso (um gerador por seção, módulos compartilhados, tempo baseado em transcrição de palavras). O resultado é um vídeo que parece profissional e não 'feito por IA', eliminando a confusão visual comum.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ccreator-space/edit-flow/tree/HEAD/.agents/skills/video-storytelling

Perguntar na sua IA favorita

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

Documentação

Storytelling visual (Video storytelling)

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

A falha que isso substitui é o pensamento de 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 é o culpado, e é por isso que o feedback volta como vago "confuso" ou "muita coisa acontecendo" 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 skill; a geometria de loop aberto trabalhada está em reference/patterns/wall-of-slots/. Vídeos de origem privados não são necessários.

Isso não é hyperframes-video-beats. Essa skill 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 rotulado novamente.

Todo o resto nesta skill depende disso. A câmera não tem para onde ir se o espaço continua mudando, um foco de luz 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 se redefine.

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 toda a duração. Na construção de referência: da esquerda para a direita é em direção ao resultado, para cima é em direção a um humano e é a única coisa quente na tela, para 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 na construção de referência em dez minutos é um ticket resolvido voltando para a fila nas palavras "taxa de reabertura". Ele pousa sem uma palavra porque a direção significava algo nos três minutos anteriores.

A câmera é a edição

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

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

AltitudeMostraUsado para
Mundoo espaço inteiroorientar, 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 um batida de recompensa deliberada, caso em que é o melhor movimento disponível.

Regras que custam uma reconstrução cada uma 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, sempre use essa janela exata. Enquadramentos quase idênticos são lidos como deriva.
  • Varie a duração com a distância percorrida, não um predefinido global.
  • Sequência de câmera e wipe de tela cheia, nunca sobreposição. 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 abrupto.
  • 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 do glifo é lida como um bug. Resolva com posicionamento, não com mascaramento, já que um degradê não consegue 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 gesto: atenuação simétrica compartilhada (power2.inOut), pousando no mesmo quadro, para que o painel pareça estar empurrando a filmagem para o lado. Relacionado: atenuações frontais (power3/4.out) em um movimento de filmagem visível carregam ~90% do deslocamento na frente e rastejam até parar; reserve-as para entradas de elementos, onde o rastejar é lido como acomodação. (Custou uma revisão sinalizada pelo cliente na introdução do exemplo trabalhado.)

A atenção é um foco de luz

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

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

EstadoLuma alvo (Y, 16-235)Opacidade na referência
Traço + rótulo ativos200-2351.0
Contexto, desenhado e ainda relevante120-1500.56
Gastou, disse o que tinha que dizer85-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 falados (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 para 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 são essenciais aí:

  • Um rótulo sempre herda o estado do seu elemento (a incorporação do sufixo -l). Um elemento iluminado com um rótulo ilegível é o defeito exato que está sendo corrigido.
  • Um adereço que terminou aposenta-se para opacidade 0, via um limite MUTED, não para 0.3. Silenciar para 0,3 deixa confetes inexplicados na tela pelo resto da seção. Regra do gerador: emita o mute() antes de qualquer lit() que comece depois, ou o mudo é sobrescrito quando sua interpolação é concluída.
  • Eventos de opacidade devem ser emitidos em ordem de timeline ou o rastreador vê estado obsoleto e calcula o alvo errado. Mantenha um guarda seq() que levanta uma exceção em emissão fora de ordem.
  • Uma autoridade de opacidade por elemento por janela. Duas interpolações simultaneamente ativas dirigindo 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 dock. Quando uma varredura como lit() se sobrepõe a um brilho explícito ou silenciamento, a interpolação que começa depois é o único condutor e a varredura pula esses ids (lit(..., skip=(...))). Verifique: escaneie as renderizações montadas para pops de luminância 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. Reexiba em cada limite. Qualquer transição de seção é um limite. Reexibir custa cerca de dois segundos e é o mecanismo de retenção; pular é como uma recompensa acaba não recompensando nada.
  3. Avance visivelmente. O espectador deve ver a incompletude encolher.
  4. Feche na imagem em que você abriu.

Escolha a forma a partir do roteiro:

Forma do roteiroO mundoO que está incompleto
N itens paralelosN encaixes em uma espinhaslots vazios (veja reference/patterns/wall-of-slots/)
Um processo, profundoo pipeline completo, dispostoum link 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ícias ou anúnciouma linha do tempo, ou um mapa de paisagemo lado direito, o futuro, está em branco
Tutorial ou construção guiadaa arquitetura finalizada, fantasiadatodo 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 acabou de aprender se tornar o bloco. Se o vídeo tem um numeral ou contador, role-o dentro desse mesmo movimento, como um odômetro, com o mesmo início, duração e atenuação para ambos os dígitos ou eles se fundem em uma banda no meio do rolamento.

O contador precisa de um nome, não apenas um número. Um numeral no canto diz ao espectador onde ele está na sequência, mas não o que o item atual é; nove minutos depois, "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 um único acessório rígido com o numeral, trocando dentro do mesmo rolamento de odômetro. A revisão do cliente da construção de referência pediu exatamente isso: os visuais eram 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 ganha desenho

Cada forma é um elemento rotulado, um conector entre elementos rotulados, o assunto viajante ou o fundo ambiente. Nada mais.

Isso veio de uma revisão de teste de silêncio que pontuou compreensão como 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 de primeira viagem não consegue distinguir sinal de textura e gasta atenção real decodificando coisas que nunca foram feitas para serem decodificadas. Isso é "muita coisa acontecendo" realocado de palavras para formas.

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

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

Dê ao espectador uma coisa para seguir

Carregue a história em um único assunto viajante cujo estado muda visivelmente: um chip com linhas de dados e uma barra de pontuação, um documento, uma solicitação. As 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; 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 superellipse(2)

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

A falha que isso previne, da revisão de ofício 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 0.2 de distância, 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 de forma idêntica, e back.out exatamente uma vez por seção, na batida que merece.

Nunca cross-fade, jamais. 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 da seção 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 defina geometria compartilhada é importada por cada seção. Se as seções são construídas por agentes paralelos, proíba-os de tocar em módulos compartilhados; geometria divergente silenciosamente quebra cada passagem.
  • Namespace os defs SVG antes da montagem. Cada seção define seus próprios gEdge, shadow, edgeFade. Em um DOM montado url(#id) resolve para a primeira correspondência na ordem do documento, então assim que uma composição anterior desmonta, todos os gráficos posteriores pintam nada. Custo na construção de referência: 35 segundos de tela vazia com todos os portões verdes. Apenas olhar a renderização montada o pegou.
  • Tempo tudo para inícios de 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 quase zero nos limites das frases que o cliente ouve como "gaguejos" e cortes abruptos. Calibre contra a norma do próprio orador: sinalize lacunas de limite de frase que são ~10x mais apertadas que sua mediana (o orador de referência tinha 470ms; as junções sinalizadas estavam em 20-40ms), e repare inserindo 4-8 quadros de ar, as palavras nunca tocadas. Ar é uma fatia doadora do tom de sala real da faixa 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 parada e segurar 4-8 quadros é invisível. Mudanças apenas de inserção deslocam a transcrição deterministicamente, então nenhuma retranscrição é necessária. As bordas de uma inserção devem respeitar o envelope da fala: colocar tom doador contra o final de uma palavra em 1ms pode criar um clique se o tom de fundo da fala contém uma plosiva; a referência usa fades de 10ms e valida com um pico de -12dBFS, nunca com um estalo audível.

Habilidades Relacionadas