Communitygithub.com

depth-pov-explainer

Cria um documentário em segunda pessoa de 10 minutos sobre uma criatura usando Claude Code no Windows: canal, fatos, roteiro, voz ElevenLabs v4 com marcadores de áudio, imagens Pixabay, render Remotion e thumbnail.

O que é depth-pov-explainer?

Esta skill automatiza a criação de vídeos completos de 10 minutos do estilo 'Por que você nunca gostaria de encontrar um [ANIMAL]', com animações vetoriais planas em Remotion, narração pela ElevenLabs Eleven v4 e uma ideia visual por frase. Ela gerencia desde a definição da marca do canal (nome, personagem 'você', cores, fonte, estilo de abertura) até a pesquisa de fatos sobre o animal, roteiro estruturado em capítulos, geração de cenas persistentes (~60 cenas), gate de verificação de fatos, narração com marcadores de áudio da ElevenLabs, efeitos sonoros, seleção de vídeos de estoque (Pixabay, NOAA, Pexels e Wikimedia Commons) e renderização final do vídeo. A skill suporta Claude Code no Windows e organiza todo o workspace em `D:\DepthPOV` com scripts Python, biblioteca de componentes Remotion e pastas de assets reutilizáveis. É útil para criadores de conteúdo que desejam produzir vídeos educativos e envolventes sobre animais de forma eficiente, com uma narrativa imersiva em segunda pessoa e elementos visuais dinâmicos.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/LexroAI/depth-pov-explainer/tree/main

Perguntar na sua IA favorita

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

Documentação

Depth POV Explainer

Produz um vídeo de aproximadamente 10 min "Por que você nunca gostaria de encontrar um [ANIMAL]": gráficos de vetores planos animados com Remotion (tudo se move; sem slides estáticos), narrado com ElevenLabs Eleven v4, uma ideia visual por frase. Sempre fale com o usuário em inglês, qualquer que seja o idioma em que escrevem; roteiro, etiquetas e prompts também em inglês americano. Escreva todo JSON/TXT/.env como UTF-8 sem BOM.

Passo 0 - Workspace em D: (executar toda vez, criar o que estiver faltando)

Raiz: D:\DepthPOV (se D: não existir, pergunte ao usuário por outra unidade).

D:\DepthPOV\.env
D:\DepthPOV\studio\            Projeto Remotion (npx create-video@latest studio, Blank template)
D:\DepthPOV\studio\src\lib\    biblioteca visual compartilhada (core.tsx, sets.tsx, art.tsx, ui.tsx)
D:\DepthPOV\tools\             voice.py stock.py stock_pick.py sfx.py
D:\DepthPOV\videos\<slug>\     facts.json script.txt script_tagged.txt beats.json timing.json stock.json packaging.md voice.mp3 out.mp4 FINAL\
D:\DepthPOV\assets\stock\ music\ sfx\ thumbnails\
D:\DepthPOV\brand\brand.json

