Instalação do plugin: Antes dos comandos de configuração ou atualização, siga as regras de execução do plugin quando esta skill estiver dentro de um plugin HyperFrames. Instalações independentes mantêm as instruções de atualização abaixo.
Primeiro, mantenha esta skill atualizada — confirme com o usuário antes de executar:
npx hyperframes skills update faceless-explainer. Uma operação rápida sem efeito quando tudo está atualizado; caso contrário, atualiza esta skill e as skills de domínio principal das quais ela depende antes de utilizá-las.
media-use: Antes de obter áudio/imagens/logos, chame
/media-usepara resolver BGM/SFX/imagens do catálogo HeyGen e logotipos de marcas de suas fontes oficiais. Execute--adoptprimeiro para registrar ativos existentes. Veja a skill/media-use. Quando o aplicativo host fornecer suas próprias ferramentas de música ou efeitos sonoros, use-as para música e efeitos sonoros.
Faceless Explainer para HyperFrames
Use esta skill para transformar um corpo de texto em um vídeo explicativo: escolha um sistema de design, planeje uma narrativa educacional e construa quadro a quadro no HyperFrames. Faceless significa que cada visual é inventado a jusante — não há etapa de captura e nenhum inventário real de ativos.
A porta de entrada é
/hyperframes. Você é o orquestrador. Execute cada etapa, verifique seu gate e só então continue. Esta skill é para explicar um tópico a partir de texto, sem produto e sem site para capturar. Qualquer outra intenção, um simples "fazer um vídeo" ou qualquer incerteza → leia/hyperframesprimeiro — a camada de intenção possui cada decisão de rota, e uma criação nova chegando aqui semBRIEF.mdpassa por ela de qualquer forma (regra de abertura da Configuração).
Você é o orquestrador. Trabalhe em videos/<projeto>/. Execute as etapas em ordem e passe cada gate antes de continuar. Etapas com gate do usuário são Etapa 0, Etapa 3 e Etapa 6. Leia ../hyperframes/references/brief-contract.md antes da Etapa 0 — ela define os tipos de gate e como flow/storyboard do BRIEF.md derivam o modo que governa os gates das Etapas 3/4/6. Faça cada etapa você mesmo, exceto a Etapa 5, onde você despacha um subagente por quadro. Não coloque regras de design ou movimento aqui; elas vivem no subagente frame-worker, nas ../hyperframes-animation/rules/ + ../hyperframes-animation/blueprints/ locais desta skill e em hyperframes-creative.
Fluxo: Etapa 0 configuração → hyperframes.json; Etapa 1 briefing → capture/extracted/; Etapa 2 sistema de design → frame.md; Etapa 3 storyboard/roteiro → STORYBOARD.md e SCRIPT.md; Etapa 3.1 áudio → audio_meta.json; Etapa 4 design visual → STORYBOARD.md enriquecido; Etapa 5 quadros → compositions/frames/NN-*.html e index.html; Etapa 6 renderização final → renders/video.mp4.
Etapa 0: Configuração
Objetivo: Entrar com um briefing confirmado, criar o projeto HyperFrames e tornar o briefing durável.
O briefing é confirmado pela camada de intenção, não por perguntas feitas aqui. Regra de abertura, em ordem: (1) BRIEF.md existe → leia e não pergunte nada — o briefing está definido, e seu flow/storyboard deriva o modo (brief contract § 1). (2) Sem BRIEF.md mas o projeto existe (hyperframes.json / STORYBOARD.md no disco) → retome do frontmatter do storyboard e das preferências registradas; nunca reinterrogue um projeto pela metade. (3) Nem um nem outro — uma solicitação de criação nova que chegou aqui diretamente → leia /hyperframes e execute sua camada de intenção (references/intent-interview.md): ela verifica receitas e padrões lembrados, conduz as perguntas desta rota (../hyperframes/references/routes/faceless-explainer.md) e devolve o briefing bloqueado. Solicitações de edição ignoram tudo isso — vá fazer a edição.
Inicialize apenas se hyperframes.json estiver ausente. Nomeie <projeto> a partir do tópico em kebab-case, como juros-compostos-explicado; nunca use nome do workspace ou timestamp.
npx hyperframes init "videos/<projeto>" --non-interactive --example=blank --skill=faceless-explainer — init verifica as skills instaladas em relação às mais recentes no GitHub e atualiza o conjunto global se alguma estiver desatualizada.
Após init, defina <RAIZ_PROJETO> como videos/<projeto> e execute cada comando de caminho relativo subsequente com esse diretório como diretório de trabalho. Nos comandos abaixo, . significa <RAIZ_PROJETO>; nunca escreva .media, capture ou arquivos de saída no diretório do chamador.
Escreva BRIEF.md imediatamente após init (nunca antes — init recusa um diretório não vazio): o briefing bloqueado da camada de intenção, formato conforme ../hyperframes/references/brief-format.md. Resolva <MEDIA_DIR> como o diretório da skill /media-use instalada. Em seguida, registre cada resposta baseada em preferência com node <MEDIA_DIR>/scripts/prefs.mjs record --hyperframes . (brief-format.md nomeia o subconjunto). Se a camada de intenção adotou uma receita, execute node <MEDIA_DIR>/scripts/recipe.mjs use --hyperframes . --name <nome>; ela copia seu frame.md para o projeto (a Etapa 2 é então ignorada) e retorna os esboços a partir dos quais a Etapa 3 elabora. Uma receita preenche respostas, não aprovações; os gates de revisão ainda são executados.
Mostre o status de login antes de prosseguir além da Configuração — execute npx hyperframes auth status e repita sua saída textualmente. Ele informa se a voz/BGM usará HeyGen ou mecanismos locais e, quando desconectado, como fazer login. Aplique um ramo:
- Colaborativo: aguarde o usuário fazer login ou escolher explicitamente
offline/go. - Autônomo: informe o status e continue pelos mecanismos locais disponíveis.
Não omita silenciosamente uma capacidade necessária quando não houver provedor offline; exponha o bloqueador. Não misture esta decisão em outra pergunta nem escreva chaves em um .env por repositório. Propriedade de autenticação e fallbacks offline: /media-use references/setup-providers.md § Providers.
Gate: hyperframes.json e BRIEF.md existem; as respostas baseadas em preferência foram registradas (brief contract § 2); o status de login foi mostrado (logado ou continuando offline).
Etapa 1: Briefing (sem captura)
Objetivo: Incorporar o texto do usuário no projeto como fonte de informação. Não há captura de site e nem ativos reais — este é um explicador sem rosto.
Salve a entrada completa do usuário textualmente e, em seguida, crie o pacote de captura sintético manualmente:
capture/extracted/visible-text.txt— o artigo / anotações / tópico / resumo completo, textualmente. Esta é a fonte de informação, não um modelo de história (a Etapa 3 o reformula).capture/extracted/tokens.json—{ "title": "", "description": "", "colors": [], "fonts": [] }. Preenchatitle/descriptiona partir do briefing. Deixecolors/fontsvazios, a menos que o usuário tenha fornecido explicitamente cores ou fontes da marca — nesse caso, adicione-os (o preset de design fornece uma paleta completa independentemente).
Se o usuário colou um roteiro ou deseja manter sua redação, salve-o textualmente como user_script.txt; VO_MODE (textual ou reestruturado) vem de BRIEF.md — a camada de intenção pergunta quando um roteiro chega. Pergunte uma vez aqui apenas se o briefing não o tiver, e armazene a resposta para a Etapa 3.
Não execute npx hyperframes capture (não há URL). Não crie asset-descriptions.md nem preencha capture/assets/ — os visuais sem rosto são inventados nas Etapas 4-5, não capturados. A única exceção: se o usuário forneceu uma imagem real, coloque-a em public/<nomebase> e anote para a Etapa 3.
Gate: capture/extracted/visible-text.txt e capture/extracted/tokens.json existem; você pode declarar o tópico e o público do explicador em uma frase clara.
Etapa 2: Sistema de Design
Objetivo: Escolher um preset de quadro fornecido; um script o transforma no frame.md + skin de legenda deste vídeo.
Quando BRIEF.md nomeia um style_preset — o usuário o escolheu visualmente a partir das amostras na camada de intenção — use-o; a decisão é sua apenas quando o briefing está silencioso. Então você toma a única decisão — qual preset: leia ../hyperframes-creative/references/design-spec.md e navegue por ../hyperframes-creative/frame-presets/; escolha o preset cuja aparência melhor se adequa ao tópico, tom e público. Em seguida, execute:
node <SKILL_DIR>/scripts/build-frame.mjs --preset <nome> --hyperframes .
O script faz o resto deterministicamente: copia o FRAME.md do preset → frame.md e o remixa em quaisquer tokens de marca em capture/extracted/tokens.json (cores da marca mapeadas nas chaves de cor do preset por função; as fontes de exibição + corpo do preset trocadas pelas da marca), copia a skin de legenda do preset para .hyperframes/caption-skin.html e auto valida (sai com código 1 em um mapeamento quebrado). Prossiga assim que ele sair com código 0 — sem edição manual da especificação.
Um explicador sem rosto geralmente não tem cores/fontes de marca (tokens.json colors/fonts vazios) → o script mantém a paleta própria do preset, um design completo e enviável. Apenas quando o usuário nomeou cores/fontes de marca, adicione-as ao tokens.json antes de executar, e ajuste o frame.md manualmente depois apenas se um mapeamento realmente precisar.
Gate: build-frame.mjs saiu com código 0 — frame.md existe de um preset nomeado e (quando o preset fornece um) .hyperframes/caption-skin.html existe como fonte da skin de legenda; o preset escolhido foi registrado como preferência (--key style_preset --workflow <este workflow>, brief contract § 2).
Etapa 3: Storyboard e Roteiro
Objetivo: Transformar o texto em um plano de ensino quadro a quadro aprovado.
Leia ../hyperframes-creative/references/story-spine.md (linguagem de gancho, valor antes da evidência, storyboard como proposta, visuais rastreáveis por fonte), references/story-design.md, ../hyperframes-animation/blueprints-index.md, ../hyperframes/references/storyboard-format.md e ../hyperframes/references/script-format.md. Use-os para escrever STORYBOARD.md e, quando a narração for necessária, SCRIPT.md. Defina o duration: do frontmatter a partir do length do briefing — uma expectativa aproximada; a montagem relata onde o corte cai em relação a ela.
Use story-design.md para a estrutura do explicador (conceito / tutorial / listicle / história), estratégia de gancho, técnicas de clareza, batidas emocionais, o mapeamento enum-tipo e VO_MODE. A sequência do vídeo vem do design narrativo, não da ordem dos parágrafos do texto de entrada — reordene, mescle, omita, comprima. Como um guia suave, consulte o menu função→blueprint em ../hyperframes-animation/blueprints-index.md: para cada batida, escreva a narração na forma que seu blueprint candidato implica e marque esse candidato com o blueprint: id quando um se adequar. A verdade do ensino ainda decide quais batidas existem — nunca force uma batida a se encaixar em um blueprint, e nunca invente uma batida apenas porque uma forma comprovada está disponível. Os visuais sem rosto são inventados a jusante, então os quadros não carregam um inventário de ativos: deixe asset_candidates vazio a menos que o usuário tenha fornecido uma imagem real public/<nomebase>. Use os campos exatos exigidos das referências de storyboard e roteiro.
Após o rascunho, execute a passagem de plano do loop de revisão — ../hyperframes/references/review-loop.md § 1: apresente o plano como uma proposta e faça as duas perguntas — aprovar ou alterar, e esboços primeiro (recomendado) ou pular. O feedback chega como uma resposta de chat; repita até aprovação. Este é um gate de checkpoint (brief contract § 1): no modo autônomo não há o que perguntar — poste o mesmo resumo como um aviso e prossiga; os esboços se fundem na construção, e a prévia final com sua única pergunta vem na Etapa 6.
Gate: STORYBOARD.md existe, cada quadro tem os campos narrativos exigidos, SCRIPT.md existe quando a narração é necessária, e o usuário aprovou o plano quadro a quadro (autônomo: o resumo foi postado como aviso).
Etapa 3.1: Áudio
Objetivo: Gerar narração, temporizações de palavras, música e metadados de áudio a partir do roteiro aprovado.
Inicie o áudio após a aprovação da Etapa 3. Execute-o em segundo plano e depois continue para a Etapa 4. (O status de login já foi mostrado na Etapa 0; o mecanismo faz fallback automaticamente.)
Escolha a voz da narração a partir da solicitação do usuário antes de invocar. Se a solicitação nomeou uma voz, gênero ou tom, escolha um id de voz correspondente e passe-o com --voice <id>. O padrão do pipeline é Marcia (feminina) no HeyGen / am_michael no Kokoro — portanto, uma solicitação como "uma voz masculina" é ignorada silenciosamente a menos que você passe a flag. Os ids de voz são específicos do provedor; resolva contra o provedor que o status de login da Etapa 0 selecionou: HeyGen (logado) via node <MEDIA_DIR>/audio/scripts/heygen-tts.mjs --list (ou GET /v3/voices?engine=starfish); Kokoro (offline) via a tabela de vozes em <MEDIA_DIR>/audio/references/tts.md (prefixos am_/bm_ masculino, af_/bf_ feminino). Quando o usuário não expressou preferência, recorra à voz lembrada (brief contract § 2) antes do padrão do pipeline e diga qual você usou; omita --voice apenas quando nenhum nomear uma. Quando o usuário escolheu explicitamente uma voz nesta execução, registre-a (prefs.mjs record --key voice).
node <SKILL_DIR>/scripts/audio.mjs --script ./SCRIPT.md --storyboard ./STORYBOARD.md --hyperframes . --out ./audio_meta.json --voice <id-voz> &
O script de áudio lida com narração, temporizações de palavras, busca de BGM da biblioteca de música do HeyGen e metadados de temporização. O humor do BGM vem do campo music: do storyboard. Isso usa a API de Áudio do HeyGen para recuperação, não geração, e a mesma credencial ~/.heygen do TTS. Para detalhes do provedor, leia ../media-use/audio/references/tts.md. Quando as próprias ferramentas do aplicativo host fazem a música ou um efeito sonoro, coloque o arquivo em assets/ e liste-o no arquivo audio_meta.json marcado "source": "host": música como bgm { "path": "assets/…", "source": "host" } com music: none no storyboard; um som como uma entrada sfx { "frame": <n>, "file": "assets/…", "offset_s": 0, "duration_s": <sua duração>, "source": "host" }. Cada passagem de áudio mantém esses, e um quadro com um som do host não recebe nenhum sinal buscado.
Se não houver narração e nenhum SCRIPT.md, pule a geração de voz. O BGM ainda pode ser executado se o storyboard tiver um humor musical.
O marcador canônico de silêncio total (compartilhado entre os fluxos de trabalho que reutilizam este modelo de áudio): music: none no bloco YAML superior do STORYBOARD.md, nenhum SCRIPT.md, e nenhuma sugestão sfx: ou áudio do host. Essa combinação marca o projeto como silencioso.