Communitygithub.com

heygen-com/hyperframes

O contrato técnico da composição HyperFrames — construa um projeto renderizável. Use para estrutura de composição, atributos de temporização `data-*`, `class="clip"`, faixas, subcomposições, variáveis, reprodução de mídia gerenciada pelo framework, regras de renderização determinística e validação. Leia antes de escrever HTML de composição.

O que é hyperframes?

O HyperFrames é um framework que renderiza vídeo a partir de HTML, onde uma composição é um arquivo HTML cujo DOM declara temporização com atributos `data-*`, com runtime de animação buscável e reprodução de mídia gerenciada pelo framework. Este skill, `heygen-com/hyperframes`, serve como o **contrato técnico** central para construir projetos HyperFrames, cobrindo desde a estrutura básica (standalone vs sub-composição), atributos de temporização, faixas e clipes, até regras de determinismo e validação. Ele é útil para desenvolvedores que precisam criar projetos de animação e vídeo baseados em HTML com precisão de quadro, garantindo que a timeline seja buscável, que a mídia seja reproduzida de forma previsível e que a renderização seja determinística (sem clocks, rede ou `Math.random` não semeado). O skill suporta plataformas como HyperFrames Studio e CLI, e se integra com outros skills (como `hyperframes-animation`, `hyperframes-creative`, `hyperframes-cli`) para funcionalidades específicas de runtime de animação, criatividade, mídia, CLI e registry. Ele funciona lendo e validando arquivos de composição HTML, aplicando regras de lint e garantindo que a saída seja um vídeo renderizável sem erros de temporização ou conflitos de estilo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/heygen-com/hyperframes/tree/main/skills/hyperframes-core

Perguntar na sua IA favorita

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

Documentação

Instalação de plugins: Antes de comandos de configuração ou atualização, siga as regras de execução de plugins quando este skill estiver dentro de um plugin HyperFrames. Instalações independentes mantêm as instruções de atualização abaixo.

HyperFrames Core

Armadilhas para agentes (leia primeiro):

  • Centralize com flex/inset, não com CSS transform: translate(-50%,-50%) em um nó que você depois anima com GSAP x/y. Lint: gsap_css_transform_conflict. Use fromTo ou xPercent/yPercent.
  • Não adicione um tl.set(..., {visibility:"hidden"}) para saída de cena. O runtime já oculta clipes com temporização. Fades de opacidade em nós internos (ou opacity no .clip) são suficientes. Hard-kills de legenda seguem regra diferente.
  • window.__timelines["id"] deve corresponder ao data-composition-id raiz.
  • Após render, leia a segunda linha do resumo: beginframe vs screenshot, modo GPU, timings de estágio. screenshot + software gpu no Linux é o caminho lento.

HyperFrames renderiza vídeo a partir de HTML. Uma composição é um arquivo HTML cujo DOM declara temporização com atributos data-*, cujo runtime de animação é buscável, e cuja reprodução de mídia é gerenciada pelo framework.

Este skill é o contrato técnico — como construir um projeto HyperFrames. O corpo abaixo é o guia de construção; detalhes por tópico estão em references/ (índice abaixo), leia sob demanda. Documentação de processo (briefing, storyboard, revisão, produção, dispatch, frame-worker) está em /hyperframes → references/. Outras preocupações estão nos skills de domínio irmãos — hyperframes-animation, hyperframes-creative, media-use, hyperframes-cli, hyperframes-registry. O mapa de capacidades em /hyperframes diz o que cada um cobre.

Referências

ArquivoLeia para…
references/minimal-composition.mdcomeçar pelo menor esqueleto de composição renderizável
references/composition-patterns.mdescolher monolítico vs modular; estruturar um index.html modular; escolher um arquétipo de sub-comp
references/data-attributes.mdconsultar qualquer data-* (raiz / clip / host de sub-comp / aliases legados); usar class="clip"
references/tracks-and-clips.mdentender o que data-track-index controla (e não controla), z-index, temporizar um clip relativo a outro; listar toda faixa e clip com npx hyperframes timeline
references/creator-editing-recipes.mdcopiar receitas verdadeiras de corte/aparar/reordenar/retemporizar/congelar/câmera/máscara/crossfade/edição de áudio e seus limites
references/sub-compositions.mdconectar uma sub-composição (atributos host, <template>, variáveis por instância) e animar dentro dela
references/variables-and-media.mddeclarar variáveis; colocar <video>/<audio>, definir volume, aparar
references/determinism-rules.mdconstruir uma timeline buscável; proibições de determinismo; layout / ajuste de texto
references/full-screen-motion.mdcriar movimento em tela cheia com fundos compartilhados
references/tailwind.mdtrabalhar em um projeto Tailwind v4 (init --tailwind; contrato de runtime difere do Studio v3)

