Communitygithub.com

igm61799-cloud/zoom-explainer-3d

Crie um vídeo 3D explicativo em 'zoom infinito' (MP4) onde uma única câmera contínua percorre muitas ordens de grandeza, com uma medição ao vivo na tela e objetos familiares lado a lado para dar escala. Tudo é desenhado por código (Three.js, Chrome headless na GPU, ffmpeg), sem modelos de geração de vídeo.

O que é zoom-explainer-3d?

Esta skill gera vídeos explicativos 3D de alta qualidade que demonstram escalas de tamanho de forma visual e intuitiva, similar ao clássico 'Powers of Ten'. Ela é construída sobre um template Three.js que resolve os desafios técnicos de zoom contínuo através de múltiplas ordens de grandeza, mantendo precisão numérica e gerando detalhes procedurais que mudam conforme a escala. O fluxo de trabalho incentiva a pesquisa rigorosa das dimensões reais, a criação de um storyboard com objetos de escala familiares (como grãos de sal, células, átomos) e a renderização frame a frame usando a GPU para acelerar o processo. O resultado é um vídeo MP4 sem cortes, com uma barra de medição ao vivo, um contador de halvings/doublings e rótulos que identificam o que está sendo visto. A skill suporta tanto zoom para dentro (cada vez menor) quanto zoom para fora (cada vez maior), e pode incluir narração opcional sincronizada com os marcos visuais. É ideal para criadores de conteúdo, educadores e divulgadores científicos que precisam comunicar conceitos de escala de forma clara e impactante.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/igm61799-cloud/zoom-explainer-3d/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

3D zoom explainer

Um formato que explica escala melhor do que qualquer gráfico: comece em um objeto que todos conhecem, voe para dentro dele sem um único corte, mantenha um número na tela que diga ao espectador até onde ele foi, e termine com um fato inesperado. O resultado de referência para esta skill é "Nothing is really sharp": uma lâmina de barbear, 26 divisões pela metade, um átomo de ferro, e a informação de que sua aresta ainda tem cerca de 300 átomos de largura.

assets/template/ é esse projeto finalizado. Comece a partir dele em vez de um arquivo vazio: as partes difíceis (zoom de oito ordens de grandeza sem perda de precisão, detalhes que mudam com a escala, profundidade de campo, um renderizador determinístico) já estão resolvidas ali e levaram várias rodadas para ficar corretas.

A fórmula

Mantenha todos os cinco. Cada um está fazendo trabalho.

  1. Uma tomada contínua. O ponto principal é que o espectador nunca perde a referência. Um corte redefine sua percepção de escala.
  2. Uma medição ao vivo. Uma barra fina ancorada no assunto, um número que muda a cada quadro, uma contagem de divisões pela metade (ou duplicações) e duas ou três palavras para o que está à vista. A barra é a única coisa que o espectador precisa ler, então ela deve ser honesta: seu comprimento na cena realmente é o número mostrado.
  3. O assunto muda de caráter em cada escala. Polimento se torna marcas de retífica, depois lascas, depois grãos cristalinos, depois uma borda arredondada, depois átomos. Se a superfície parece igual por três segundos, o zoom parece que nada está acontecendo.
  4. Objetos para escala. À medida que o zoom passa por cada tamanho, um objeto familiar daquele tamanho fica ao lado do assunto com seu nome e tamanho: grão de sal, cabelo, glóbulo vermelho, bactéria, vírus, transistor, anticorpo, DNA. Eles transformam um número abstrato em "menor que um vírus".
  5. Um desfecho. Volte rapidamente para onde começou e mostre o único número para o qual a viagem foi feita.

Fluxo de trabalho

1. Pesquise antes de modelar

O vídeo só vale a pena ser feito se for verdadeiro. Pesquise as dimensões reais (busca na web, fontes primárias quando possível) e anote, para o assunto e para cada objeto de escala: o tamanho, a fonte e qualquer simplificação que você esteja fazendo. A geometria é então construída a partir desses números, para que a imagem não se afaste dos fatos. Reporte as fontes e simplificações ao usuário no final; será solicitado.

Escolha de 6 a 9 objetos de escala, cada um pelo menos cerca de 3x menor que o anterior. Mais próximos que isso e seus rótulos colidem; mais distantes que cerca de 30x e a tela fica vazia por segundos.

2. Mostre o plano quando for útil

Se o usuário pediu para ver o plano primeiro, ou se o briefing deixa escolhas reais em aberto (narração ou silencioso, idioma, qual é o desfecho), forneça uma pequena tabela: tempo, escala, o que está à vista, objeto para escala. Caso contrário, prossiga; um plano que ninguém pediu só atrasa a primeira renderização.

3. Configure o projeto

cp -r <skill>/assets/template <project>/ && cd <project> && npm install
node render.mjs --stills 1,10,20,30,40

O segundo comando deve imprimir o nome da GPU e escrever cinco JPEGs em out/. Se ele reportar SwiftShader ou llvmpipe, a renderização está na CPU e levará horas: corrija as flags da GPU antes de prosseguir (veja references/pitfalls.md).

4. Adapte a cena

main.js é um arquivo único, em seções. Leia references/techniques.md antes de mudar algo estrutural; ele explica por que cada parte é construída da maneira que é. O que geralmente muda para um novo tópico:

