O que one-take faz?
Pergunte tudo uma vez. Depois faça o filme inteiro, em todos os formatos, verificado, sem mais perguntas.
Este skill orquestra; o HyperFrames faz a renderização. Ele precisa dos skills HyperFrames (hyperframes, hyperframes-core, hyperframes-animation) e funciona melhor com hyperframes-registry, hyperframes-keyframes, media-use, figma e humanizer. Se hyperframes-core estiver ausente, pare e forneça a linha de instalação: npx skills add heygen-com/hyperframes.
SKILL_DIR abaixo significa a pasta deste skill. Os scripts são Node puro (≥ 22) mais ffmpeg, sem instalações.
O contrato
- Uma rodada de levantamento. Detecte primeiro, depois pergunte uma vez (Fase 1). Após as respostas, não pergunte mais nada. A única exceção é um bloqueio real que você não consegue contornar com um padrão, como um arquivo que não existe ou um site que se recusa a carregar. Então faça essa única pergunta exata e continue.
- A resposta do levantamento autoriza as renderizações. Ela não autoriza publicação, upload, postagem, push ou download de nada que o usuário não tenha nomeado. Peça essas coisas separadamente, após o relatório.
- Os fatos são computados, nunca digitados. Cada número na tela vem de
facts.jsonou de uma fonte que o usuário forneceu. Nunca invente estatísticas, citações, logotipos ou depoimentos. - A imagem escreve o som. Cada movimento que deve ser ouvido chama
T.cue()no momento em que acontece. A trilha sonora é construída a partir dessas dicas, para que som e imagem nunca se desconectem. - Pronto significa aprovado no QA. Um arquivo é entregue quando
qa.mjso aprova, ou quando uma falha é documentada no relatório com o motivo pelo qual não pôde ser corrigida em duas tentativas.
Fase 0: detectar (silencioso, antes de perguntar)
node SKILL_DIR/scripts/detect.mjs <caminhos do assunto…> --out /tmp/one-take-detect.json
- Execute no repositório atual e em qualquer caminho ou site mencionado pelo usuário.
- Retorna, por fonte: título e tagline do README, intervalo do git e contagem de commits, logotipos, arquivos e famílias de fontes, tokens de cor. Também retorna o toolchain: node, ffmpeg, versão em cache do
hyperframes, Chrome, CLI heygen e se as chaves da API de música estão definidas. - Se
take.jsonjá existir no projeto de destino, isso é uma retomada. Leia-o, pule o levantamento e continue da primeira fase cuja saída estiver faltando.
Fase 1: o levantamento (uma mensagem, uma rodada)
Leia references/intake.md. Em uma mensagem:
-
Mostre a planilha de levantamento: cada campo pré-preenchido a partir da detecção ou de um padrão recomendado, cada um em uma linha. O usuário altera apenas o que estiver errado.
-
Chame AskUserQuestion uma vez com as quatro decisões que mais alteram o trabalho: formatos (seleção múltipla), duração, som e narração/legendas. O texto da pergunta diz a eles para adicionar quaisquer alterações na planilha como uma nota em qualquer resposta.
Se AskUserQuestion não estiver disponível, coloque as mesmas quatro como opções numeradas no final da planilha e peça uma resposta.
Em seguida, sem perguntar novamente:
- Escreva
take.json(esquema:references/take-json.md). Códigos de idioma, IDs de formato, o slug eoutput.namedevem corresponder a[a-z0-9][a-z0-9._-]{0,63}(qualquer maiúscula/minúscula, sem..), ou a execução para. Deixehyperframesde fora a menos que o usuário peça: a versão padrão está fixada emscripts/lib/platforms.mjs(HF_VERSION, 0.8.223). - Escreva um
BRIEF.mddo HyperFrames comworkflow: general-video,flow: automation,storyboard: no. Isso significa que uma chamada/hyperframesposterior retoma este projeto em vez de reentrevistar. - Registre as respostas no corpo do BRIEF.md: formatos, som, legendas, limites da plataforma.
Fase 2: fontes
- Fatos do git. Execute
node SKILL_DIR/scripts/facts.mjs --repo <caminho> [--repo …] [--since …] --out <projeto>/facts.json. Ele coleta commits, intervalo, dias ativos, maior sequência, dia mais movimentado, linhas por linguagem, linhas adicionadas e removidas, e principais palavras dos commits, além do assunto do primeiro e do último commit. Nomes e e-mails de autores nunca são registrados. Use apenas os fatos que o usuário permitiu. - Sites. Para uma URL a ser mostrada, execute
npx hyperframes capture <url> -o <projeto>/src/assets/cap. Pare emok:falseouBLOCKED.md: isso é um bloqueio. - Referências. Para cada uma, escreva uma linha em STORYBOARD.md sobre o que você está aproveitando: ritmo, tipo, cor, uma transição. Para um link do Figma, execute
/figmaprimeiro. - Marca. Copie o SVG do logotipo e os arquivos de fonte para
src/assets/brandesrc/assets/fonts, declare-os emtake.jsonfonts, e extraia os tokens de cor para o:rootdo template.
Fase 3: direção e storyboard
Leia references/direction.md antes de escrever qualquer coisa visual. Escreva STORYBOARD.md:
- Direção, um parágrafo: a ideia central, o movimento característico, a combinação de tipos, a paleta, a referência de onde veio cada escolha.
- Tempo primeiro. Escolha o bpm para que a duração alvo seja um número inteiro de compassos (4/4). Em seguida, dê a cada cena uma duração em compassos, uma
energy(0–1, que impulsiona o arranjo da trilha sonora) e como ela entra (in). - Tabela de cenas: id, compassos, energia, o que está na tela, movimento, dicas, texto.
- A última cena é o cartão final,
end: true, com compassos suficientes para mantê-lo completo por 3 s ou mais. - Marque as cenas que podem entrar em uma versão reduzida como
optional(1–9, quanto maior, primeiro).
- A última cena é o cartão final,
- Texto vai em
copy/<idioma>.json, uma chave por linha de texto. Execute-o pelo/humanizerse disponível. Mantenha os títulos curtos o suficiente para serem lidos duas vezes no tempo em que estão na tela.
Fase 4: construir
- Copie
SKILL_DIR/templates/index.htmlpara<projeto>/src/index.htmle reescreva suas cenas a partir do storyboard. - Leia
references/kit.md(a APIT.*) e as regras inegociáveis dohyperframes-core. Para movimento, leia as regras e blueprints dohyperframes-animation. Antes de construir manualmente qualquer efeito nomeado, pesquise nohyperframes-registry.
Regras que mantêm todos os formatos e o QA honestos:
- As cenas são
<section class="clip scene" data-scene="id">de nível superior, nunca aninhadas, nunca comstyleinline. - Tamanho em px de design através de
--u(1% do lado mais curto). Texto legível nunca está abaixo de--t-min(3.4u ≈ 37 px em 1080). - Mantenha o texto legível dentro de
.safe, as faixas de interface do usuário da plataforma para aquele formato. - Reorganize o layout por formato com regras
.f-tall,.f-wide,.f-square,.f-portrait, não escalando um único layout. - Limpe as palavras de uma cena antes que a transição da próxima cena as cubra (
T.sink/T.leaveperto des.end). Texto sob uma revelação falha na verificação de layout. - Cada cena se move:
T.drifta câmera sobre ela. Nada fica parado antes do cartão final. T.endCard(t)no momento em que o cartão final estiver completo. O último quadro ainda deve mostrá-lo: sem fade para preto sobre a pausa.- Dê dicas para tudo que deve ser ouvido (
references/sound.mdlista as categorias). A maioria dos helpers do kit dão dicas por padrão; passecue: falsepara manter um momento silencioso. - Os números vêm de
T.factsou do texto.T.countprecisa de um número finito e lança um erro sem um, então um fato ausente interrompe a verificação em vez de colocar um número inventado na tela. - Termine o script com
window.__timelines["main"] = T.done();.T.done()registra a timeline uma vez, depois que toda animação é adicionada, e o template a repete nessa linha. Construa todas as animações primeiro, não dentro de um callback de fonte carregada ou outro async: o HyperFrames lint rejeita um registro precoce.
Fase 5: rascunho
node SKILL_DIR/scripts/run.mjs <projeto> --draft
Isso executa, por formato × idioma: construir → verificar (dicas, tamanhos de texto, marca do cartão final do Chrome headless) → trilha sonora → hyperframes check → renderização de rascunho → codificar → QA → REPORT.md.
O HyperFrames roda na versão fixada como HF_VERSION em scripts/lib/platforms.mjs (0.8.223), ou no hyperframes de take.json. A primeira execução o baixa com npx, e a construção baixa o GSAP 3.14.2 uma vez do jsDelivr para ~/.cache/one-take/. O arquivo GSAP é verificado em relação a um sha256 fixado após o download e cada vez que é lido do cache. Um arquivo que não corresponde nunca é usado: um download ruim não é armazenado em cache, e um arquivo em cache ruim é excluído e a construção para. Execute novamente para buscar uma cópia nova.
Em seguida:
- Abra cada folha de contato
*.sheet.jpge observe-a. - Leia
REPORT.md. - Corrija falhas e qualquer coisa que pareça errada: sobreposições, cortes, quadros mortos, texto muito pequeno, um corte que não encaixa.
Há no máximo duas tentativas de correção. Cada uma executa run.mjs --draft novamente; use --only <formato>-<idioma> para executar apenas o que mudou.
Fase 6: final
node SKILL_DIR/scripts/run.mjs <projeto>
Esta é a renderização de qualidade total de cada saída. Os entregáveis vão para renders/ (ou output.dir). Cada saída recebe:
<nome>.mp4: x264 CRF 12, AAC 320k, faststart.cover.jpg: o cartão final.sheet.jpg.qa.json
Os stems da trilha sonora e marks.json são mantidos em out/<formato>-<idioma>/score/.
Fase 7: relatório
Responda com:
- a tabela de saídas de
REPORT.md(arquivo, tamanho, duração, veredito) - a folha de contato do formato principal
- uma linha sobre o som
- itens em aberto, se houver
Ofereça os próximos passos sem executá-los: postar texto, mais idiomas, uma versão reduzida, publicação. Nada é postado ou enviado a menos que o usuário peça.
Modos de som
sound.mode | O que acontece |
|---|---|
score (padrão) | score.mjs sintetiza base, banda e bateria a partir das energias das cenas na grade de compassos: plano de acordes de mood e key, sidechained ao kick, crescendos em cada elevação, um impacto em cada chegada. O stem de efeitos é construído a partir das dicas, sintonizado com o acorde abaixo de cada uma e panorâmico de onde acontece na tela. Mixado, limitado, depois two-pass loudnorm para lufs (padrão −14) com pico verdadeiro −1.5. Original, então nada para licenciar. |
track | O arquivo do usuário. Obtenha bpm e primeiro beat com score.mjs --analyze <arquivo> (ou npx hyperframes beats), defina bpm para ele e coloque as cenas em seus compassos. O stem de efeitos toca sobre ele. |
library | /media-use resolve --type bgm (precisa da CLI heygen) ou seus geradores. O resultado é usado como track, e sua licença é registrada em sound.licence. |
none | Nenhum elemento de áudio. |
Para uma narração, coloque-a em src/assets/audio/vo.wav, do Kokoro via npx hyperframes tts ou da gravação do usuário. A trilha sonora faz um ducking da música sob ela (duckDb, padrão −9). Para legendas, temporize-as a partir de npx hyperframes transcribe vo.wav --model <modelo>. Legendas queimadas são textos de cena colocados dentro de .safe em --t-cap ou maior. Para legendas sidecar, escreva <nome>.srt a partir da mesma transcrição ao lado de cada saída.
Arquivos
scripts/detect.mjs,facts.mjs: o que está lá e os númerosscripts/build.mjs: uma fonte → projetos HyperFrames emout/<formato>-<idioma>/. Preenche tamanhos, faixas seguras e tempo de cena, insereTAKE(texto, fatos, cenas), fornece o kit e GSAP 3.14.2 (verificado com sha256), descarta cenas para versões reduzidasscripts/probe.mjs: passagem Chrome headless que lê dicas, tamanhos e posições de texto ao longo do tempo, e marcasscripts/score.mjs: trilha sonora sintetizada, stems, mix, master,marks.json;--analyzepara o tempo de uma faixascripts/encode.mjs,qa.mjs,report.mjs,run.mjs: entrega, verificações, relatório e a execução completascripts/selftest.mjs: verifica o toolchain e prova que o QA falha em um arquivo construído para falharscripts/lib/: helpers compartilhados (git, plataformas comHF_VERSIONe a verificação de nome, WAV, DSP)kit/take.js: o kit de movimento (references/kit.md)templates/index.html: o palco inicialreferences/:intake.md,take-json.md,direction.md,sound.md,formats.md,qa.md,kit.md