
HyperFrames Core
FreeBuild and render video compositions from HTML.
Free · Opens the source repo
What HyperFrames Core does
HyperFrames Core is a framework designed to facilitate the creation of video compositions directly from HTML files. By utilizing data-* attributes for timing and structure, this skill allows developers to define the timing of animations and media playback in a deterministic manner. The framework ensures that the media is owned by the composition, providing a seamless integration of video and audio elements within the HTML structure. This skill serves as a technical contract for building hyperframes projects, detailing the necessary components and rules for successful implementation.
The core functionality revolves around the composition structure, which can be either a standalone project or a sub-composition. The standalone form requires a top-level index.html file, while sub-compositions are loaded via data-composition-src and must be wrapped in a <template>. This distinction is crucial as it affects how the content is rendered and manipulated. Developers are guided through the process of creating these compositions with a series of reference documents that cover everything from minimal composition structures to advanced sub-composition wiring.
HyperFrames Core emphasizes the importance of adhering to specific rules to avoid silent bugs that can arise during rendering. For instance, it mandates that every composition must have a unique ID and that certain properties, such as display and visibility, cannot be animated. These guidelines ensure that the resulting video compositions are both visually appealing and functionally robust. The skill also provides insights into managing tracks and clips, allowing for complex animations and interactions within the composition.
This skill is ideal for developers and designers working on multimedia projects that require precise timing and control over video playback. Whether you are building interactive presentations, educational content, or artistic video displays, HyperFrames Core offers a structured approach to creating engaging compositions that leverage the power of HTML and modern web technologies.
When to use it
Use this skill when you need to create complex video compositions that require precise timing and media control directly from HTML.
When not to use it
This skill may not be suitable for simple video embedding or projects that do not require detailed timing and structural management.
What you can build with it
Creating Interactive Presentations
Use HyperFrames Core to build engaging presentations that incorporate video and animations, ensuring precise timing and synchronization.
Developing Educational Content
Leverage the framework to create interactive educational materials that require detailed media playback and user interaction.
Artistic Video Displays
Utilize HyperFrames Core to craft artistic video compositions that combine various media elements with complex animations.
How to install HyperFrames Core
View source1. Install with the skills CLI
npx skills add calesthio/openmontage/hyperframes-core --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by calesthioHyperFrames 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'sdata-composition-idmust exactly equal the inner template'sdata-composition-idand thewindow.__timelines["<id>"]key — no-mount/-slot/-hostsuffix.
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
Frequently asked questions about HyperFrames Core
Similar skills
Playwright Component Testing
Test React and Vue components in isolation with Playwright.
Fluent UI Blazor
Integrate Fluent UI components in Blazor applications effortlessly.
Build MCP App
Create interactive UI widgets for MCP servers.
Web Design Reviewer
Identify and fix design issues in websites efficiently.
Markstream Install
Seamlessly integrate Markstream for Markdown rendering.
GSAP & Framer Scroll Animation
Create advanced scroll animations effortlessly.