Seção em main.jsO que substituir
constantsDados físicos em metros, tamanho inicial L0, número de divisões HMAX, linha do tempo
subject surfaceA seção transversal prof(), o recorte do contorno, a tabela de características da superfície FEATS (comprimento de onda, tipo, intensidade)
finest scaleA rede atômica (ou o que quer que seja o último estágio)
things for scaleA lista addObj(name, sizeText, sizeInMetres, geometry, material, placement)
overlayLABELS (o que está à vista em cada nível de zoom), a legenda final
camera keysK_AZ, K_EL, K_TY, K_D, K_AP como funções do nível de zoom

Para um assunto com formato diferente (um chip, uma folha, uma folha de papel), mantenha a mecânica e substitua o perfil e as características. Para um zoom para fora, execute a mesma linha do tempo ao contrário e diga "dobrado".

5. Olhe os stills antes de renderizar o filme

Renderize de 8 a 10 stills distribuídos ao longo da linha do tempo, organize-os em folhas de contato com ffmpeg e leia-os. Depois corrija o que você vê e repita. Este ciclo é de onde vem a qualidade; todo problema na primeira versão do filme de referência era visível nos stills e nenhum deles era visível no código. Verifique em particular:

  • Exposição. A primeira passagem quase sempre estoura. Metal deve ser principalmente escuro com realces definidos.
  • Qualquer coisa cortada pela borda do quadro, especialmente objetos de escala perto do topo.
  • Rótulos sobre áreas claras ou uns sobre os outros. Mantenha o rótulo de medição em preto vazio.
  • Se cada estágio parece com o que seu rótulo diz. Se o rótulo diz "grãos" e a imagem é listras, um dos dois está errado.
  • O primeiro e o último quadro, já que esses são a miniatura e a conclusão.
ffmpeg -y -i a.jpg -i b.jpg -i c.jpg -i d.jpg -filter_complex "[0][1]hstack[t];[2][3]hstack[u];[t][u]vstack,scale=1920:-1" sheet.jpg

6. Renderize e verifique o resultado

node render.mjs --full --o video.mp4            # adicione --audio vo.wav se houver narração

Execute em segundo plano; um filme de 45 segundos em 1080p leva alguns minutos em uma GPU discreta. Depois verifique o arquivo em si, não os stills que você fez antes: verifique duração e tamanho, extraia uma grade de visão geral e extraia seis quadros consecutivos de uma seção movimentada para procurar cintilação. Detalhes processuais finos comprimem mal, então espere arquivos grandes e faça uma cópia menor quando necessário:

ffmpeg -i video.mp4 -vf "fps=1/3,scale=640:-1,tile=4x4" -frames:v 1 overview.jpg
ffmpeg -ss 13 -i video.mp4 -vf "crop=960:540:480:270,tile=3x2" -frames:v 1 consecutive.jpg
ffmpeg -i video.mp4 -vf scale=1280:720 -c:v libx264 -preset slow -crf 25 -maxrate 4200k -bufsize 8400k small.mp4

Diga claramente o que você verificou e o que não verificou. Grades de quadros provam que a imagem está correta; elas não provam que o movimento parece correto, então diga que o usuário deve assistir.

Padrões

  • Silencioso. Sem música, sem efeitos sonoros, sem narração a menos que solicitado. O formato se sustenta sozinho, e a referência da qual veio não tinha narração.
  • Texto é apenas dados e nomes. A medição, a contagem de divisões, o que está à vista, os nomes e tamanhos dos objetos de escala, um número final. Se a narração for adicionada, remova todo rótulo que a voz já diz, porque ler e ouvir as mesmas palavras divide a atenção.
  • 1920x1080, 30 fps, 40 a 50 segundos, renderizado a 1.5x e reduzido. Para vídeo vertical, mude W e H e verifique cada still novamente; a composição não se transfere sozinha.
  • Rótulos no idioma do público do usuário, que nem sempre é o idioma em que estão conversando. Pergunte se não estiver claro.

Adicionando uma narração

Apenas quando solicitado. Escreva o roteiro como linhas curtas que pertencem a um estágio cada, gere ou receba o áudio, obtenha as temporizações das palavras (faster-whisper funciona bem) e então direcione o zoom a partir do áudio: o nível de zoom se torna uma função keyframed do tempo que pausa enquanto uma linha explica um estágio e viaja entre as linhas. Passe o áudio para render.mjs --audio. Deixe algo pequeno acontecer durante cada pausa (um varredura de luz, um objeto chegando, átomos vibrando), caso contrário um zoom pausado parece congelado.

Arquivos de referência

  • references/techniques.md - como o template funciona e por que: escala em torno do ponto focal, detalhe processual com janela de escala, impostores esféricos, profundidade de campo, objetos ancorados no espaço físico, o renderizador determinístico. Leia antes de mudanças estruturais.
  • references/pitfalls.md - falhas já encontradas e suas correções. Leia quando uma renderização parecer errada ou uma ferramenta se comportar mal.
  • MASTER_PROMPT.md - um prompt preenchível para iniciar um novo vídeo, além de ideias de tópicos que se encaixam na fórmula.

Habilidades Relacionadas