Skip to main content

Documentation Index

Fetch the complete documentation index at: https://hyperframes.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Your agent already knows how to build video components. It writes HTML. HyperFrames renders it. The registry is the collection of everything that’s been built — 52 blocks and counting. This guide shows you how to add to it.
Quick version — Fork the repo. Write one HTML file with a paused GSAP timeline. Add registry-item.json. Run hyperframes lint + validate. Publish with npx hyperframes publish. Open a PR.

Why Contribute?

Every block in the registry exists because someone needed it and built it. When you add a block, every HyperFrames user gets it with one command:
npx hyperframes add instagram-follow
The registry grows, HyperFrames gets more useful, and your work ships to everyone.

Two Paths

Ideas (No Code)

You spot visual trends before anyone. That’s the most valuable contribution.
  • Screen-record a caption style from TikTok/YouTube that doesn’t exist yet
  • Sketch a lower-third in Figma with fonts, colors, and timing
  • Install a component, preview it, report what feels off
Open an issue on GitHub with a visual reference. Tag it component-request.
The bar for ideas is low. We’d rather have 100 and build the best 10.

Build It

Every block is a single HTML file. No build step, no framework. If you use Claude Code with HyperFrames skills:
“I want to contribute a new transition that looks like [description]”
The /contribute-catalog skill scaffolds the structure, validates, renders a preview, publishes to hyperframes.dev, and prepares the PR.

What Goes in the Registry

Blocks (registry/blocks/) — full standalone compositions. Fixed dimensions, fixed duration. Caption styles, VFX effects, title cards, transitions. Components (registry/components/) — reusable snippets. No fixed size. CSS effects, text treatments, overlays that adapt to any composition.

Structure

registry/blocks/my-block/
  my-block.html           ← the composition
  registry-item.json      ← metadata

registry-item.json

{
  "$schema": "https://hyperframes.heygen.com/schema/registry-item.json",
  "name": "my-block",
  "type": "hyperframes:block",
  "title": "My Block",
  "description": "What this block does in one sentence",
  "tags": ["category", "subcategory"],
  "dimensions": { "width": 1920, "height": 1080 },
  "duration": 5,
  "files": [
    {
      "path": "my-block.html",
      "target": "compositions/my-block.html",
      "type": "hyperframes:composition"
    }
  ]
}

The Rules

Five things that must be true for every registry item:
1

Deterministic

No Math.random(), no Date.now(). Use seeded PRNG only.
2

Paused timeline

gsap.timeline({ paused: true }). The player controls playback.
3

Register timeline

window.__timelines["id"] must match data-composition-id.
4

No requestAnimationFrame

Use tl.eventCallback("onUpdate", render) for Three.js/WebGL scenes.
5

Hard kills on captions

tl.set(el, { opacity: 0, visibility: "hidden" }, group.end) — no lingering text.
Break any of these and renders won’t be reproducible. The renderer captures every frame by seeking the timeline — if your animation depends on real time or random state, it breaks.

Quality Bar

Not everything belongs in the registry. The bar is production quality.
TypeMinimum standard
Captions96px+ font, text-stroke/shadow, overflow prevention
VFXSolves a problem that takes 4+ hours from scratch
TransitionsSmoother than CSS — if opacity 0→1 works, it’s not a transition
BlocksWould a professional use this in a client project?

Common rejection reasons

  1. “Looks like a demo” — a spinning cube is not a component
  2. “Text unreadable” — font too small, no contrast treatment
  3. “Non-deterministic”Math.random() or Date.now()
  4. “Timeline not found” — ID mismatch between HTML and JS
  5. “Breaks as sub-composition” — element IDs collide (prefix everything)

Workflow

1

Fork and create

Fork heygen-com/hyperframes and create your block directory:
mkdir -p registry/blocks/your-block
2

Write your block

Create the HTML composition and registry-item.json. Use the templates above.
3

Validate

hyperframes lint
hyperframes validate
npx oxfmt your-block.html
4

Update registry

# Add to registry index
# Update registry/registry.json
npx tsx scripts/generate-catalog-pages.ts
5

Render preview

hyperframes render -o preview.mp4
6

Publish and PR

npx hyperframes publish
Open a PR with your hyperframes.dev preview link.
External contributors: attach the preview MP4 to your PR. A maintainer handles the catalog image. HeyGen internal: run scripts/upload-docs-images.sh to push catalog PNGs.

What’s Needed Right Now

These are gaps in the registry. If you’re looking for something to build, start here.
CategoryGapDifficulty
CaptionsKaraoke with clip-path sweep (CapCut style)Medium
CaptionsRTL language layouts (Arabic, Hebrew)Medium
Lower thirds10 variations for podcasts/interviewsEasy
Lower thirdsNews ticker / scrolling text barEasy
MapsAnimated route maps, region highlights, location pinsMedium
VFXProduct turntable with HDRIHard
VFXParticle system with physics (collisions, gravity)Hard
TransitionsMorphing shape transitionsHard
Data vizSankey / flow diagramsMedium