Para especificidades de runtime de animação (API GSAP, Lottie, Three.js, etc.) vá para hyperframes-animation → adapters/<runtime>.md.

Construindo uma composição

Duas formas raiz (não intercambiáveis)

  • Standalone (index.html de nível superior): <div data-composition-id="…"> fica diretamente em <body>, sem wrapper <template>. Envolver uma raiz standalone oculta todo o conteúdo e lint rejeita (standalone_composition_wrapped_in_template, erro).
  • Sub-composição (carregada via data-composition-src): envolva a raiz em <template>. Esta é a forma a ser escrita: o loader também aceita um documento completo simples e usa seu <body> como fallback, mas a forma com template é a que exemplos e ferramentas assumem.

⚠ Regra de transporte: para uma sub-composição com template, o montador descarta os <style>/<script> do <head> do próprio arquivo (packages/core/src/compiler/compositionAssembly.ts, a porta hasTemplate), então coloque <style>/<script> dentro do template. <link> é içado de qualquer forma. ⚠ Convenção de id do host: dê ao slot host, ao template interno e à chave window.__timelines["<id>"] o mesmo id. Um id local diferente é suportado (o montador volta para a primeira raiz no arquivo), mas a incompatibilidade é silenciosa, então corresponda a menos que tenha um motivo para não fazer.

Forma do arquivo, conexão do host e lista de verificação pré-renderização → references/sub-compositions.md.

A raiz deve ser dimensionada (bug de layout silencioso)

A raiz standalone define width/height: 100%. O tamanho do canvas é data-width/data-height. O runtime aplica esses pixels à raiz da composição. Não codifique 1920px/1080px em #root. Esqueleto → references/minimal-composition.md.

Uma timeline pausada

Cada composição registra exatamente uma gsap.timeline({ paused: true }) em window.__timelines["<id>"] (chave = raiz data-composition-id). Construí-la dentro de um callback assíncrono (document.fonts.ready) é suportado; o que importa é que você registre apenas após a construção ser concluída. A duração da renderização é o data-duration da raiz, não o comprimento da timeline: uma timeline que ultrapassa é cortada, e uma que termina cedo mantém seu último quadro. Omita o data-duration da raiz e o comprimento é inferido (timeline, janela de mídia ou adapter). Você não precisa de window.__timelines = window.__timelines || {}: o runtime cria o registro antes de seus scripts inline serem executados, e lint não pede mais isso. Não aninhe manualmente sub-timelines no host; o runtime aninha automaticamente timelines filhas registradas. Contrato completo (incluindo runtimes não-GSAP) → references/determinism-rules.md + hyperframes-animation/adapters/.

Pegadinhas de lint na primeira passada (garantia de falha na primeira construção)

Regras que o lint realmente pega, mas apenas depois do fato. Escreva-as corretamente na primeira vez:

  • Nunca combine um transform CSS inicial com um tween GSAP na mesma propriedade — o valor CSS e o início do tween entram em conflito e lint rejeita com gsap_css_transform_conflict. Defina o estado inicial dentro do tween com gsap.fromTo(el, { x: -40 }, { x: 0 }) em vez de um CSS transform: translateX(-40px).
  • Nunca coloque crossorigin em <video>/<audio>. lint rejeita incondicionalmente com media_crossorigin_breaks_preview (erro), inclusive para leitura de canvas/WebGL/WebAudio. Não há supressão.
  • Nunca dê a um <video data-start> um ancestral que também carregue data-start. lint rejeita com video_nested_in_timed_element (erro). Temporize o wrapper ou o vídeo, nunca ambos.
  • Todo <audio> precisa de um id. lint rejeita com media_missing_id, e um <audio> sem id nunca é captado pelo mixer, então a renderização fica silenciosa.
  • Nunca anime um .clip com autoAlpha ou visibility — lint rejeita com gsap_animates_clip_element. Anime um filho.
  • Um font-family CSS nomeado precisa de um @font-face no arquivo para um arquivo local enviado, ou lint dispara font_family_without_font_face.
  • #root de sub-composição usa width/height: 100% (ou inset: 0), não 1920px/1080px codificado. O tamanho do canvas é data-width/data-height.