Empacotado com esta skill (copiar para o workspace quando faltar, nunca sobrescrever cópias locais mais novas): scripts/*.py -> D:\DepthPOV\tools\; remotion-lib/lib/*.tsx e brand.ts -> studio\src\lib\; remotion-lib/stills.mjs -> studio\; remotion-lib/example-blue-whale/ é um vídeo completo e finalizado pelo autor da skill (13 arquivos de capítulo, ~66 cenas persistentes, Main.tsx, Thumb.tsx) para ser lido como implementação de referência, não para copiar cena por cena. A biblioteca usa o nome do canal, cores de destaque e cores do personagem de studio\src\lib\brand.ts, que tools\sync_brand.py gera a partir de brand.json; nunca codifique um nome de canal ou cor em uma cena. Após criar o studio, execute npx remotion add @remotion/media @remotion/google-fonts. Python precisa de requests. Se .env estiver faltando, crie-o com valores vazios e PARE, dizendo ao usuário para abri-lo no Notepad e preencher as chaves:

ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
ELEVENLABS_MODEL_ID=eleven_v4
PIXABAY_API_KEY=

PIXABAY_API_KEY é gratuita: faça login em pixabay.com e copie a chave mostrada em https://pixabay.com/api/docs/ (uma chave cobre vídeos e fotos). Ignore quaisquer chaves extras que um .env antigo possa conter. Nunca imprima valores de chave. Verifique se o Node.js LTS está instalado; instale as skills do agente Remotion uma vez com npx skills add remotion-dev/skills e carregue-as antes de escrever código Remotion. Se o usuário disser "Retenção", ele quer dizer Remotion. Mencione uma vez que Remotion é gratuito apenas para indivíduos e empresas muito pequenas (/remotion-license).

Passo 1 - Marca (apenas na primeira execução, salvo em brand.json; pule se brand.json existir)

Pergunte estas na ordem, uma mensagem cada, sempre com uma recomendação:

  1. Nome do canal. Pergunte se o usuário já tem um nome. Se não, proponha 8 nomes em 3 estilos (misterioso, ex.: "Abyss Files"; explorador, ex.: "Into The Deep"; direto, ex.: "Por que você nunca"): 1-3 palavras, fáceis de dizer em voz alta, sem nomes de canais grandes existentes, sem parecidos com "Depth Theory", que funcionem se o canal depois sair do oceano. Para cada um, dê um @handle correspondente. Diga ao usuário para pesquisar o nome + handle no YouTube antes de confirmar (Claude não pode confirmar disponibilidade). Salve channel_name, handle, tagline.
  2. O personagem "você", recomende um:
    1. Mergulhador (traje laranja, lanterna vermelha na cabeça) - oceano; mais próximo do Depth Theory, menos distintivo.
    2. Piloto de minissubmarino - águas profundas; todo o vídeo emoldurado por uma vigia redonda + HUD (profundidade, oxigênio). Recomendado para um canal só de oceano.
    3. Sobrevivente de naufrágio em jangada - oceano superficial; vista superior da jangada.
    4. Explorador com lanterna de cabeça - selva, cavernas, rios, gelo; círculo de luz na escuridão. Recomendado se o canal expandir além do oceano.
    5. Guarda florestal / biólogo de campo - animais terrestres; binóculos + caderno de campo.
    6. Viajante no tempo - criaturas pré-históricas; contador de anos (-66.000.000).
  3. Cor de destaque + fonte, e o estilo de abertura do canal (mostre 3 exemplos de aberturas frias, o usuário escolhe). Salve {channel_name, handle, tagline, character, look, signature_frame, accent {threat, safe, danger}, character_colors {suit, suit2, stripe, fins, fins_dark, lamp} (barbatanas em uma cor de alta visibilidade), font, opening_style} em brand.json, depois execute python D:\DepthPOV\tools\sync_brand.py para escrever studio\src\lib\brand.ts, e reutilize a cada vídeo. A biblioteca de arte empacotada desenha o mergulhador; para qualquer outro personagem (piloto de sub, explorador, guarda florestal, viajante do tempo) construa um novo componente em art.tsx com as mesmas regras de anatomia (references/visual-style.md). Nunca use a abertura "Picture this." do Depth Theory, sua paleta exata ou design de mergulhador. Use channel_name em: a linha de retorno entre vídeos ("se você está assistindo [channel_name] há um tempo..."), a linha do CTA/tela final, a descrição, e uma pequena logo nos últimos 10 s do vídeo.

Passo 2 - Fatos (antes de qualquer roteiro)

Pesquise o animal na web. facts.json: 25-35 itens {id, claim, number, unit, everyday_comparison, source_url, confidence}. Nenhum superlativo (maior/mais profundo/único/sempre) a menos que uma fonte buscada o afirme. Liste mitos populares e a verdade.

Passo 3 - Roteiro (estrutura fixa; leia references/script-patterns.md primeiro)

Use script-patterns.md para orçamentos de seção, dispositivos e as regras de originalidade: aprenda o ritmo da referência, nunca sua redação. Cada roteiro é escrito do zero a partir dos fatos deste animal; se o animal já foi coberto pela referência (cachalote), evite os ângulos listados lá.

  1. Abertura fria 0:00-0:25. A linha 1 é SEMPRE a abertura característica da marca, curta (menos de 3 s), para que os espectadores aprendam: "Diário de mergulho, entrada [n]. [profundidade]. Ar: [PSI]." A linha 2 em diante é o GANCHO, ainda dentro dos primeiros 7 s: coloque o espectador em perigo agora - algo toca, agarra, circula ou bloqueia a luz, uma forma de tubarão, uma sombra, algo invisível - tempo presente, inexplicado, e mostrado na tela no mesmo instante (silhueta, tentáculo, sombra, olho). Só então o cenário (mergulho noturno, corda, profundidade abaixo), uma REGRA que o espectador confia, e um sinal sensorial que a quebra e sobe em direção a você. Nunca gaste os primeiros 7 s em paisagem calma ou logística. Plante o detalhe sensorial para um retorno no meio do vídeo e ecoe o perigo da abertura mais tarde (o encontro real, o perto). Sem introdução.
  2. Reenquadramento: animais que as pessoas geralmente temem, conceda, depois três afirmações para [ANIMAL]; termine com "...por que você nunca gostaria de encontrar um."
  3. Cinco capítulos: TAMANHO, COMIDA, COMO CAÇA/SENTE, CÉREBRO/COMPORTAMENTO, JÁ ATACOU PESSOAS. Cada um termina com uma pergunta que o próximo abre. Cada número recebe uma comparação cotidiana.
  4. Retorno do detalhe plantado por volta de 3:30.
  5. "O que você faria realmente?": 4 opções eliminadas uma a uma, uma piada seca cada, veredito.
  6. Reviravolta 1: quase nunca ataca pessoas. Reviravolta 2: o perigo real é o contrário.
  7. Papel ecológico. 8. Fechamento: repita a REGRA com novo significado. 9. CTA: pergunte qual criatura cobrir a seguir, nas próprias palavras do canal de brand.json (nunca copie o "I do actually read them" do Depth Theory). Voz: segunda pessoa (35+ "você"), frases com menos de 20 palavras, 5-7 metáforas de piada seca, 1.600-1.800 palavras a ~170 ppm. Sem "vamos mergulhar", sem emoji. Salve como script.txt (sem tags).

Passo 4 - Cenas e batidas (leia references/visual-style.md primeiro)

O vídeo tem cerca de 60 CENAS persistentes, não um cartão por frase. scenes.json: {scene_id, chapter, setting (deep|mid|surface-split|paper|radar|xray|black|stock), camera (drift|push-in|follow-dive|tilt|top-down|macro), cast (illustrated subjects), beats:[...]}. Uma cena dura 6-20 s e cobre 2-6 frases; cada frase ADICIONA um elemento à cena (sujeito entra, linha de medida é desenhada, contador corre, etiqueta aparece, carimbo bate, FX dispara) em vez de substituir. Batida = {id, scene_id, text, add (o que aparece/muda), label (0-5 palavras ou vazia; nunca repete a narração), label_pos (top|under-subject|near:), accent, fact_ids, stock_query?}. Use o kit de ferramentas de referência por tipo de frase: número -> diagrama na cena (linha de medida, metro, contador, array de ícones, grade, pizza); comparação -> objeto entra ao lado do sujeito (ônibus entra, elefantes aparecem); história -> adereços e conjuntos de superfície em papel/sepia; piada -> adereço ou figura de palito (recibo, formulário, quadro branco, carimbo, diálogo de UI); perigo -> etiqueta vermelha + FX de impacto; percepção -> modo radar/raio-x. O personagem "você" aparece na abertura fria, no retorno, no capítulo de opções e no fechamento, sempre minúsculo ao lado do animal.

Passo 5 - Gate de fatos (bloqueio)

Tabela: sentence | fact_id | source | OK/FIX para cada frase com número ou superlativo. Corrija todas as linhas FIX e mostre a tabela ao usuário antes de gastar créditos do ElevenLabs.

Passo 6 - Voz (Eleven v4 + marcadores de áudio)

  • Crie script_tagged.txt adicionando marcadores de áudio v4 como o ElevenLabs Auto-tag faz: [thoughtful], [curious], [uneasy], [dry], [whispers], [short pause], [long pause]. Máximo de um marcador a cada 2-3 frases; sussurro/pausa em torno de revelações e do retorno; [dry] antes de piadas; nenhum marcador dentro de uma frase que carregue uma estatística. Mostre uma amostra de 10 linhas ao usuário uma vez por canal para aprovar a densidade de marcadores.
  • Chame POST https://api.elevenlabs.io/v1/text-to-speech/{ELEVENLABS_VOICE_ID}/with-timestamps com model_id de .env (eleven_v4). Limite de 10.000 caracteres por solicitação: divida em limites de capítulo (geralmente 2 solicitações), passe previous_text/next_text para continuidade, concatene com ffmpeg.
  • Se with-timestamps for rejeitado para v4, use o endpoint simples, depois ElevenLabs Forced Alignment (POST /v1/forced-alignment) com o áudio + script.txt (tags removidas).
  • Mapeie tempos de palavras para frases -> timing.json {beat_id, start_s, end_s, start_frame, end_frame} a 30 fps.

Passo 6b - Efeitos sonoros (ElevenLabs Sound Effects, sem necessidade de CapCut)

Mantenha uma biblioteca reutilizável de SFX em D:\DepthPOV\assets\sfx\ gerada com POST https://api.elevenlabs.io/v1/sound-generation {text, duration_seconds, prompt_influence 0.6} usando o mesmo ELEVENLABS_API_KEY (tools/sfx.py; apenas arquivos faltantes são gerados, então créditos são gastos uma vez). Conjunto principal: whoosh_soft, whoosh_deep, pop_soft, tick_ui, counter_roll, stamp, paper_slide, impact_heavy, splash_big, bubbles, sonar_ping, low_hum, whale_moan, heartbeat_slow, riser_tension, scan_beep, warning_beep, strike_line, gulp, boat_motor; adicione sons específicos de criaturas quando necessário. Normalize cópias para -20 LUFS em studio/public/sfx/. Coloque cada SFX na ação a que pertence (entrada de elemento, contador, carimbo, impacto, mudança de cena) com <Sfx at=... vol=...> dentro da cena, volume 0.3-0.6, nunca mais que um por segundo; a voz permanece no topo.

Passo 7 - Imagens de estoque (buscar 6-10 clipes, 3-6 s cada, nos picos emocionais; máximo 8% do tempo de execução)

Fontes, nesta ordem (apenas estas; nunca rips de YouTube/TikTok, filmagens documentais, ou qualquer coisa marcada como "uso editorial apenas"):

  1. Pixabay (automático, API). Uma PIXABAY_API_KEY serve vídeos https://pixabay.com/api/videos/?key=...&q=... e fotos https://pixabay.com/api/?key=...&q=.... Máximo de 100 solicitações/60 s; cacheie cada resposta por 24 h em assets/stock/_cache; sem downloads em massa. Ferramentas: tools/stock.py, tools/stock_pick.py.
  2. NOAA (manual, melhor para a espécie real). A NOAA não tem API de vídeos de estoque. Claude encontra os clipes (páginas de espécies e galeria de vídeos da NOAA Fisheries, NOAA Ocean Exploration, NOAA Photo Library, uploads próprios da NOAA no Wikimedia Commons) e dá ao usuário uma lista numerada: link direto da página, o que o clipe mostra, o slot que preenche, a linha de crédito exata e o arquivo a ser selecionado (maior MP4, idealmente 1080p). O usuário baixa para assets/stock//noaa/. Filmagens feitas por funcionários da NOAA são geralmente de domínio público, mas leia cada página: muitos clipes de baleia são filmados sob uma permissão de pesquisa ou por um contratado e exigem uma linha de crédito como "NOAA Fisheries, permissão #XXXX" ou o nome do fotógrafo; se uma página restringir o reuso, pule o clipe. Após o download, SEMPRE leia a placa de abertura e os créditos finais do arquivo: as placas de B-roll da NOAA Fisheries dizem "All footage courtesy of NOAA... Please credit NOAA Fisheries" mais qualquer número de permissão (seguro); filmes educacionais (ex.: Ocean Today) frequentemente listam contribuidores externos, como produtoras ou agências de estoque, nos créditos finais, então suas imagens NÃO são de domínio público e devem ser rejeitadas; também rejeite arquivos com legendas ou logotipos queimados. Use apenas os segmentos cuja placa nomeie a espécie alvo (pacotes de B-roll misturam espécies), e diga "NOAA não endossa este canal" na descrição. Nunca use o logotipo da NOAA.
  3. Pexels (links manuais). A emissão de chaves de API foi pausada quando verificado pela última vez (novembro de 2026), então Claude pesquisa pexels.com/videos (Claude no Chrome ou pesquisa web) e dá ao usuário links diretos de páginas de clipes com o que baixar (Full HD 1920x1080) em assets/stock//pexels/. Baixar alguns clipes manualmente para um vídeo é aceitável sob a licença Pexels (uso comercial permitido); sem raspagem em massa ou scriptada. Se uma PEXELS_API_KEY aparecer depois em .env, use a API (cabeçalho Authorization: <key>, GET https://api.pexels.com/v1/videos/search?query=...&orientation=landscape&size=medium&per_page=.., 200 solicitações por hora).
  4. Wikimedia Commons (manual, ocasional). Apenas arquivos com licença clara PD / CC BY / CC BY-SA; registre autor + licença. Coloque clipes onde a referência coloca: logo após a abertura fria (o animal real ou um mergulhador), em afirmações "mundo real" (salto, grupo, navio, caça à baleia, aéreo), e na reviravolta/ecossistema; espalhe-os (nunca 3 seguidos). Para cada slot, pesquise 3-5 sinônimos, mantenha apenas acertos cujas tags/títulos contenham o sujeito, então extraia um quadro por candidato com ffmpeg e OLHE para ele; rejeite espécies erradas (uma jubarte não é uma baleia azul) e imagens fora do tópico. Um clipe de uma espécie diferente só pode ser usado para uma linha geral ("grandes baleias") com uma nota na tela "(mostrado: baleia jubarte)". Graduou clipes mais escuros/mais frios para corresponder à paleta, dissolução de desfoque de 8 quadros para entrar e sair. Créditos são obrigatórios para cada fonte. Cada clipe mostra um pequeno crédito na tela, inferior esquerdo, por sua duração; quando o mesmo clipe volta, o crédito reaparece 0,5 s depois. Sempre inclua uma seção de créditos em packaging.md: fontes de terceiros com atribuição precisa ("Clip de [sujeito] cortesia de...") e crie cenas credit_*. Fim. Créditos obrigatórios na descrição do YouTube: "Onde a NOAA é a fonte, "NOAA Fisheries não endossa este canal ou seu conteúdo" E TODAS as atribuições de licença CC (BY 4.0, BY-SA 4.0) ligadas ao arquivo original.

Passo 8 - Música (apenas biblioteca local de 5 faixas)

Nunca baixe música. Apenas reutilize a pasta assets/music/ que você cria na primeira execução. Ferramentas: tools/music.py copia 5 faixas selecionadas pelo usuário de suas pastas de música local. O usuário especifica um diretório local contendo arquivos .mp3 ou .wav; music.py lista e deixa o usuário escolher 5. Nomeie-as music_01.mp3 .. music_05.mp3. Se assets/music/ já tiver 5 arquivos, pule. Coloque uma faixa na linha do tempo: D:\DepthPOV\studio\public\music\ como music_xx.mp3. Use <Music src={/music/music_02.mp3} volume={0.15} startAt={0}/> no Remotion. Volume muito baixo (0.08-0.20); fade in/fade out de 3 s; evite sobrepor faixas. Ajuste a música para corresponder ao tom de cada capítulo.

Passo 9 - Renderização Remotion (verificação de segurança)

PASSO 9 é um GATE DE SEGURANÇA antes de renderizar. Sempre abra Main.tsx no tempo e leia a composição 'main'. Ainda no tempo, edite Main.tsx para que o usuário possa inspecionar. Verifique:

  • Duração = Math.ceil(timing[timing.length-1].end_frame * 1.02).
  • 3 camadas: 'main' compõe 13 arquivos de capítulo externos; cada capítulo tem um <AbsoluteFill> RGB tempo real (0,0, frame) para carregar um fade-in/fade-out em vez de ; cada capítulo é invocado pelo time (fim do anterior).
  • Cada cena é uma pilha de componentes visuais que mudam a cada batida; 2-3 batidas por arquivo de cena.
  • Tamanho: 1920x1080, fps: 30, codec: h264, renderizador: webgl. Saída: out.mp4 em D:\DepthPOV\videos\<slug>\out.mp4.
  • Pegue o arquivo de timing e o áudio; a biblioteca autossincroniza cenas e batidas.
  • Use await npx remotion render no final.
  • Por último, a miniatura: nova composição 'thumbnail' em Root.tsx (1920x1080, fotograma chave do vídeo + texto grande em negrito "Por que você nunca gostaria de encontrar um [ANIMAL]" com destaque da marca). Renderize com npx remotion still para D:\DepthPOV\videos\<slug>\thumbnail.png.
  • AVISO: Remotion é gratuito apenas para indivíduos e empresas muito pequenas. Leia /remotion-license.

Passo 10 - Versão de 2 min (bônus, na pasta min/

Uma remontagem de 2 min (apenas os melhores momentos do roteiro): abertura, 3 melhores alegações do capítulo, retorno, opções, reviravolta, encerramento. Coloque na pasta D:\DepthPOV\videos\<slug>\min\ com seu próprio Main.tsx, timing.txt (segundos), e áudio separado para que o usuário possa postá-lo como Short.

Empacotamento e descrição

Crie packaging.md: ordem de títulos dos capítulos, fontes de terceiros com atribuição precisa ("Clip de [sujeito] cortesia de..."), créditos de música ("Música cortesia de..."), e créditos de narração ("Narração de [voz] com ElevenLabs"). Junte tudo, escreva descrição do YouTube em 2-3 parágrafos: versão curta, linha de retorno, endosso do animal, agradecimentos a apoiadores, e créditos obrigatórios (NOAA, Pixabay, Pexels, Wikimedia).

Guia de referência visual

Veja references/visual-style.md para:

  • Diretrizes de anatomia: distâncias, cores de destaque, layout para mergulhador, sub, etc.
  • Padrões de cena: tipos de cena com exemplos.
  • Transições: fade/dissolução de desfoque, wipe.
  • Regras de layout: largura de margem 4%.

Exceções e lembretes

  • Usuário diz "Retention" -> significa Remotion. Corrija uma vez por conversa.
  • Usuário diz "quadro de 2 min" -> significa refazer como 2 min.
  • Verifique a instalação do Node.js antes de qualquer comando npm/remotion.
  • Se o usuário fornecer uma imagem de logotipo JPG salva localmente, use-a como bug.
  • Ao mostrar uma imagem ao usuário, sempre escreva primeiro o prompt do gerador na resposta e depois a imagem. NÃO escreva um prompt diferente do prompt da imagem.
  • NÃO use <Suspense> em componentes Remotion. Em vez disso, use delayRender() / continueRender().
  • A pasta de referência remotion-lib/example-blue-whale/ contém um vídeo completo de baleia azul de 10 min como implementação de referência. Leia seus arquivos, não seus nomes de cena; cada cena pode ser reutilizada com dados diferentes, desde que sejam retrabalhadas para o novo animal. A biblioteca tem um sistema de cor de destaque que deve ser usado em vez de codificar valores.
  • Todo arquivo de cena deve ser <NumberedChapter> com seu próprio AbsoluteFill e lógica de temporização, para que a composição principal possa chamá-los do jeito certo.

Ferramentas

  • tools/sync_brand.py - regenera brand.ts de brand.json após toda edição de marca
  • tools/stock.py - pesquisa Pixabay, gerencia cache de 24 h
  • tools/stock_pick.py - ferramenta CLI interativa para selecionar clipes
  • tools/voice.py - chama ElevenLabs TTS, divide em pedaços, concatena
  • tools/sfx.py - gera SFX se perderem, normaliza

Pós-produção

PASSO FINAL: após a renderização, abra a saída em um reprodutor local (VLC)

Licenças e Permissões

  • Remotion: /remotion-license
  • Pixabay: royalty-free, atribuição não exigida mas apreciada
  • Pexels: licença Pexels (atribuição exigida)
  • Wikimedia: CC BY / CC BY-SA / PD (atribuição exigida)
  • NOAA: domínio público com atribuição
  • ElevenLabs: licença comercial (assinatura necessária)

Habilidades Relacionadas