explainer-editor: uma explicação em um palco acima do orador
O usuário fornece uma gravação vertical de si mesmo falando para a câmera. Este skill os coloca em um quadro na parte inferior de um palco escuro iluminado como um cenário, com a cabeça saindo dele, e desenha o que eles explicam acima deles, enquanto falam, com o movimento e a luz de uma edição no After Effects: cenas que uma câmera percorre, figuras que voam, sobem e surgem com desfoque de movimento, cada uma com sua sombra e seu brilho, uma nova coisa no palco a cada segundo ou mais, um som em cada movimento. Suas palavras correm entre o palco e eles, uma de cada vez. Algumas vezes por minuto, um flash de câmera corta para eles em tela cheia.
A aparência de um curta está definida: § A linguagem explicativa (abaixo do pipeline). Foi
medida quadro a quadro em um curta que o usuário editou para um cliente (108 s, um guia para ganchos de texto), depois
revisada em uma primeira edição (2026-10-05: "não é After Effects, não é motion design, poucas coisas
na tela, é chato, faltam os whooshes"), depois na segunda ("muito melhor; não há sombras e brilhos
pequenos o suficiente atrás dos elementos, o fundo totalmente preto não os destaca; aqui está um
pacote para muitos mais sons muito leves"): cada linha de ambos os veredictos agora é uma regra. Comece cada nova
gravação a partir dela (init.sh a estrutura); não a reabra.
Este skill roda no motor do skill short-editor. Sua renderização, mixagem, máscara de pessoa,
pré-visualizações, compilação e verificação são os arquivos do motor, conforme escrito em
../short-editor/SKILL.md § Pré-requisitos, § Onde as coisas ficam e
§ 4 a § 6; este arquivo diz o que é diferente. Os próprios deste skill: o layout (layout.mjs: o
quadro do orador e as pausas em tela cheia, executado pelo build.sh e preview.mjs do motor no
lugar do zoom deles), o palco (stage.mjs: a câmera, as cenas, o desfoque de movimento, as
figuras, as legendas, os sons do movimento), o fundo (bed.mjs), as imagens paradas
(stills.mjs) e as medições (measure.mjs). Leia antes do primeiro corte, toda execução:
../../references/pitfalls.md§ Transcrição e legendas, § Método de trabalho: as armadilhas com as quais uma edição é escrita (suas outras seções quando chegar a vez: § Áudio antes de um som medido manualmente, § ffmpeg e § O shell antes de um comando próprio; as ferramentas do motor seguem o resto)../../references/brand-kit.md, quando a edição as mostrar: os logotipos reais do usuário, capturas de tela e números, nunca inventados, e seu conjunto de marca uma vez emworkspace/brand/(§ Sua marca, definida uma vez)$X/example/: o projeto de referência, cada arquivo de uma edição entregue (stage.theme: "light"para sua versão clara);$X/example-2/: o skill executado do zero em outra gravação (dois takes, uma gravação silenciosa, sem pausa), e o que essa execução mudou
Leia quando o passo precisar: ../../references/audio-spec.md nos níveis (o padrão de volume, como um nível é medido como ouvido). As figuras do motor: node plugins/video/skills/short-editor/scripts/api.mjs <módulo> [figura], nunca suas fontes.
Não consigo assistir ao vídeo nem ouvi-lo. Onde está a cabeça, onde uma palavra começa, quão alto um whoosh é ouvido: cada um é uma medição.
verify.mjsfica entre "está pronto" e um arquivo quebrado;measure.mjsdiz se o design de som é ouvido. Nunca os pule.
Todos os caminhos abaixo são relativos à raiz da pasta GTM by Pipecorn. $X significa
plugins/video/skills/explainer-editor/scripts (este skill), $E significa
plugins/video/skills/short-editor/scripts (o motor). Execute ambos pelo caminho absoluto.
Pré-requisitos (pré-voo: verifique antes de qualquer trabalho)
Os do motor: ffmpeg + ffprobe no PATH (brew install ffmpeg) e python3 (Ferramentas de Linha de Comando do Xcode)
são necessários e não instaláveis daqui; pare e diga o comando se um estiver faltando.
Todo o resto se provisiona: o bootstrap.mjs do motor (pacotes node, venv de fala-para-texto,
a estante de música) é executado dentro de init.sh, transcribe.sh e build.sh, e init.sh busca
as fontes: Inter (ExtraBold, Bold, SemiBold, Medium; Licença de Fonte Aberta SIL, do pacote npm
inter-ui via jsDelivr) e Instrument Serif Italic (Google Fonts, OFL) para a pasta assets/fonts/
do projeto. Nada é instalado em todo o sistema. swiftc compila a máscara de pessoa: sem ela
a cabeça não sai do quadro (o quadro simplesmente corta o orador) e o palco é desenhado
na camada superior; diga isso.
Onde as coisas ficam
Como o motor diz, e apenas desta forma: um diretório de trabalho por edição,
workspace/projects/<slug>/, um slug que nenhum outro projeto tem; o arquivo finalizado
workspace/videos/<slug>.mp4; nunca arquivos de outro projeto, mesmo da mesma gravação; arquivos
temporários na pasta tmp/ do projeto, nunca em /tmp. A pasta scripts/ do skill permanece somente leitura. As imagens
do usuário (capturas de tela, logotipos, quadros de seus vídeos) vão para a pasta assets/ do projeto.
O pipeline
0. Configurar o diretório de trabalho
$X/init.sh workspace/projects/<slug> <source.mp4> workspace/videos/<slug>.mp4 [--theme light]
A estrutura do motor (project.json lido do arquivo, o pacote SFX em assets/sfx-top5/), depois
plan.mjs e edl.mjs deste skill, as chaves da linguagem explicativa em project.json (style: "explainer", layout: o caminho de $X/layout.mjs, blurBand 0), sfxMasterDb definido na
voz da gravação (seu volume + 15,3 dB, + 0,13 dB por dB abaixo de −20,5 LUFS: os sons da casa ouvidos
como nos skills base, qualquer que seja o nível da gravação), as fontes, um mestre 1080x1920 para uma
gravação vertical menor (mantido em uma segunda execução), e o tema (stage.theme: dark, a referência, ou
light; --theme light o define; um projeto já definido mantém seu próprio). Execute todos os comandos posteriores a partir
desse diretório.
0.2. Pergunte primeiro, em UMA pergunta
O tema (escuro, a referência, ou claro: o mesmo palco, vidro branco, palavras escuras, sombras mais
suaves), a música (a estante, plugins/video/assets/music/; Convergence por padrão; diga que as
faixas que não são Mixkit podem bloquear a monetização do vídeo), o ritmo (×1 por padrão; uma
entrega lenta fica melhor em ×1,1), e as imagens que o
usuário pode fornecer: capturas de tela de seu produto, quadros dos vídeos sobre os quais falam, seu logotipo,
os números reais. O que o usuário não fornecer é desenhado com suas palavras e os pictogramas da
casa, nunca com telas ou números inventados. Execute a partir da página do GTM by Pipecorn, o resumo do
primeiro texto responde a ela (o tema a partir de suas notas: "light" lá significa o tema claro):
decida pelas regras abaixo e não pergunte novamente.
O genérico Pipecorn: um BÔNUS de todo estilo, perguntado TODA vez, nunca ativado por padrão
(plugins/video/references/pipecorn-generic.md): cerca de 6 s no final, Pipecorn, depois
seus valores substituindo um ao outro em um único espaço, depois Pipecorn novamente, sem música.
Não · Sim, com quais valores (1 a 4; node $E/generic.mjs --list; por padrão cobertura de telefone,
taxa de conexão, pipeline).
Sua voz melhorada: um BÔNUS, perguntado TODA vez, nunca ativado por padrão
(plugins/video/references/voice-clean.md): o isolador de voz do ElevenLabs remove o eco da sala e o ruído
da gravação. Não · Sim, melhore minha voz. Precisa do conector ElevenLabs: sem uma chave, diga
em uma linha que ele existe (Configurações › Conectores › Adicionar chave) e continue. Em caso de sim, antes do passo 1:
node plugins/video/motion/voice.mjs clean <fonte>, então project.json › source é <…>-voice.<ext>
(o mesmo comprimento, a imagem intacta).
1. Transcrever, verbatim
$E/transcribe.sh --lang en # o idioma REALMENTE FALADO; depois project.json "lang"
words.json, no tempo da gravação bruta. Nunca traduzido. Uma gravação cheia de recomeços é montada
primeiro com o rough-cut.mjs do motor (short-editor/SKILL.md § 0.7), depois transcrita novamente. Depois node $E/words.mjs (do motor): words-fixed.json, cada início de palavra
movido de um silêncio para a voz e seu fim real antes de uma pausa, as duvidosas listadas;
words.mjs env|end|say para ler uma (short-editor/SKILL.md § 1). Nunca um script próprio para isso.
2. A máscara e o quadro
node $E/matte.mjs # a máscara de pessoa (precisa de swiftc), ~1 min por minuto
node $X/layout.mjs --measure --write # onde a cabeça está → project.json stage
node $X/layout.mjs --print # o quadro, a legenda, as pausas
--measure encontra os takes da gravação (seus cortes de origem, como verify.mjs os encontra) e lê
a cabeça na máscara em cada um (32 quadros por take): a largura do quadro coloca a cabeça do take mais longo no
tamanho da referência (226 px de largura; um take próximo recebe um quadro mais estreito, centralizado, para que
seus ombros e peito entrem: 598 px no exemplo trabalhado, cuja cabeça tem 38 % da largura do take, 782 no
segundo take; --keep-frame mantém os 942 da referência e avisa que o quadro mostrará principalmente o
rosto); em cada take a borda superior do quadro passa 88 px abaixo do topo habitual da cabeça (a referência), de modo que
a cabeça saia dele; a legenda sobe o quanto a cabeça sobe normalmente (no máximo 90
px) e fica 20 px acima dela; a tela cheia faz a cabeça ter 45 % da largura. Um take de vários takes recebe
stage.shots (o corte de cada take, legenda e enquadramento em tela cheia; a câmera alterna no
corte, o quadro permanece). Verifique em uma pré-visualização (§ 5). Neste estilo, um corte de origem acontece dentro do
quadro do orador, uma pequena parte da imagem: verify.mjs pode relatá-lo "sob um quadro de tela cheia"
(o segundo take); verifique que ele cai em seu quadro pelas próprias diferenças do quadro, não a olho nu.
3. Leia a transcrição, escreva o storyboard
Este é o passo de julgamento, e é todo o trabalho. Leia a transcrição de ponta a ponta e escreva o storyboard como uma lista antes de qualquer código: as cenas, e em cada uma, o que aparece em qual palavra.
-
Cenas, unidas por movimentos de câmera. Uma cena é uma ideia (a promessa, o produto, um processo, os passos, a lista, uma comparação): 4 a 8 segundos, então a câmera se move para a próxima. O movimento padrão é a panorâmica rápida (um giro para a direita: a cena antiga sai para a esquerda em um borrão, um rastro de luz cruza, a nova chega); uma subida quando a próxima ideia aprofunda (a cena antiga sai para cima); um empurrão através da cena antiga quando a nova a responde (um "porquê", uma revelação); um corte apenas atrás de uma pausa. Nunca dois do mesmo seguidos quando possível.
-
Uma cena chega composta. O que é colocado no tempo da própria cena viaja COM a câmera (já está lá quando o movimento termina: a referência nunca mostra um palco vazio após um movimento); o que vem depois entra em sua palavra. Quando as coisas da cena são nomeadas uma após a outra, coloque-as todas no tempo da cena, no escuro ou desfocadas (
dim: 0,6,blur: 10), e ilumine cada em sua palavra (.blurTo(on(i), 0).lit(on(i))e seu som): o palco está cheio desde o primeiro quadro e ainda se move em cada palavra (os personas e canais do segundo take, 2026-10-05). -
Algo novo a cada segundo ou mais. Cada frase que nomeia uma coisa, um número, um passo, uma afirmação recebe uma figura ou um movimento em sua palavra: uma figura entrando, um rótulo revelado, uma marca desenhada em torno de algo, uma coisa iluminada, uma cena se movendo. Mais de 2 segundos sem nada novo no palco parece chato: foi o veredicto na primeira edição (2026-10-05).
-
O título nomeia a seção em duas linhas curtas, sua palavra-chave em serifada (
*Killer* Text Hooks), uma caixa vermelha na linha com uma contagem ou uma afirmação (3 Winning Types Of). Muda com a seção, a antiga subindo antes que as novas palavras subam. -
Qual figura para o quê:
o que é dito a figura uma lista de N coisas, passos, regras S.list: barras voando da esquerda, rótulos desfocados até que cada um seja dito (reveal), o explicado iluminado (focus), seu veredicto aparecendo no final (glyph: "check","cross"…);headertransforma uma barra no cabeçalho da seçãoum nome, um termo, uma definição S.pill(um pictograma dentro:glyph),S.arrowdo que nomeia,S.ping(ring: true) em torno da coisa,S.mark(um círculo, um quadro, um sublinhado) desenhado na palavra que a enfatizauma coisa feita de partes, uma causa e seus efeitos, uma cadeia S.tree(filhos caindo, cada um conectado com uma faísca),S.wiresentre quaisquer doisuma combinação, uma comparação S.equation(+,=), um sinalVScomS.shakee o glitchum produto, uma ferramenta, uma plataforma o logotipo do usuário ( S.icon, seu brilho,ringpara fazer um telefone tocar), sua captura de tela emS.cardouS.phone,S.promptdigitado quando é usadoexemplos, vídeos, uma série S.cardsde suas imagens, ou quadros da própria gravação (stills.mjs) com cartõesplayeruma busca, muitas fontes, uma multidão uma grade de S.cardscomglyphs, iluminados um após o outro (uma varredura)um número S.countsubindo até ele, ou palavras coloridas ({g:22 Days}verde,{r:A Few Weeks}vermelho)bom / ruim, sim / não S.glyph(checkem um bloco verde,crossem um vermelho), o veredicto de uma barrauma chamada para ação um título ( Comment "X",To Get The *Skill*),S.filepara o que enviam -
As pausas (
FULL): um corte brusco para o orador em tela cheia (o flash da câmera no caminho de entrada, um whoosh no caminho de saída), nada desenhado além das legendas. Em uma confissão, uma piada, uma opinião forte; 2 a 6 s; nunca nos primeiros 15 s. Um take que não é a cabeça falante (b-roll, um plano geral) vai para tela cheia inteiro:[from, to, { zoom: 1 }]. A cena após uma pausa abre atrás dela (S.scene(<fim da pausa> - 0,45, "push")), para que esteja lá quando a pausa terminar. -
Apenas nomes reais e números reais (brand-kit.md): uma figura que precisaria de uma tela ou um número que o usuário não forneceu é desenhada com suas palavras e os pictogramas da casa, ou cortada.
-
As legendas são verbatim:
fi
…
[truncado para tradução]