Um erro de lint também desativa as auditorias de layout e contraste: check então relata 0 sample(s) e 0/0 text checks, o que parece um arquivo limpo, mas significa que nada foi executado. Limpe os erros de lint antes de confiar nesses números.

Regras não negociáveis (bugs silenciosos que portas automatizadas podem perder)

Expôs aqui; justificativa completa na referência vinculada. Não viole:

  • Sem clocks em tempo de renderização / Math.random não semeado / rede / estado de entrada; sem repeat: -1 (use uma contagem finita). → determinism-rules.md
  • Nunca anime display, visibility ou autoAlpha em um elemento .clip. O framework controla a visibilidade do clip, e lint rejeita (gsap_animates_clip_element). Anime um filho. → determinism-rules.md
  • Sem <br> em texto do corpo; elementos transformados devem ser block-level + dimensionados; decorativos absolutos pulsantes precisam de folga de pico. → determinism-rules.md
  • <video>/<audio> são encontrados por uma consulta plana do documento, então o framework os busca e decodifica em qualquer profundidade de aninhamento (incluindo dentro de um <template> ou wrapper de sub-comp). Um limite rígido: lint erra se um <video data-start> estiver dentro de outro elemento simples que também tem data-start, e a falha é real (quadros de origem errados, então o clip desaparece no meio do slot), então coloque a temporização no wrapper ou no vídeo, nunca em ambos. Hosts de sub-composição são isentos: mídia dentro de uma sub-composição renderiza corretamente. A outra ressalva são timelines, não posicionamento: uma timeline de sub-comp não pode animar elementos raiz do host. → variables-and-media.md
  • Mantenha todo id único em toda a página montada (prefixe ids de sub-comp com o id da composição, #<id>-hero) para que seu próprio CSS #id e chamadas getElementById resolvam. A injeção de quadro não depende mais disso: o compilador carimba um data-hf-render-id único no documento em cada video[src]/audio[src]/img[src]. Mídia que usa filhos <source> em vez de um atributo src não é carimbada, então ids únicos ainda importam. → composition-patterns.md
  • Um preenchimento em tela cheia na raiz da composição é aceitável em uma renderização normal. Ele é descartado apenas no caminho composto em camadas (conteúdo HDR, ou uma composição usando transições de shader), onde o motor força toda raiz de composição transparente para que a camada inferior apareça. Se sua composição usa transições de shader ou mídia HDR, coloque o preenchimento em um filho de sangria total (position:absolute; inset:0). → composition-patterns.md

Editando composições existentes

  • Leia os arquivos primeiro. Preserve temporização, faixas, IDs, variáveis, caminhos de mídia não relacionados.
  • Para saber o que está na timeline de um projeto (faixas, clipes, inícios, fins, o que reproduz), execute npx hyperframes timeline [--json] em vez de ler index.html e cada arquivo de sub-composição.
  • Corresponda IDs de composição e chaves de timeline existentes.
  • Adicionar um clip: defina seu data-start/data-duration intencionalmente em relação aos clipes ao redor. data-track-index é uma faixa de exibição do Studio, não uma restrição de temporização, então não precisa estar livre.
  • Um clip que termina após o data-duration da raiz é cortado: estenda o data-duration da raiz até o fim do clip na mesma edição (lint avisa clip_ends_past_root_duration).
  • data-hidden em qualquer elemento da composição o oculta TANTO na prévia QUANTO na renderização, substituindo sua janela de tempo; é não destrutivo/reversível e alternado pelo ícone de olho da timeline do Studio.
  • Adicionar uma sub-composição: verifique seu data-composition-id interno antes de conectar o host.

Validação

Use hyperframes-cli para detalhes de comandos

  • npx hyperframes check passa (0 achados em lint, runtime, layout, movimento e contraste)
  • Projetos com sub-composições: npx hyperframes snapshot --at <midpoints> e inspecione cada quadro visualmente
  • npx hyperframes preview --background para revisão (o usuário pode editar qualquer coisa na timeline do Studio, e o servidor sobrevive ao comando de invocação)
  • npx hyperframes render apenas após aprovação do usuário

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

general-video

>

heygen-com/animejs

Anime.js adapter patterns for HyperFrames. Use when writing Anime.js animations or timelines inside HyperFrames compositions, registering animations on window.__hfAnime, making Anime.js seek-driven and deterministic, or translating Anime.js examples into render-safe HyperFrames HTML.

heygen-com/claude-design-hyperframes

Use when running inside Claude Design specifically. Produces a valid, brand-accurate HyperFrames video draft using pre-valid skeletons. For Claude Code / Cursor / Codex, use the `hyperframes` skill instead.

heygen-com/contribute-catalog

Author a new HyperFrames registry block (caption style, VFX block, transition, lower third) or component (text effect, overlay, snippet) and ship it as an upstream PR to the hyperframes repo. Use ONLY when the user wants to CONTRIBUTE to the public catalog — for in-project caption/transition authoring use the `hyperframes` skill, for installing existing registry items use the `hyperframes-registry` skill.

heygen-com/css-animations

CSS animation adapter patterns for HyperFrames. Use when authoring CSS keyframes, animation-delay based timing, animation-fill-mode, animation-play-state, or CSS-only motion that HyperFrames must seek deterministically during preview and rendering.

heygen-com/gsap

GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo). Use when writing GSAP animations in HyperFrames compositions.

