Communitygithub.com

KaranO-Dev/one-take

Crie um vídeo promocional, de lançamento, resumo ou making-of completo e finalizado em uma única rodada: faça todas as perguntas de uma vez (cenas, referências, formatos e proporções, duração e limites da plataforma, repositórios e sites, idiomas, música, narração e legendas, marca), em seguida, crie o storyboard, construa, finalize com trilha sonora, renderize em cada formato e faça o QA de cada arquivo sem mais perguntas.

O que é one-take?

Este é um skill para agentes de IA (como Claude, Cursor, Codex) que automatiza a criação de vídeos completos e multiplataforma a partir de uma única entrevista inicial. O usuário responde a todas as perguntas de uma só vez sobre conteúdo, estilo, formato e marca. O skill então orquestra a detecção de informações do repositório (como dados do git, logotipos e cores), cria um storyboard, sintetiza uma trilha sonora original sincronizada com a animação, renderiza o vídeo em múltiplos formatos (como paisagem, quadrado e retrato) e executa verificações de qualidade (QA) em cada arquivo, incluindo análise de loudness, quadros congelados/pretos/silenciosos, tamanho de texto em dispositivos móveis e zonas seguras da plataforma. É ideal para quando se deseja um vídeo finalizado e entregue de ponta a ponta, sem necessidade de sessões iterativas de cocriação. O skill depende do HyperFrames para a renderização e pode ser usado em qualquer projeto que exija produção de vídeo profissional e consistente.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add KaranO-Dev/one-take-skill

Perguntar na sua IA favorita

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

Documentação

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

  1. 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.
  2. 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.
  3. Os fatos são computados, nunca digitados. Cada número na tela vem de facts.json ou de uma fonte que o usuário forneceu. Nunca invente estatísticas, citações, logotipos ou depoimentos.
  4. 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.
  5. Pronto significa aprovado no QA. Um arquivo é entregue quando qa.mjs o 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.json já 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:

  1. 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.

  2. 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 e output.name devem corresponder a [a-z0-9][a-z0-9._-]{0,63} (qualquer maiúscula/minúscula, sem ..), ou a execução para. Deixe hyperframes de fora a menos que o usuário peça: a versão padrão está fixada em scripts/lib/platforms.mjs (HF_VERSION, 0.8.223).
  • Escreva um BRIEF.md do HyperFrames com workflow: general-video, flow: automation, storyboard: no. Isso significa que uma chamada /hyperframes posterior 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 em ok:false ou BLOCKED.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 /figma primeiro.
  • Marca. Copie o SVG do logotipo e os arquivos de fonte para src/assets/brand e src/assets/fonts, declare-os em take.json fonts, e extraia os tokens de cor para o :root do 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).
  • Texto vai em copy/<idioma>.json, uma chave por linha de texto. Execute-o pelo /humanizer se 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.html para <projeto>/src/index.html e reescreva suas cenas a partir do storyboard.
  • Leia references/kit.md (a API T.*) e as regras inegociáveis do hyperframes-core. Para movimento, leia as regras e blueprints do hyperframes-animation. Antes de construir manualmente qualquer efeito nomeado, pesquise no hyperframes-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 com style inline.
  • 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.leave perto de s.end). Texto sob uma revelação falha na verificação de layout.
  • Cada cena se move: T.drift a 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.md lista as categorias). A maioria dos helpers do kit dão dicas por padrão; passe cue: false para manter um momento silencioso.
  • Os números vêm de T.facts ou do texto. T.count precisa 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.jpg e 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.modeO 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.
trackO 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.
noneNenhum 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úmeros
  • scripts/build.mjs: uma fonte → projetos HyperFrames em out/<formato>-<idioma>/. Preenche tamanhos, faixas seguras e tempo de cena, insere TAKE (texto, fatos, cenas), fornece o kit e GSAP 3.14.2 (verificado com sha256), descarta cenas para versões reduzidas
  • scripts/probe.mjs: passagem Chrome headless que lê dicas, tamanhos e posições de texto ao longo do tempo, e marcas
  • scripts/score.mjs: trilha sonora sintetizada, stems, mix, master, marks.json; --analyze para o tempo de uma faixa
  • scripts/encode.mjs, qa.mjs, report.mjs, run.mjs: entrega, verificações, relatório e a execução completa
  • scripts/selftest.mjs: verifica o toolchain e prova que o QA falha em um arquivo construído para falhar
  • scripts/lib/: helpers compartilhados (git, plataformas com HF_VERSION e a verificação de nome, WAV, DSP)
  • kit/take.js: o kit de movimento (references/kit.md)
  • templates/index.html: o palco inicial
  • references/: intake.md, take-json.md, direction.md, sound.md, formats.md, qa.md, kit.md

Habilidades Relacionadas