
hyperframes-core
β 33,000by heygen-com Β· part of heygen-com/hyperframes
HyperFrames HTML composition contract. Use for composition structure, data attributes, clips, tracks, sub-compositions, variables, media playback, deterministic render rules, and validation of minimal renderable projects.
HyperFrames HTML composition contract. Use for composition structure, data attributes, clips, tracks, sub-compositions, variables, media playback, deterministic render rules, and validation of minimal renderable projects.
Inspect the full instructions your agent will receiveExpandCollapse
This is the exact playbook injected into your agent when the skill activates β shown here so you can audit it before installing. You don't need to read it to use the skill.
by heygen-com
HyperFrames HTML composition contract. Use for composition structure, data attributes, clips, tracks, sub-compositions, variables, media playback, deterministic render rules, and validation of minimal renderable projects.
npx skills add https://github.com/heygen-com/hyperframes --skill hyperframes-core
Download ZIPGitHub33k
HyperFrames Core
HyperFrames renders video from HTML. A composition is an HTML file whose DOM declares timing with data-* attributes, whose animation runtime is seekable, and whose media playback is owned by the framework.
This skill is the technical contract β how to build one hyperframes project. The body below is the build guide; per-topic detail lives in references/ (index next), read on demand. Other concerns live in the sibling domain skills β hyperframes-animation, hyperframes-creative, hyperframes-media, hyperframes-cli, hyperframes-registry. The capability map in /hyperframes says what each one covers.
References
File Read it toβ¦
references/minimal-composition.md start from the smallest renderable composition skeleton
references/composition-patterns.md choose monolithic vs modular; structure a modular index.html; pick a sub-comp archetype
references/data-attributes.md look up any data-* (root / clip / sub-comp host / legacy aliases); use class="clip"
references/tracks-and-clips.md pick data-track-index, handle same-track overlap / z-index, time a clip relative to another
references/sub-compositions.md wire a sub-composition (host attrs, <template>, per-instance vars) and animate inside it
references/variables-and-media.md declare variables; place <video>/<audio>, set volume, trim
references/determinism-rules.md build a seekable timeline; determinism bans; the animatable-property allowlist; layout / text fit
references/full-screen-motion.md author full-frame motion with shared backgrounds
references/storyboard-format.md author a STORYBOARD.md plan (+ the parsed manifest)
references/script-format.md author the optional SCRIPT.md locked narration
references/subagent-dispatch.md map subagent dispatch verbs (parallel fan-out / background / wait) to your harness
references/tailwind.md work in a Tailwind v4 project (init --tailwind; runtime contract differs from Studio's v3)
For animation runtime specifics (GSAP API, Lottie, Three.js, etc.) go to hyperframes-animation β adapters/<runtime>.md.
Building a composition
Two root forms (not interchangeable)
-
Standalone (top-level
index.html) β root<div data-composition-id="β¦">sits directly in<body>, no<template>wrapper (wrapping it hides all content and breaks rendering). -
Sub-composition (loaded via
data-composition-src) β root must be wrapped in<template>.
β Transport rule: the runtime only clones <template> contents; everything outside (incl. <head> styles/scripts) is discarded β put <style>/<script> inside the template.
β Host-id rule: the host slot's data-composition-id must exactly equal the inner template's data-composition-id and the window.__timelines["<id>"] key β no -mount/-slot/-host suffix.
File shape, host wiring, and the pre-render checklist β references/sub-compositions.md.
Root must be sized (silent layout bug)
The standalone root needs an explicit sized box (width/height in px), and every ancestor down to a height:100% element must have a resolved height β otherwise a flex/100% child collapses to ~0 and content piles into the top-left corner. lint/validate/inspect do not catch this. Skeleton β references/minimal-composition.md.
One paused timeline
Each composition registers exactly one gsap.timeline({ paused: true }) at window.__timelines["<id>"] (key = root data-composition-id), built synchronously at page load. Render duration = root data-duration, not timeline length. Don't manually nest sub-timelines into the host. Full contract (incl. non-GSAP runtimes) β references/determinism-rules.md + hyperframes-animation/adapters/.
Non-negotiable rules (silent bugs lint/validate/inspect won't catch)
Surfaced here; full rationale in the linked reference. Do not violate:
-
No render-time clocks / unseeded
Math.random/ network / input-state; norepeat: -1(use a finite count). βdeterminism-rules.md -
Animate only the visual-property allowlist; never
display/visibility; nogsap.seton later-scene clips. βdeterminism-rules.md -
No
<br>in body text; transformed elements must be block-level + sized; pulsing absolute decoratives need peak clearance. βdeterminism-rules.md -
<video>/<audio>must be a direct child of the host root (never inside a sub-comp<template>/wrapper); the framework owns playback. βvariables-and-media.md -
Every
idmust be unique across the assembled page; inside a sub-comp, prefix ids with the composition id (#<id>-hero). Duplicate<video>/<img>ids render blank β the producer injects frames bygetElementById, and cross-file dupes slip pastlint. βcomposition-patterns.md -
A full-screen scene fill goes on a full-bleed child (
position:absolute; inset:0), never on the composition root itself β the producer's frame compositing can drop the root element's ownbackground(the frame renders black) even though preview/snapshotshow it correctly. βcomposition-patterns.md
Editing existing compositions
-
Read the files first. Preserve unrelated timing, tracks, IDs, variables, media paths.
-
Match existing composition IDs and timeline keys.
-
Adding a clip: pick a non-overlapping
data-track-indexor adjust surrounding timing intentionally. -
Adding a sub-composition: verify its internal
data-composition-idbefore wiring the host.
Validation
Use hyperframes-cli for command details
-
npx hyperframes lintpasses (0 errors) -
npx hyperframes validatepasses (0 console errors) -
npx hyperframes inspectpasses (0 errors) -
Projects with sub-compositions:
npx hyperframes snapshot --at <midpoints>and eyeball each frame -
npx hyperframes previewfor review (the user can edit anything in Studio's timeline) -
npx hyperframes renderonly after the user approves
npx skills add https://github.com/heygen-com/hyperframes --skill hyperframes-coreRun this in your project β your agent picks the skill up automatically.
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.