heygen-com/hyperframes

Leaves sweep through the frame and part to reveal the headline. HyperFrames block, 1920×1080, 12s, 11 variables.

heygen-com/hyperframes

Render-correctness doctrine for scene-to-scene seams in HyperFrames launch videos — the prerequisites that make transitions composite correctly on the master timeline. Load when assembling the master timeline / index.html, when a white flash appears at a cut or crossfade seam (especially on dark films), when reasoning about why a transition opacity dip shows through, or when verifying the render-side mechanics of how overlapping scene wrappers blend. Covers the opaque stage-ground (#root background) white-flash guard and how the injector overlaps wrappers, holds final frames, ping-pongs tracks, and stamps lint-clean template code onto the master timeline. Does NOT contain the per-transition catalog — see the transition registry for individual transition entries.

heygen-com/hyperframes

The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]

heygen-com/hyperframes

Glass shards fly in through fog and tile themselves into the headline. HyperFrames block, 1920×1080, 12.16s, 19 variables.

heygen-com/hyperframes

A single feature card orbits a dot sphere on approved Blender camera motion. HyperFrames block, 1920×1080, 10s, 4 variables.

heygen-com/hyperframes

A wireframe portal bursts open, the title comes through, then its letters swap into a second phrase. HyperFrames block, 1920×1080, 8s, 9 variables.

heygen-com/hyperframes

An orbiting camera follows an ice logo as it breaks apart, reforms into two text moments, and fades. HyperFrames block, 1920×1080, 22.5s, 216 variables.

heygen-com/hyperframes

House-style oversized macOS cursor technique for HyperFrames launch videos. Load whenever a scene involves cursors or a pointer-led action, when kicking off a UI scene, when igniting a morph/transition/typing run with a click, or when a scene reads as static, dead, or stale and needs a cheap high-yield source of motion to carry the viewer's eye and segment them out of the stale state. Covers cursor size/look (incl. brand-motif cursors), the off-screen entry law, tip-targeting and the click tap, click-ignites-the-next-beat, and exit / cross-scene handoff.

heygen-com/hyperframes

name: embedded-captions

heygen-com/hyperframes

A chain of bevelled cuboids rides a travelling wave as a content carousel. HyperFrames block, 1920×1080, 6.666666666666667s, 40 variables.

heygen-com/hyperframes

A tiled headline surface flips cell by cell under a sweeping depth field to reveal the rear headline. HyperFrames block, 1920×1080, 8s, 18 variables.

heygen-com/hyperframes

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

heygen-com/hyperframes

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

heygen-com/hyperframes

GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene video feel like ONE continuous camera move instead of a stack of independently-animated slides. Covers the vector law (how you exit determines how you enter, incl. the Z scale-sign rule), the film's current, carrier elements, causal motion, the Seam Gate (build-gate enforcement), the ban on idle wobble (motion must PERFORM, not breathe), stillness-before-climax, and the sustained-motion routes. Routes to the low-level technique skills (cut-the-curve — the full catalog incl. waterfall entry + nudge curve, oversized-cursor, seam-craft). These rules SUPERSEDE generic / upstream motion guidance. [continuity, direction, vector, momentum, seam, transition, ease, performance, idle-motion, narrative-motion, film-grammar]

Habilidades Relacionadas