# AI Chat Reveal
Source: https://hyperframes.heygen.com/catalog/blocks/ai-chat-reveal
A question is typed on a rising keyboard, sent, and answered by an AI that streams its reply word by word on a measured token rhythm - thinking dot, uneven bursts, bulleted list - before the app cuts to a branded closing card
```html ai-chat-reveal.html theme={null}
AI Chat Reveal
11:42
Assistant
How do I turn my HTML into real video?
Ask anything
How
Can
My
It's not magic. It's HTML.
Open-source video rendering — write HTML, ship pixel-perfect video.
Try HyperFrames
HYPERFRAMES.HEYGEN.COM
```
## Install
That writes `compositions/ai-chat-reveal.html`, plus 1 supporting file under `assets/`.
## Add it to your video
It runs for 19.3333 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does | | |
| ------------- | -------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------- | ------------------------ | ---------------- |
| `botName` | `Assistant` | string | Title in the chat header. | | |
| `userMessage` | `How do I turn my HTML into real video?` | string | The question typed on the keyboard and sent. Around 40 characters keeps the measured pacing. | | |
| `answer1` | `You do not need an editor. HyperFrames renders the HTML you already write into deterministic, pixel-perfect video.` | string | First streamed paragraph. | | |
| `answer2` | `It is markup, not magic.` | string | Short second beat. | | |
| `answer3` | `What you get out of the box:` | string | Lead-in to the list. | | |
| `bullet1` | `A catalog of motion primitives you install and own` | string | First list item. | | |
| `bullet2` | `GSAP timelines that seek to any frame` | string | Second list item. | | |
| `bullet3` | `4K renders from a single CLI command` | string | Third list item. | | |
| `ecHeadline` | \`It's not magic. | It's HTML.\` | string | Closing card headline. A | breaks the line. |
| `ecSub` | `Open-source video rendering — write HTML, ship pixel-perfect video.` | string | Supporting sentence on the closing card. | | |
| `ecCta` | `Try HyperFrames` | string | Label on the closing card button. | | |
| `ecFooter` | `HYPERFRAMES.HEYGEN.COM` | string | Letter-spaced line at the very bottom. | | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
AI Chat Reveal
11:42
Assistant
How do I turn my HTML into real video?
Ask anything
How
Can
My
It's not magic. It's HTML.
Open-source video rendering — write HTML, ship pixel-perfect video.
Try HyperFrames
HYPERFRAMES.HEYGEN.COM
```
Tagged `showcase` `mock-ui` `ai` `chat` `vertical` `ad-template`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# App Showcase
Source: https://hyperframes.heygen.com/catalog/blocks/app-showcase
Fitness app product showcase with three floating smartphone screens
## Install
That writes one file: `compositions/app-showcase.html`.
## Source
```html theme={null}
app-showcase
Unleash Full Potential
START NOW
JM
James Medrano
Premium Member
Weekly Goal
2/3
MTWTFSS
Your ProgressSee all
Running5.2 km
Cycling12.8 km
Strength45 min
Burned Calories
740 kcal
MonTueWedThuFriSatSun
Active540
Rest200
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `app` `3d`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Apple Money Count
Source: https://hyperframes.heygen.com/catalog/blocks/apple-money-count
Apple-style finance counter that counts from $0 to $10,000, flashes green, and bursts money icons with sound.
## Install
That writes `compositions/apple-money-count.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
$0
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `finance` `kinetic` `youtube` `sfx`.
Created by [Stronkter](https://x.com/Stronkter).
```text theme={null}
📷HyperFrames by HeyGen Make me a five-second video of, on a white background, of a Apple-style bold font counting from $0 to $10,000. Once it counts to $10,000, it changes to a green color and the screen also flashes green for a second, and then money icons come out of the $10,000 amount all over the screen and then disappear.
```
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Bar Chart Race
Source: https://hyperframes.heygen.com/catalog/blocks/bar-chart-race
Ranked bars grow and overtake each other as a time series advances, with the axis rescaling as values climb and the accent handing over to whoever leads
```html bar-chart-race.html theme={null}
Bar Chart Race
Streaming Subscribers by Service
Ranked by reported subscribers
Period2019
Placeholder data
```
## Install
That writes one file: `compositions/bar-chart-race.html`.
## Add it to your video
It runs for 12 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `title` — Title. Defaults to `Streaming Subscribers by Service`.
* `subtitle` — Subtitle. Defaults to `Ranked by reported subscribers`.
* `periods` — Period labels (comma separated). Defaults to `2019, 2020, 2021, 2022, 2023, 2024`.
* `series` — Series (one per line: Name: v1, v2, ...). Defaults to `Northwind: 42, 58, 71, 96, 118, 131
Cobalt: 30, 46, 68, 92, 126, 168
Ferry: 55, 62, 66, 70, 74, 79
Marlow: 18, 33, 52, 61, 88, 104
Aster: 25, 28, 44, 58, 63, 72
Pell: 12, 20, 39, 47, 55, 90
Quill: 8, 11, 15, 24, 40, 66
Dunmore: 35, 37, 38, 40, 42, 44`.
* `barCount` — Bars shown. Defaults to `6`.
* `periodDuration` — Seconds per period. Defaults to `2`.
* `valuePrefix` — Value prefix. Defaults to `$`.
* `valueSuffix` — Value suffix. Defaults to `M`.
* `valueDecimals` — Value decimals. Defaults to `0`.
* `accent` — Leader accent. Defaults to `#c8452d`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------------------------------- | ------------------------------------- | ------------------ | ------------ |
| `title` | `Streaming Subscribers by Service` | string | |
| `subtitle` | `Ranked by reported subscribers` | string | |
| `periods` | `2019, 2020, 2021, 2022, 2023, 2024` | string | |
| `series` | \`Northwind: 42, 58, 71, 96, 118, 131 | | |
| Cobalt: 30, 46, 68, 92, 126, 168 | | | |
| Ferry: 55, 62, 66, 70, 74, 79 | | | |
| Marlow: 18, 33, 52, 61, 88, 104 | | | |
| Aster: 25, 28, 44, 58, 63, 72 | | | |
| Pell: 12, 20, 39, 47, 55, 90 | | | |
| Quill: 8, 11, 15, 24, 40, 66 | | | |
| Dunmore: 35, 37, 38, 40, 42, 44\` | string | | |
| `barCount` | `6` | 3 to 12, step 1 | |
| `periodDuration` | `2` | 0.4 to 6, step 0.1 | |
| `valuePrefix` | `$` | string | |
| `valueSuffix` | `M` | string | |
| `valueDecimals` | `0` | 0 to 3, step 1 | |
| `accent` | `#c8452d` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Bar Chart Race
Streaming Subscribers by Service
Ranked by reported subscribers
Period2019
Placeholder data
```
Tagged `data` `chart` `statistics` `ranking`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Beat Freeze Cut
Source: https://hyperframes.heygen.com/catalog/blocks/beat-freeze-cut
A beat-driven speed ramp, freeze-frame hit, and hard-cut sequence for music-led promos and montages.
## Install
That writes one file: `compositions/beat-freeze-cut.html`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#0B0D10`.
* `--accent-color` — Accent. Defaults to `#00E5C7`.
## Source
```html theme={null}
Beat Freeze Cut
MUSIC PROMOLIVE
Next shot
HARD CUT
Beat-locked freeze, then cut. Built for music-led promos and montages.
Ramp1.35→2.2
Freeze0.8s
Cut3.00
ON THE BEAT
DROP
FREEZE
```
Tagged `transition` `music` `beat-driven` `freeze-frame`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Blue Sweater Intro Video
Source: https://hyperframes.heygen.com/catalog/blocks/blue-sweater-intro-video
Warm AI creator intro sequence that resolves into an X follow card for @_blue_sweater_.
## Install
That writes `compositions/blue-sweater-intro-video.html`, plus 2 supporting files under `assets/` and `assets/sfx/`.
## Source
```html theme={null}
Blue Sweater Intro Video
Introducing
Introducingtro
bluexsweater
bluexsweater
How can I help you today?
Opus 5.0 Extended
Recommend one X creator who actively explores AI technology and, like me, is
building an AI startup. I want someone practical, curious, and worth following.
Opus 5.0 Extended
thinking
xOpen the recommended X profile
Opus 5.0 Extended
x
joe sai
@_blue_sweater_
FollowFollowing
Exploring AI technology and building an AI startup in public.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `ai` `creator` `sfx`.
Created by [Joe Sai](https://x.com/_blue_sweater_).
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camcorder HUD
Source: https://hyperframes.heygen.com/catalog/blocks/camcorder-hud
Responsive REC, battery, editable date placeholder, and timeline-driven counter overlay for creator-camera and camcorder treatments
## Install
That writes one file: `compositions/camcorder-hud.html`.
## Add it to your video
It runs for 4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
REC
JAN 01 2000 12:00 AM
SP · 16:900:00:00
```
Tagged `camcorder` `camera` `recording` `hud` `overlay` `creator` `media-treatment-overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Dolly Zoom (Vertigo Shot)
Source: https://hyperframes.heygen.com/catalog/blocks/camera-dolly-zoom
Camera tracks toward or away from the subject while the field of view changes the opposite way, so the subject holds its frame size while the background collapses behind it or rushes in. Focal length is solved from dolly distance every frame against d * tan(FOV/2) = const, not keyframed beside it. Requires depth: the subject sits on the z = 0 plane and the content behind it must be layered or genuinely 3D (translateZ at two or more distinct depths) -- a flat element gains nothing from this move.
```html camera-dolly-zoom.html theme={null}
Dolly zoom · d × tan(fov/2) = const
```
## Install
That writes one file: `compositions/camera-dolly-zoom.html`.
## Add it to your video
It runs for 4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------------- | -------------- | -------------------------------------------------------------------- | ------------ |
| `direction` | `out` | `out`, `in` | |
| `strength` | `2` | 1.1 to 4, step 0.1 | |
| `subjectDistance` | `1400` | 600px to 3000px, step 50px | |
| `easing` | `power2.inOut` | `none`, `sine.inOut`, `power1.inOut`, `power2.inOut`, `power3.inOut` | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Dolly zoom · d × tan(fov/2) = const
```
Tagged `camera` `depth` `3d` `cinematic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# ChatGPT Exchange
Source: https://hyperframes.heygen.com/catalog/blocks/chatgpt-exchange
A portrait ChatGPT-style exchange types and sends a prompt, streams an answer, assembles a comparison table, and scrolls back through the result
## Install
That writes `compositions/chatgpt-exchange.html`, plus 4 supporting files under `assets/fonts/`.
## Add it to your video
It runs for 14.9 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `showcase` `mock-ui` `ai` `chat` `vertical` `ad-template`.
Created by Jake Moran.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chromatic Radial Split
Source: https://hyperframes.heygen.com/catalog/blocks/chromatic-radial-split
Shader transition with chromatic aberration radial split
## Install
That writes one file: `compositions/chromatic-radial-split.html`.
## Source
```html theme={null}
08 / 14
SCENE A
SCENE B
Chromatic Radial Split
Prompt
"use chromatic radial split shader transition"
RGB channels separate and converge radially. From-scene splits outward, to-scene converges
inward.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cinematic Zoom
Source: https://hyperframes.heygen.com/catalog/blocks/cinematic-zoom
Shader transition with dramatic zoom blur
## Install
That writes one file: `compositions/cinematic-zoom.html`.
## Source
```html theme={null}
07 / 14
SCENE A
SCENE B
Cinematic Zoom
Prompt
"use cinematic zoom shader transition"
Both scenes zoom-blur with per-channel radial offset. From zooms outward, to zooms inward
from tight.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Claude Exchange
Source: https://hyperframes.heygen.com/catalog/blocks/claude-exchange
A portrait Claude-style exchange types a prompt, works through search and reasoning steps, then streams a detailed answer with citations and actions
## Install
That writes `compositions/claude-exchange.html`, plus 7 supporting files under `assets/fonts/`.
## Add it to your video
It runs for 21.4 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `showcase` `mock-ui` `ai` `chat` `vertical` `ad-template`.
Created by Jake Moran.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code 3D Extrude
Source: https://hyperframes.heygen.com/catalog/blocks/code-3d-extrude
Syntax-highlighted code on a lit, beveled 3D slab that rotates through real space and settles to a readable rest — true WebGL depth and lighting, not a 2D transform.
## Install
That writes one file: `compositions/code-3d-extrude.html`.
## Source
```html theme={null}
Code 3D Extrude
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `3d` `webgl` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Diff
Source: https://hyperframes.heygen.com/catalog/blocks/code-diff
An edit shown as a colored diff — removed lines collapse in red, added lines expand in green.
## Install
That writes one file: `compositions/code-diff.html`.
## Source
```html theme={null}
Code Diff
greet.js — Code Diff
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `diff` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Highlight Sweep
Source: https://hyperframes.heygen.com/catalog/blocks/code-highlight
A highlight band sweeps across a target line while the surrounding context dims — draws the eye to one line.
## Install
That writes one file: `compositions/code-highlight.html`.
## Source
```html theme={null}
Code Highlight Sweep
loadConfig.js — Code Highlight Sweep
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `highlight` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Morph
Source: https://hyperframes.heygen.com/catalog/blocks/code-morph
One snippet transforms into another — tokens glide between positions, leavers fade out, enterers fade in. Shiki Magic Move re-driven as a paused GSAP timeline.
## Install
That writes one file: `compositions/code-morph.html`.
## Source
```html theme={null}
Code Morph
refactor.js — Code Morph
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `morph` `refactor` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Particle Assemble
Source: https://hyperframes.heygen.com/catalog/blocks/code-particle-assemble
Thousands of GPU points scatter through space and fly to the exact glyph pixels of the code, resolving into readable syntax-highlighted text — a particle system, not a token tween.
## Install
That writes one file: `compositions/code-particle-assemble.html`.
## Source
```html theme={null}
Code Particle Assemble
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `particles` `gpu` `webgl` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Scroll To Line
Source: https://hyperframes.heygen.com/catalog/blocks/code-scroll
The camera scrolls a long file to bring a target line to center and spotlights it — for walking through real modules.
## Install
That writes one file: `compositions/code-scroll.html`.
## Source
```html theme={null}
Code Scroll To Line
fetchWithRetry.js — Code Scroll To Line
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `scroll` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Shader Dissolve
Source: https://hyperframes.heygen.com/catalog/blocks/code-shader-dissolve
The code compiles into existence: a GPU fragment shader resolves it out of seeded noise with a chromatic dissolve front and edge glow, then holds crisp.
## Install
That writes one file: `compositions/code-shader-dissolve.html`.
## Source
```html theme={null}
Code Shader Dissolve
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `shader` `webgl` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Basic
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-basic
Apple Terminal Basic profile: white background, black text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-basic.html`.
## Source
```html theme={null}
Apple Terminal Basic
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys001total 48drwxr-xr-x 8 user staff 256 Jun 2 09:10 .drwxr-xr-x 42 user staff 1344 Jun 1 18:22 ..-rw-r--r-- 1 user staff 872 May 30 14:05 README.mddrwxr-xr-x 5 user staff 160 Jun 2 09:10 distdrwxr-xr-x 12 user staff 384 Jun 2 09:10 node_modules-rw-r--r-- 1 user staff 1204 Jun 2 09:08 package.jsondrwxr-xr-x 6 user staff 192 Jun 2 09:10 src-rw-r--r-- 1 user staff 348 May 29 11:42 tsconfig.json
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Basic profile — white background, black text, solid cursor
* macOS window chrome with traffic light buttons (close, minimize, fullscreen) and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Clear Dark
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-clear-dark
Apple Terminal Clear Dark profile: semi-transparent dark background, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-clear-dark.html`.
## Source
```html theme={null}
Apple Terminal Clear Dark
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys002Scanning dependencies...Found 3 vulnerabilities (1 moderate, 2 low) package: lodash@4.17.20 severity: moderate fix: lodash@4.17.21 package: minimist@1.2.5 severity: low fix: minimist@1.2.6Run `npm audit fix` to fix them.
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Clear Dark profile — semi-transparent black background with white text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Clear Light
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-clear-light
Apple Terminal Clear Light profile: semi-transparent light background, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-clear-light.html`.
## Source
```html theme={null}
Apple Terminal Clear Light
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys003git log --oneline -8a3f2c19 fix: correct off-by-one in paginationb7e8d04 feat: add dark mode togglec1a9f55 refactor: extract auth helpersd4e2b31 test: add unit tests for parsere6c8a72 docs: update API referencef9b1d44 chore: bump dependencies2a7e890 feat: implement search endpoint3c5f012 init: project bootstrap
user@Mac myproject %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Clear Light profile — semi-transparent white background with black text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Grass
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-grass
Apple Terminal Grass profile: black background with green text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-grass.html`.
## Source
```html theme={null}
Apple Terminal Grass
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys004Running test suite... ✓ should initialize with defaults (2ms) ✓ should parse config correctly (4ms) ✓ should handle empty input (1ms) ✓ should reject invalid tokens (3ms) ✓ should emit events on change (5ms) ✓ should clean up on destroy (2ms) 6 passing (18ms)
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Grass profile — black background with #00C100 green text
* macOS window chrome with green-accented title bar and traffic light buttons
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Homebrew
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-homebrew
Apple Terminal Homebrew profile: black background with bright green text and lime cursor, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-homebrew.html`.
## Source
```html theme={null}
Apple Terminal Homebrew
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys005==> Updating Homebrew...Already up-to-date.==> Outdated formulaenode 20.11.0 -> 22.3.0python 3.11.6 -> 3.12.4git 2.43.0 -> 2.45.2ffmpeg 6.1.1 -> 7.0.0==> Run `brew upgrade` to update 4 formulae.
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Homebrew profile — black background with #00CF00 text and #48F800 cursor
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Man Page
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-man-page
Apple Terminal Man Page profile: pale yellow background with black text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-man-page.html`.
## Source
```html theme={null}
Apple Terminal Man Page
man — 80×24
CURL(1) General Commands Manual CURL(1)NAMEcurl -- transfer a URLSYNOPSIScurl [options / URLs]DESCRIPTIONcurl is a tool for transferring data from or to a server using URLs.
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Man Page profile — pale yellow background with black text
* Shows a realistic man page output structure with sections and indented content
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Novel
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-novel
Apple Terminal Novel profile: warm parchment background with dark brown text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-novel.html`.
## Source
```html theme={null}
Apple Terminal Novel
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys006Python 3.12.4 (main, Jun 6 2024, 18:26:44)Type "help", "copyright", "credits" or "license" for more information.>>> import hyperframes>>> hf = hyperframes.Composition("intro.html")>>> hf.duration12.0>>> hf.dimensionsDimensions(width=1920, height=1080)
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Novel profile — warm parchment background with #3E2900 dark brown text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Ocean
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-ocean
Apple Terminal Ocean profile: deep blue background with white text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-ocean.html`.
## Source
```html theme={null}
Apple Terminal Ocean
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys007docker psCONTAINER ID IMAGE COMMAND CREATEDa1b2c3d4e5f6 nginx:latest "/docker-entrypoint.…" 2 hours agob2c3d4e5f6a7 postgres:15 "docker-entrypoint.s…" 2 hours agoc3d4e5f6a7b8 redis:alpine "docker-entrypoint.s…" 2 hours ago3 containers runningUse 'docker logs CONTAINER' to view output
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Ocean profile — #224FBE blue background with white text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Pro
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-pro
Apple Terminal Pro profile: black background with grey text and lime green cursor, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-pro.html`.
## Source
```html theme={null}
Apple Terminal Pro
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys008Building production bundle... vite v5.3.1 building for production... ✓ 142 modules transformed. dist/index.html 0.48 kB dist/assets/index-Cv3rN.js 284.12 kB dist/assets/index-Du4mP.css 42.08 kB ✓ built in 2.31s
user@Mac myapp %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Pro profile — black background, #BBBBBB grey text, #88FF67 lime cursor
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Red Sands
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-red-sands
Apple Terminal Red Sands profile: deep red background with sandy text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-red-sands.html`.
## Source
```html theme={null}
Apple Terminal Red Sands
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys009Fetching https://api.example.com/status HTTP/2 200 content-type: application/json x-request-id: a3f9c21e-04b2-4d78{ "status": "healthy", "version": "2.4.1", "uptime": "14d 6h 32m"}
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Red Sands profile — #7B140E red background with #FFE1B9 sandy text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Silver Aerogel
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-silver-aerogel
Apple Terminal Silver Aerogel profile: dark grey background with white text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-silver-aerogel.html`.
## Source
```html theme={null}
Apple Terminal Silver Aerogel
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys010Checking system resources...Filesystem Size Used Avail Use%/dev/disk3s1s1 460G 142G 302G 32%/dev/disk3s6 460G 5.0G 302G 2%/dev/disk3s2 460G 11G 302G 4%Memory: 14.2 GB / 16.0 GB used (89%)CPU: 8-core, 12% load average
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Silver Aerogel profile — #3D3D3D dark grey background with white text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Apple Terminal Solid Colors
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-apple-terminal-solid-colors
Apple Terminal Solid Colors profile: deep purple background with white text, per-character typing animation of a shell session.
## Install
That writes one file: `compositions/code-snippet-apple-terminal-solid-colors.html`.
## Source
```html theme={null}
Apple Terminal Solid Colors
bash — 80×24
Last login: Mon Jun 2 09:14:22 on ttys011Initializing HyperFrames project... Creating project structure Copying template files Installing dependencies added 142 packages in 3.4s ✓ Project ready at ./my-video Run: cd my-video && npx hyperframes preview
user@Mac ~ %
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Faithful recreation of macOS Terminal.app Solid Colors profile — #4C0099 deep purple background with white text
* macOS window chrome with traffic light buttons and centered title bar
* Per-character GSAP typing animation — command types out character by character
* Output lines reveal sequentially after command executes
* Cursor blinks three times at the end then holds steady
* Self-contained HTML — no external assets, only GSAP CDN
Tagged `code` `developer` `showcase` `terminal` `apple` `apple-terminal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Dark 2026
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-dark-2026
VS Code workbench with per-character typing animation in the Dark 2026 theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-dark-2026.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Dark 2026 VS Code Theme Composition
Official VS Code built-in theme
Dark 2026
Typing `functional_toolkit.py` with workbench colors from
2026-dark.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Dark Modern
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-dark-modern
VS Code workbench with per-character typing animation in the Dark Modern theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-dark-modern.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Dark Modern VS Code Theme Composition
Official VS Code built-in theme
Dark Modern
Typing `functional_toolkit.py` with workbench colors from
dark_modern.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Dark+
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-dark-plus
VS Code workbench with per-character typing animation in the Dark+ theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-dark-plus.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Dark+ VS Code Theme Composition
Official VS Code built-in theme
Dark+
Typing `functional_toolkit.py` with workbench colors from
dark_plus.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet Flight
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-flight
Discrete code snippets fly in from the side and assemble into a stacked program, staggered. Block-level FLIP.
## Install
That writes one file: `compositions/code-snippet-flight.html`.
## Source
```html theme={null}
Code Snippet Flight
pipeline.js — Code Snippet Flight
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `flight` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - High Contrast
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-high-contrast
VS Code workbench with per-character typing animation in the High Contrast theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-high-contrast.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Default High Contrast VS Code Theme Composition
Official VS Code built-in theme
Default High Contrast
Typing `functional_toolkit.py` with workbench colors from
hc_black.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - High Contrast Light
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-high-contrast-light
VS Code workbench with per-character typing animation in the High Contrast Light theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-high-contrast-light.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Default High Contrast Light VS Code Theme Composition
Official VS Code built-in theme
Default High Contrast Light
Typing `functional_toolkit.py` with workbench colors from
hc_light.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Light 2026
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-light-2026
VS Code workbench with per-character typing animation in the Light 2026 theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-light-2026.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Light 2026 VS Code Theme Composition
Official VS Code built-in theme
Light 2026
Typing `functional_toolkit.py` with workbench colors from
2026-light.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Light Modern
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-light-modern
VS Code workbench with per-character typing animation in the Light Modern theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-light-modern.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Light Modern VS Code Theme Composition
Official VS Code built-in theme
Light Modern
Typing `functional_toolkit.py` with workbench colors from
light_modern.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Light+
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-light-plus
VS Code workbench with per-character typing animation in the Light+ theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-light-plus.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Light+ VS Code Theme Composition
Official VS Code built-in theme
Light+
Typing `functional_toolkit.py` with workbench colors from
light_plus.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Monokai
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-monokai
VS Code workbench with per-character typing animation in the Monokai theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-monokai.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Monokai VS Code Theme Composition
Official VS Code built-in theme
Monokai
Typing `functional_toolkit.py` with workbench colors from
monokai-color-theme.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Solarized Light
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-solarized-light
VS Code workbench with per-character typing animation in the Solarized Light theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-solarized-light.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Solarized Light VS Code Theme Composition
Official VS Code built-in theme
Solarized Light
Typing `functional_toolkit.py` with workbench colors from
solarized-light-color-theme.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Visual Studio Dark
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-visual-studio-dark
VS Code workbench with per-character typing animation in the Visual Studio Dark theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-visual-studio-dark.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Visual Studio Dark VS Code Theme Composition
Official VS Code built-in theme
Visual Studio Dark
Typing `functional_toolkit.py` with workbench colors from
dark_vs.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Snippet - Visual Studio Light
Source: https://hyperframes.heygen.com/catalog/blocks/code-snippet-visual-studio-light
VS Code workbench with per-character typing animation in the Visual Studio Light theme. Full editor chrome with activity bar, sidebar, tabs, terminal, and status bar.
## Install
That writes `compositions/code-snippet-visual-studio-light.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
Visual Studio Light VS Code Theme Composition
Official VS Code built-in theme
Visual Studio Light
Typing `functional_toolkit.py` with workbench colors from
light_vs.json.
functional-toolkit - Visual Studio Code
Search
◇ functional_toolkit.py
README.md
functional-toolkit › src › functional_toolkit.py
TerminalProblemsOutput
functional-toolkit % python -m pytest
collected 3 items
tests/test_toolkit.py ... passed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
## Features
* Full VS Code workbench recreation — activity bar, sidebar, explorer tree, editor tabs, breadcrumbs, terminal panel, status bar
* Per-character typing animation with cursor tracking and active line highlight
* Colors sourced from official `microsoft/vscode` built-in theme JSON
* 3D perspective tilt at the end of the typing sequence
* Terminal panel with mock test output
Tagged `code` `developer` `showcase` `vscode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Typing
Source: https://hyperframes.heygen.com/catalog/blocks/code-typing
Token-streamed typing reveal with a caret that tracks the frontier — deterministic, no CSS animation.
## Install
That writes one file: `compositions/code-typing.html`.
## Source
```html theme={null}
Code Typing
loadConfig.js — Code Typing
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `code` `code-animation` `typing` `developer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cosmic Orb
Source: https://hyperframes.heygen.com/catalog/blocks/cosmic-orb
An iridescent soap-bubble planet: a slowly spinning sphere of nebula bands, dust lanes and twinkling stars wrapped in a refracting glass limb with chromatic aberration at the edge.
```html cosmic-orb.html theme={null}
Cosmic Orb
```
## Install
That writes one file: `compositions/cosmic-orb.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `--hue` — Nebula hue. Defaults to `268`.
* `--accent` — Accent hue. Defaults to `196`.
* `--spin` — Spin rate (turns per second). Defaults to `0.035`.
* `--stars` — Star density. Defaults to `1`.
* `--glow` — Glow intensity. Defaults to `1`.
* `--size` — Orb size (fraction of frame height). Defaults to `0.86`.
* `--pulse` — Beat pulse (0-1, flat value when no envelope is set). Defaults to `0`.
* `--pulseenvelope` — Beat pulse envelope: comma-separated 0-1 samples spread evenly across the clip. Defaults to \`\`.
* `--backdrop` — Backdrop. Defaults to `#04040a`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------------- | --------- | ----------------------------------------- | ------------ |
| `hue` | `268` | 0deg to 360deg, step 1deg | |
| `accent` | `196` | 0deg to 360deg, step 1deg | |
| `spin` | `0.035` | 0turns/s to 0.5turns/s, step 0.005turns/s | |
| `stars` | `1` | 0 to 2, step 0.05 | |
| `glow` | `1` | 0 to 2, step 0.05 | |
| `size` | `0.86` | 0.2 to 1.2, step 0.01 | |
| `pulse` | `0` | 0 to 1, step 0.01 | |
| `pulseEnvelope` | \`\` | string | |
| `backdrop` | `#04040a` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Cosmic Orb
```
Tagged `webgl` `shader` `background` `showcase` `3d`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cross Warp Morph
Source: https://hyperframes.heygen.com/catalog/blocks/cross-warp-morph
Shader transition with cross-warped morphing
## Install
That writes one file: `compositions/cross-warp-morph.html`.
## Source
```html theme={null}
13 / 14
SCENE A
SCENE B
Cross-Warp Morph
Prompt
"use cross-warp morph shader transition"
Both scenes displace along a shared FBM noise field in opposite directions. Noise-driven
blend boundary.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Data Chart
Source: https://hyperframes.heygen.com/catalog/blocks/data-chart
Animated bar + line chart with staggered reveal, NYT-style typography, and value labels
## Install
That writes one file: `compositions/data-chart.html`.
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#faf9f6`.
* `--text-color` — Text color. Defaults to `#333333`.
## Source
```html theme={null}
Data Chart
Monthly Revenue vs. Conversion Rate
Jan–Jun 2024, in thousands
Revenue
Conversion Rate
Source: Internal analytics
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `chart` `statistics`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Domain Warp Dissolve
Source: https://hyperframes.heygen.com/catalog/blocks/domain-warp-dissolve
Shader transition with fractal noise domain warping
## Install
That writes one file: `compositions/domain-warp-dissolve.html`.
## Source
```html theme={null}
01 / 14
SCENE A
SCENE B
Domain Warp Dissolve
Prompt
"use domain warp dissolve shader transition"
Cascaded fbm(p + fbm(p)) displaces both scenes along a warp field. Iridescent
cosine-palette edge glow.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Editorial Flash Overlay
Source: https://hyperframes.heygen.com/catalog/blocks/editorial-flash-overlay
Finite neutral-warm light layers for a seek-safe camera-flash cut or social reveal
## Install
That writes one file: `compositions/editorial-flash-overlay.html`.
## Add it to your video
It runs for 4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `flash` `editorial` `social` `light` `transition` `overlay` `media-treatment-overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Flash Through White
Source: https://hyperframes.heygen.com/catalog/blocks/flash-through-white
Shader transition with white flash crossfade
## Install
That writes one file: `compositions/flash-through-white.html`.
## Source
```html theme={null}
12 / 14
SCENE A
SCENE B
Flash Through White
Prompt
"use flash through white shader transition"
Both scenes brighten to a white midpoint. Works on dark backgrounds where
color-dip-to-black is invisible.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Flowchart
Source: https://hyperframes.heygen.com/catalog/blocks/flowchart
Animated decision tree with SVG connectors, sticky-note nodes, cursor interaction, and typing correction
## Install
That writes one file: `compositions/flowchart.html`.
## Source
```html theme={null}
Flowchart
Yes
Not sure
Should I learn to code?
Yes
Not sure
Start with Pythom
Try no-code first
Build a personal website
Take a free intro course
You
👍
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `diagram` `flowchart` `interactive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Flowchart Vertical
Source: https://hyperframes.heygen.com/catalog/blocks/flowchart-vertical
Portrait animated decision tree with SVG connectors, sticky-note nodes, cursor interaction, and typing correction
## Install
That writes one file: `compositions/flowchart-vertical.html`.
## Source
```html theme={null}
Flowchart Vertical
Yes
Not sure
Should I learn to code?
Yes
Not sure
Start with Pythom
Try no-code first
Build a personal website
Take a free intro course
You
👍
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `diagram` `flowchart` `interactive` `portrait`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Freeze-Frame Dressing
Source: https://hyperframes.heygen.com/catalog/blocks/freeze-frame-dressing
Timeline-driven paper, tape, and flash dressing for a freeze-frame or background-removed subject
## Install
That writes one file: `compositions/freeze-frame-dressing.html`.
## Add it to your video
It runs for 4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `freeze-frame` `cutout` `scrapbook` `paper` `social` `overlay` `media-treatment-overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Gallery Tunnel
Source: https://hyperframes.heygen.com/catalog/blocks/gallery-tunnel
An infinite corridor of panels: a square tunnel receding to a vanishing point, its floor, ceiling and walls tiled with saturated colour slabs and caller-supplied images that swell toward camera and exit past you, the far end dissolving into fog.
```html gallery-tunnel.html theme={null}
Gallery Tunnel
```
## Install
That writes one file: `compositions/gallery-tunnel.html`.
## Add it to your video
It runs for 12 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `--images` — Image slots: comma-separated paths, tiled into the panels (e.g. assets/shot-1.png,assets/shot-2.png). Defaults to \`\`.
* `--imagemix` — Image share of filled slots (0 = all colour, 1 = all images). Defaults to `0.5`.
* `--speed` — Flight speed (segments per second). Defaults to `3`.
* `--palette` — Slab palette: comma-separated hex colours. Defaults to `#FF6A00,#AB54F7,#EA3737,#0072E3,#00AA3C,#FFB200`.
* `--grid` — Grid density: slots per wall face per axis (2 = 4 per face, 16 per segment). Defaults to `2`.
* `--fill` — Slot fill rate. Defaults to `0.5`.
* `--fog` — Fog distance in segments: depth at which the corridor reaches pure backdrop. Defaults to `14.25`.
* `--edgecolor` — Edge line colour. Defaults to `#B0B0B0`.
* `--edgeopacity` — Edge line opacity. Defaults to `0.5`.
* `--backdrop` — Backdrop and fog colour. Defaults to `#000000`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------------------------------------------- | ---------------------------------------------- | ------------ |
| `images` | \`\` | string | |
| `imageMix` | `0.5` | 0 to 1, step 0.05 | |
| `speed` | `3` | 0segments/s to 8segments/s, step 0.1segments/s | |
| `palette` | `#FF6A00,#AB54F7,#EA3737,#0072E3,#00AA3C,#FFB200` | string | |
| `grid` | `2` | 1 to 4, step 1 | |
| `fill` | `0.5` | 0 to 1, step 0.05 | |
| `fog` | `14.25` | 3segments to 14.5segments, step 0.25segments | |
| `edgeColor` | `#B0B0B0` | color | |
| `edgeOpacity` | `0.5` | 0 to 1, step 0.05 | |
| `backdrop` | `#000000` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Gallery Tunnel
```
Tagged `webgl` `3d` `background` `showcase` `depth` `loop`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Glitch
Source: https://hyperframes.heygen.com/catalog/blocks/glitch
Shader transition with digital glitch artifacts
## Install
That writes one file: `compositions/glitch.html`.
## Source
```html theme={null}
09 / 14
SCENE A
SCENE B
Glitch
Prompt
"use glitch shader transition"
Scan lines, block scramble, chromatic aberration, brightness flicker, and color
posterization.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Gravitational Lens
Source: https://hyperframes.heygen.com/catalog/blocks/gravitational-lens
Shader transition with gravitational lensing distortion
## Install
That writes one file: `compositions/gravitational-lens.html`.
## Source
```html theme={null}
06 / 14
SCENE A
SCENE B
Gravitational Lens
Prompt
"use gravitational lens shader transition"
Content warps toward a gravity well with chromatic aberration and event horizon darkening.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Halftone Field
Source: https://hyperframes.heygen.com/catalog/blocks/halftone-field
A full-bleed halftone light field: a grid of dots whose size and colour track a slow flowing simplex-noise field, so broad bands of light sweep across a mostly-black frame like a giant LED wall showing a plasma. Built to run under type.
```html halftone-field.html theme={null}
Halftone Field
```
## Install
That writes one file: `compositions/halftone-field.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `--frequency` — Field frequency (1 = broad swells, 10 = fine mottle). Defaults to `2`.
* `--speed` — Flow speed (0 freezes the field). Defaults to `5`.
* `--cellsize` — Cell size (dot pitch, 1 = 6px, 100 = 60px). Defaults to `54`.
* `--gamma` — Gamma: midtone crush, the whole look. Low values flatten it to an even grey dot field. Defaults to `12`.
* `--palettebias` — Palette bias: floor under every dot's size and palette position. 0 lets the darks go fully black. Defaults to `2`.
* `--palette1` — Palette stop 1 (lows). Defaults to `#00AAFF`.
* `--palette2` — Palette stop 2. Defaults to `#C2FF67`.
* `--palette3` — Palette stop 3. Defaults to `#6600FF`.
* `--palette4` — Palette stop 4 (crests). Defaults to `#000000`.
* `--background` — Background. Defaults to `#000000`.
* `--quantize` — Quantise to 30fps for a stepped LED-wall look. Defaults to `false`. Options: `false`, `true`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | --------- | ----------------- | ------------ |
| `frequency` | `2` | 1 to 10, step 0.1 | |
| `speed` | `5` | 0 to 10, step 0.1 | |
| `cellSize` | `54` | 1 to 100, step 1 | |
| `gamma` | `12` | 1 to 20, step 0.1 | |
| `paletteBias` | `2` | 0 to 20, step 0.5 | |
| `palette1` | `#00AAFF` | color | |
| `palette2` | `#C2FF67` | color | |
| `palette3` | `#6600FF` | color | |
| `palette4` | `#000000` | color | |
| `background` | `#000000` | color | |
| `quantize` | `false` | boolean | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Halftone Field
```
Tagged `webgl` `shader` `background` `texture` `halftone`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# HeyGen Avatar Promo Card
Source: https://hyperframes.heygen.com/catalog/blocks/heygen-avatar-promo-card
A portrait HeyGen offer card pairs a moving avatar mosaic with bold promotional typography and a branded callout
## Install
That writes `compositions/heygen-avatar-promo-card.html`, plus 14 supporting files under `assets/` and `assets/fonts/`.
## Add it to your video
It runs for 10 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
25%
OFF
CODE
GEN25
Your avatar,
by HeyGen.
AI video, camera-free.
4K AVATARS
NO CAMERA NEEDED
```
Tagged `showcase` `avatar` `promotion` `vertical` `ad-template`.
Created by HeyGen.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Sketched Frame
Source: https://hyperframes.heygen.com/catalog/blocks/hw-frame
Media in a hand-drawn border with corner doodles and a handwritten caption; the unit tilts slightly and boils (images inside the block; keep live footage in the host)
## Install
That writes `compositions/hw-frame.html`, plus 1 supporting file under `assets/fonts/`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `frame` `media`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Text Along a Path
Source: https://hyperframes.heygen.com/catalog/blocks/hw-path-text
Handwriting flowing along any SVG path with a per-character reveal; the path is the only geometry input
## Install
That writes `compositions/hw-path-text.html`, plus 1 supporting file under `assets/fonts/`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `typography` `path` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Hand-Drawn Flowchart
Source: https://hyperframes.heygen.com/catalog/blocks/hw-pipeline
Wobbled boxes with handwritten labels joined by curved connectors, drawing on in sequence from a node list
## Install
That writes `compositions/hw-pipeline.html`, plus 1 supporting file under `assets/fonts/`.
## Add it to your video
It runs for 7 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `diagram` `data-viz` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scribble Transition
Source: https://hyperframes.heygen.com/catalog/blocks/hw-scribble-transition
Overlay transition: scribble bands accumulate to cover the frame with a solid backstop, the host cuts beneath, and the scribble clears
## Install
That writes one file: `compositions/hw-scribble-transition.html`.
## Add it to your video
It runs for 2.2 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `transition` `wipe`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Speech Bubble
Source: https://hyperframes.heygen.com/catalog/blocks/hw-text-cloud
Hand-drawn speech bubble with a positionable tail: outline draws on, paper fill fades in, handwritten text types per character; boils
## Install
That writes `compositions/hw-text-cloud.html`, plus 1 supporting file under `assets/fonts/`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `speech-bubble` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Handwritten Title
Source: https://hyperframes.heygen.com/catalog/blocks/hw-title
Handwritten display text with a scalar-driven word-by-word highlight sweep and a seeded squiggle underline sized to the text; boils
## Install
That writes `compositions/hw-title.html`, plus 1 supporting file under `assets/fonts/`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `handwritten` `typography` `title-card` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Instagram Follow
Source: https://hyperframes.heygen.com/catalog/blocks/instagram-follow
Animated Instagram follow overlay with profile card and follow button
## Install
That writes `compositions/instagram-follow.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
HeyGen
@heygen_official
47.5K followers
FollowFollowing
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `instagram`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# iOS 26 Liquid Glass Home Screen
Source: https://hyperframes.heygen.com/catalog/blocks/ios26-liquid-glass
3D iPhone with a normal iOS 26 home screen, liquid glass app icons, shader wallpaper, dock, and fluid glass notifications that drop from the status area onto a GLTF device model.
## Install
That writes `compositions/ios26-liquid-glass.html`, plus 28 supporting files under `models/`, `lib/`, and `assets/icons/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Devices Canvas — HTML-in-Canvas API Showcase
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `liquid-glass-html-in-canvas` `webgpu` `3d` `iphone` `ios26` `notifications` `gltf` `html-in-canvas`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Light Leak
Source: https://hyperframes.heygen.com/catalog/blocks/light-leak
Shader transition with cinematic light leak overlay
## Install
That writes one file: `compositions/light-leak.html`.
## Source
```html theme={null}
14 / 14
SCENE A
SCENE B
Light Leak
Prompt
"use light leak shader transition"
Beer-Lambert exponential falloff with ACES tone mapping and directional flare streak.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Glass Context Menu
Source: https://hyperframes.heygen.com/catalog/blocks/liquid-glass-context-menu
Frosted glass context menu panel drifting over an aurora shader background
## Install
That writes `compositions/liquid-glass-context-menu.html`, plus 1 supporting file under `compositions/lib/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Liquid Glass Context Menu
liquid-glass.mov
Preview render - 08s
Share
Add to Bookmarks
Add Bookmark to...
New Tab⌘T
New Private Tab⇧⌘N
Open in New Tab
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `liquid-glass-html-in-canvas` `webgpu`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Glass Media Controls
Source: https://hyperframes.heygen.com/catalog/blocks/liquid-glass-media-controls
Frosted glass media control panels spreading over an aurora shader background
## Install
That writes `compositions/liquid-glass-media-controls.html`, plus 1 supporting file under `compositions/lib/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Liquid Glass Media Controls
Search
All
Favorites
Recent
Midnight Drive
Glass Resonance
34%
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `liquid-glass-html-in-canvas` `webgpu`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Glass Notification
Source: https://hyperframes.heygen.com/catalog/blocks/liquid-glass-notification
Frosted glass notification cards floating over an aurora shader background
## Install
That writes `compositions/liquid-glass-notification.html`, plus 2 supporting files under `compositions/assets/` and `compositions/lib/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Render completerendering
Liquid glass preview is encoding with GPU capture.
M
Messagesnow
Miguel: can it feel alive but still native?
ReplyMark Read
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `liquid-glass-html-in-canvas` `webgpu`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Glass Widgets
Source: https://hyperframes.heygen.com/catalog/blocks/liquid-glass-widgets
Frosted glass stat cards, showcase panel and pill chips over an aurora shader background
## Install
That writes `compositions/liquid-glass-widgets.html`, plus 2 supporting files under `compositions/assets/` and `compositions/lib/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Liquid Glass Widgets
Temperature21°
Battery
87%
Steps
8.2K
Preview pipeline
Write HTML, render video. Ship compositions at the speed of code.
Encoding frames
Connected
Bluetooth
Focus
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `liquid-glass-html-in-canvas` `webgpu`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Logo Outro
Source: https://hyperframes.heygen.com/catalog/blocks/logo-outro
Cinematic logo reveal with piece-by-piece assembly, glow bloom, tagline fade-in, and URL pill
## Install
That writes one file: `compositions/logo-outro.html`.
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#0a0a0f`.
* `--accent-color` — Accent. Defaults to `#1a1a1f`.
## Source
```html theme={null}
Logo Outro
Nothing great is made alone.
figma.com
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `branding` `outro` `logo`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — BILD Style
Source: https://hyperframes.heygen.com/catalog/blocks/lower-third-bild
News-style lower third with tight-fit text boxes: white headline bar with red drop-shadow, red sub-line with white drop-shadow.
```html lower-third-bild.html theme={null}
```
## Install
That writes `compositions/lower-third-bild.html`, plus 2 supporting files under `compositions/assets/fonts/`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------------- | --------------- | ------- | ------------ |
| `TXT_MAIN_1_Line` | `BILD EXKLUSIV` | string | |
| `TXT_SUB` | `Sonderbericht` | string | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `broadcast` `lower-third` `news` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Accent Underline
Source: https://hyperframes.heygen.com/catalog/blocks/lt-accent-underline
Cardless lower third for footage overlay: name rises, an accent rule draws left-to-right, role fades in; text-shadowed for legibility
## Install
That writes one file: `compositions/lt-accent-underline.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Bold Block
Source: https://hyperframes.heygen.com/catalog/blocks/lt-bold-block
High-energy podcast lower third: solid dark block wipes in, uppercase name slams up, accent tag pops
## Install
That writes one file: `compositions/lt-bold-block.html`.
## Source
```html theme={null}
Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `bold`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Clean Bar
Source: https://hyperframes.heygen.com/catalog/blocks/lt-clean-bar
Minimal white-card lower third for podcasts/interviews: accent tab, name + role, clip-wipe entrance
## Install
That writes one file: `compositions/lt-clean-bar.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Color Block
Source: https://hyperframes.heygen.com/catalog/blocks/lt-color-block
High-energy lower third: bold accent-color block slides in with overshoot, condensed name + mono role
## Install
That writes one file: `compositions/lt-color-block.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `bold`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Dark Card
Source: https://hyperframes.heygen.com/catalog/blocks/lt-dark-card
Charcoal card lower third for bright footage: name, drawn accent underline, role; slide-up entrance
## Install
That writes one file: `compositions/lt-dark-card.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `dark`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Kicker Name
Source: https://hyperframes.heygen.com/catalog/blocks/lt-kicker-name
Cardless lower third with an accent eyebrow/kicker tag, heavy name, and a drawn baseline; for footage
## Install
That writes one file: `compositions/lt-kicker-name.html`.
## Source
```html theme={null}
Episode 47
Maya Chen
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `bold`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Mask Reveal
Source: https://hyperframes.heygen.com/catalog/blocks/lt-mask-reveal
Cardless lower third: an accent sweep crosses and clip-path-reveals a heavy name, role fades up; for footage
## Install
That writes one file: `compositions/lt-mask-reveal.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `bold`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Neon Border
Source: https://hyperframes.heygen.com/catalog/blocks/lt-neon-border
Two arcs of light travel the edge of a rounded panel and snap corner to corner, trailing a soft three-layer bloom. A lower third for a name and role.
```html lt-neon-border.html theme={null}
Dr. Maya ChenHost · Neuroscientist
```
## Install
That writes one file: `compositions/lt-neon-border.html`.
## Add it to your video
It runs for 4.8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `undefined` — Name. Defaults to `Dr. Maya Chen`.
* `undefined` — Role. Defaults to `Host · Neuroscientist`.
* `undefined` — Accent. Defaults to `#cc9149`.
* `undefined` — Movement. Defaults to `step`. Options: `step`, `glide`.
* `undefined` — Speed. Defaults to `1.6`.
* `undefined` — Corner radius. Defaults to `26`.
* `undefined` — Thickness. Defaults to `5`.
* `undefined` — Arc length. Defaults to `22`.
* `undefined` — Glow. Defaults to `1`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ----------------------- | --------------------------------------------- | ------------ |
| `name` | `Dr. Maya Chen` | string | |
| `role` | `Host · Neuroscientist` | string | |
| `accent` | `#cc9149` | color | |
| `movement` | `step` | `step`, `glide` | |
| `speed` | `1.6` | 0.2corners/s to 6corners/s, step 0.1corners/s | |
| `cornerRadius` | `26` | 0px to 90px, step 1px | |
| `thickness` | `5` | 1px to 16px, step 1px | |
| `arcLength` | `22` | 5% to 100%, step 1% | |
| `glow` | `1` | 0x to 2x, step 0.05x | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Dr. Maya ChenHost · Neuroscientist
```
Tagged `lower-third` `glow` `loop` `video-primitive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Side Rule
Source: https://hyperframes.heygen.com/catalog/blocks/lt-side-rule
Cardless lower third with a vertical accent bar; condensed display name + mono role, text-shadowed for footage
## Install
That writes one file: `compositions/lt-side-rule.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Soft Pill
Source: https://hyperframes.heygen.com/catalog/blocks/lt-soft-pill
Rounded white pill lower third for podcasts/interviews: status dot, name + role, scale-pop entrance
## Install
That writes one file: `compositions/lt-soft-pill.html`.
## Source
```html theme={null}
Dr. Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Lower Third — Stack Bars
Source: https://hyperframes.heygen.com/catalog/blocks/lt-stack-bars
Two stacked bars: a dark name bar wipes from the left, an accent role bar wipes from the right
## Install
That writes one file: `compositions/lt-stack-bars.html`.
## Source
```html theme={null}
Maya Chen
Host · Neuroscientist
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `podcast` `interview` `bold`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# macOS Notification
Source: https://hyperframes.heygen.com/catalog/blocks/macos-notification
Animated macOS-style notification banner with app icon and message
## Install
That writes one file: `compositions/macos-notification.html`.
## Source
```html theme={null}
HyperFramesnow
Prompt to replace this title
Prompt to change this body text, the app icon, and the app name to match your content.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `notification`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# macOS Tahoe Liquid Glass Desktop
Source: https://hyperframes.heygen.com/catalog/blocks/macos-tahoe-liquid-glass
3D MacBook with a macOS Tahoe-style desktop, glass menu bar, Finder window, dock, and cinematic device camera move.
## Install
That writes `compositions/macos-tahoe-liquid-glass.html`, plus 18 supporting files under `models/`, `assets/wallpapers/`, and `assets/icons/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Devices Canvas — HTML-in-Canvas API Showcase
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `3d` `macos` `tahoe` `gltf`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Message Thread Reveal
Source: https://hyperframes.heygen.com/catalog/blocks/message-thread-reveal
A full text conversation plays out on a phone - bubbles popping in, typing indicators, a shared link card, emoji, delivered receipts - with the whole thread scrolling up beat by beat until a closing card lands. The complete chat ad-template, measured message by message
```html message-thread-reveal.html theme={null}
Message Thread Reveal
9:41
12
R
Rachel›
what r u using for the launch video??
wait look 👀
Delivered
HyperFrames | Write HTML, render pixel-perfect video
hyperframes.heygen.com
›
OMG IT'S HTML
🤯🤯🤯
renders in 4K. no editor
Delivered
where did u find this
on heygen
u just write plain html tags
the code is yours forever
Delivered
installing rn
ty bestie 💚
+
Message
owawaiwaitwait wait lwait lowait loowait lookwait look wait look 👀rrerenrendrenderenderrendersrenders renders irenders inrenders in renders in 4renders in 4Krenders in 4K.renders in 4K. renders in 4K. nrenders in 4K. norenders in 4K. no renders in 4K. no erenders in 4K. no edrenders in 4K. no edirenders in 4K. no editrenders in 4K. no editorenders in 4K. no editoroonon on hon heon heyon heygon heygeon heygenuu u ju juu jusu justu just u just wu just wru just wriu just writu just writeu just write u just write pu just write plu just write plau just write plaiu just write plainu just write plain u just write plain hu just write plain htu just write plain htmu just write plain htmlu just write plain html u just write plain html tu just write plain html tau just write plain html tagu just write plain html tagsrththethe the cthe cothe codthe codethe code the code ithe code isthe code is the code is ythe code is yothe code is youthe code is yourthe code is yoursthe code is yours the code is yours fthe code is yours fothe code is yours forthe code is yours forethe code is yours forevthe code is yours forevethe code is yours forever
12,000+ creators
Write
plain HTML
Render
pixel-perfect
Own
every line
Start rendering free
```
## Install
That writes `compositions/message-thread-reveal.html`, plus 2 supporting files under `assets/`.
## Add it to your video
It runs for 25.7667 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does | |
| ------------- | ------------------------ | ---------------------------------------- | ---------------------------------------------------------------- | ------------------------------ |
| `contactName` | `Rachel` | string | Name pill in the chat header; the avatar shows its first letter. | |
| `cardTitle` | \`HyperFrames | Write HTML, render pixel-perfect video\` | string | Title on the shared link card. |
| `cardDomain` | `hyperframes.heygen.com` | string | Domain line under the card title. | |
| `ecProof` | `12,000+ creators` | string | Social-proof line under the stars. | |
| `ecCta` | `Start rendering free` | string | Label on the closing card button. | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Message Thread Reveal
9:41
12
R
Rachel›
what r u using for the launch video??
wait look 👀
Delivered
HyperFrames | Write HTML, render pixel-perfect video
hyperframes.heygen.com
›
OMG IT'S HTML
🤯🤯🤯
renders in 4K. no editor
Delivered
where did u find this
on heygen
u just write plain html tags
the code is yours forever
Delivered
installing rn
ty bestie 💚
+
Message
owawaiwaitwait wait lwait lowait loowait lookwait look wait look 👀rrerenrendrenderenderrendersrenders renders irenders inrenders in renders in 4renders in 4Krenders in 4K.renders in 4K. renders in 4K. nrenders in 4K. norenders in 4K. no renders in 4K. no erenders in 4K. no edrenders in 4K. no edirenders in 4K. no editrenders in 4K. no editorenders in 4K. no editoroonon on hon heon heyon heygon heygeon heygenuu u ju juu jusu justu just u just wu just wru just wriu just writu just writeu just write u just write pu just write plu just write plau just write plaiu just write plainu just write plain u just write plain hu just write plain htu just write plain htmu just write plain htmlu just write plain html u just write plain html tu just write plain html tau just write plain html tagu just write plain html tagsrththethe the cthe cothe codthe codethe code the code ithe code isthe code is the code is ythe code is yothe code is youthe code is yourthe code is yoursthe code is yours the code is yours fthe code is yours fothe code is yours forthe code is yours forethe code is yours forevthe code is yours forevethe code is yours forever
12,000+ creators
Write
plain HTML
Render
pixel-perfect
Own
every line
Start rendering free
```
Tagged `showcase` `mock-ui` `chat` `vertical` `ad-template`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Minimal Gradient Background
Source: https://hyperframes.heygen.com/catalog/blocks/mk-background
Procedural soft-blob gradient backdrop in a minimalist presentation style: two radial blobs drifting over a base color, with an animatable rounded-card bar mask and optional frosted-glass mode
## Install
That writes one file: `compositions/mk-background.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `background` `gradient` `minimal` `professional` `presentation`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Word-Sweep Highlight
Source: https://hyperframes.heygen.com/catalog/blocks/mk-callout-highlight
A sentence whose word-by-word emphasis is driven by a single scalar — tween it to sync the highlight with a voiceover
## Install
That writes one file: `compositions/mk-callout-highlight.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `typography` `karaoke` `captions` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Text Clone Wall Transition
Source: https://hyperframes.heygen.com/catalog/blocks/mk-clone-wall-transition
Overlay transition: a tiled word wall covers the frame, inverts via difference blending, and clears — hard-cut the content beneath while covered
## Install
That writes one file: `compositions/mk-clone-wall-transition.html`.
## Add it to your video
It runs for 2.4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `transition` `typography` `wipe`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Minimal Line Graph
Source: https://hyperframes.heygen.com/catalog/blocks/mk-line-graph
One or two SVG series draw on with dots popping and value labels riding the draw front; dim baseline axis, x-labels, color-dot legend
## Install
That writes one file: `compositions/mk-line-graph.html`.
## Add it to your video
It runs for 7 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `data-viz` `chart` `graph` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Rounded Media Grid
Source: https://hyperframes.heygen.com/catalog/blocks/mk-placeholder-grid
N-up rounded-corner media grid (2-up, 3-up, 4-up, 3x2, hero plus two): per-cell inside-scale framing, staggered box-in entrance, slow settle
## Install
That writes one file: `compositions/mk-placeholder-grid.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `placeholder` `media` `grid` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Count-Up Stat Card
Source: https://hyperframes.heygen.com/catalog/blocks/mk-progress-stat
Big-numeral statistic with count-up, label, thin progress track filling to value/max, and caption; light and dark schemes
## Install
That writes one file: `compositions/mk-progress-stat.html`.
## Add it to your video
It runs for 7 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
0
```
Tagged `data-viz` `stat` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Specs Checklist
Source: https://hyperframes.heygen.com/catalog/blocks/mk-specs-list
Left-aligned specs/traits checklist over footage or a board: rows slide in staggered with an accent underline sweep; light and dark schemes
## Install
That writes one file: `compositions/mk-specs-list.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `data-viz` `list` `minimal` `professional`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# News Ticker
Source: https://hyperframes.heygen.com/catalog/blocks/news-ticker
Premium broadcast-style lower-third ticker with live label, headline ribbon, and scrolling news crawl.
## Install
That writes one file: `compositions/news-ticker.html`.
## Source
```html theme={null}
News Ticker
Live
Global Desk
AI video tools move from prototype to
production
09:41 UTC
Breaking
Creator teams shorten launch cycles by
38%Rendering queues clear in under
2 minNew catalog blocks trending across product
demosStudio editors adopt HTML-first motion
systemsCreator teams shorten launch cycles by
38%Rendering queues clear in under
2 min
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `lower-third` `overlay` `news` `ticker`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# North Korea Locked Down
Source: https://hyperframes.heygen.com/catalog/blocks/north-korea-locked-down
Realistic map zoom into North Korea with a red scribble circle, locked-down pop-up label, and reddish editorial wash.
## Install
That writes `compositions/north-korea-locked-down.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `map` `annotation` `youtube` `kinetic`.
Created by [Stronkter](https://x.com/Stronkter).
```text theme={null}
use 📷HyperFrames by HeyGen and Image Gen if you need it for assets or like png images of assets without backround to make a youtube style camera moving in out and other things that are in youtube videos, to make a video of a map zooms in on north korea and a scribble style circle circles the country and a text pops up above it saying locked down when the text apears the video turns a bit redish make the video 7 seconds long id like the map to look realistic and accurate to real lfe
```
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Notes Reveal
Source: https://hyperframes.heygen.com/catalog/blocks/notes-reveal
A personal note is typed character by character in a notes app - caret riding every letter, the page scrolling up on measured settle curves as each line lands - then cuts to a hand-lettered paper card with a marker headline and a ticked checklist
```html notes-reveal.html theme={null}
Notes Reveal
THE POWER
OF
ONEFILE
WRITE
HTML
RENDER
IN 4K
SHIP
TODAY
9:41
Things nobody told me
about video.
myvideossucked
mytoolscost$$$
andre-editsneverend.
thenitriedwritinghtmlonly
startedHyperFramesthreeweeksago
thegrindisgone,butmorethanthat—
Ishipvideosweekly.
Aa
The
My
I
q
w
e
r
t
y
u
i
o
p
a
s
d
f
g
h
j
k
l
z
x
c
v
b
n
m
123
space
```
## Install
That writes `compositions/notes-reveal.html`, plus 3 supporting files under `assets/`.
## Add it to your video
It runs for 24.85 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ----------------------- | ------- | --------------------------------------------- |
| `titleL1` | `Things nobody told me` | string | First line of the note title. |
| `titleL2` | `about video.` | string | Second line of the note title. |
| `cardTop` | `THE POWER` | string | First marker line on the closing card. |
| `check1Label` | `WRITE` | string | Typewriter label of the first checklist row. |
| `check1Value` | `HTML` | string | Marker value of the first checklist row. |
| `check2Label` | `RENDER` | string | Typewriter label of the second checklist row. |
| `check2Value` | `IN 4K` | string | Marker value of the second checklist row. |
| `check3Label` | `SHIP` | string | Typewriter label of the third checklist row. |
| `check3Value` | `TODAY` | string | Marker value of the third checklist row. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Notes Reveal
THE POWER
OF
ONEFILE
WRITE
HTML
RENDER
IN 4K
SHIP
TODAY
9:41
Things nobody told me
about video.
myvideossucked
mytoolscost$$$
andre-editsneverend.
thenitriedwritinghtmlonly
startedHyperFramesthreeweeksago
thegrindisgone,butmorethanthat—
Ishipvideosweekly.
Aa
The
My
I
q
w
e
r
t
y
u
i
o
p
a
s
d
f
g
h
j
k
l
z
x
c
v
b
n
m
123
space
```
Tagged `showcase` `mock-ui` `notes` `typing` `vertical` `ad-template`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Notification Cascade
Source: https://hyperframes.heygen.com/catalog/blocks/notification-cascade
Phone notifications land one after another and stack up the screen, each banner pushing the pile down as it arrives, before the whole stack lifts away into a closing card
```html notification-cascade.html theme={null}
Notification Cascade
Show less
New render
Launch video is ready.
NOW
HyperFrames
New render
All checks passed.
NOW
HyperFrames
New render
4K render done in 92s.
NOW
HyperFrames
New render
Published to the catalog.
NOW
HyperFrames
SHIP VIDEO
FROM HTML
```
## Install
That writes `compositions/notification-cascade.html`, plus 2 supporting files under `assets/`.
## Add it to your video
It runs for 14 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | --------------------------- | ------- | ------------------------------------------- |
| `notifTitle` | `New render` | string | Bold first line on every banner. |
| `message1` | `Launch video is ready.` | string | Subtitle of the first banner to land. |
| `message2` | `All checks passed.` | string | Subtitle of the second banner. |
| `message3` | `4K render done in 92s.` | string | Subtitle of the third banner. |
| `message4` | `Published to the catalog.` | string | Subtitle of the fourth banner. |
| `appName` | `HyperFrames` | string | Small credit in the corner of every banner. |
| `headlineTop` | `SHIP VIDEO` | string | First line of the closing card. |
| `headlineAccent` | `FROM HTML` | string | Accented second line of the closing card. |
| `footerText` | `hyperframes.heygen.com` | string | URL or call to action under the headline. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Notification Cascade
Show less
New render
Launch video is ready.
NOW
HyperFrames
New render
All checks passed.
NOW
HyperFrames
New render
4K render done in 92s.
NOW
HyperFrames
New render
Published to the catalog.
NOW
HyperFrames
SHIP VIDEO
FROM HTML
```
Tagged `showcase` `mock-ui` `notification` `vertical` `ad-template`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# NYC Paris Flight
Source: https://hyperframes.heygen.com/catalog/blocks/nyc-paris-flight
Apple-style realistic map animation with a plane flying from New York to Paris, marker circle, landing pop, and sound effects.
## Install
That writes `compositions/nyc-paris-flight.html`, plus 2 supporting files under `assets/`.
## Source
```html theme={null}
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `travel` `map` `youtube` `sfx`.
Created by [Stronkter](https://x.com/Stronkter).
```text theme={null}
📷HyperFrames by HeyGen Make a six-second Apple-style font bold video of a plane going from New York to Paris. A map animation, and then it shows the plane going from New York to Paris. Make the fonts Apple-style bold and make the map actual realistic, actually realistic. Before it lands in Paris, do a doodle circle in red around Paris, and then it lands in the doodle circle, and the video basically cuts to a white screen at the end. Also add sound effects for everything as well. Every nice motion, every the plane for pop-ups, bubble, pop-up effect, everything you want.
```
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Organic Light Leak Overlay
Source: https://hyperframes.heygen.com/catalog/blocks/organic-light-leak-overlay
Finite CSS light-leak overlay for memory beats and motivated transitions
## Install
That writes one file: `compositions/organic-light-leak-overlay.html`.
## Add it to your video
It runs for 4 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `light-leak` `film` `memory` `transition` `overlay` `media-treatment-overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Oscilloscope Trace
Source: https://hyperframes.heygen.com/catalog/blocks/oscilloscope-trace
CRT oscilloscope beam sweeping a waveform across a 10x8 graticule, with closed-form phosphor persistence: the tail decays as exp(-age/tau) and brightens where the beam slows
```html oscilloscope-trace.html theme={null}
Oscilloscope Trace
OSCILLOSCOPE
SOURCESINE
FREQ-
TIMEBASE-
VERT-
PHOSPHOR-
```
## Install
That writes one file: `compositions/oscilloscope-trace.html`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------------- | --------- | --------------------------------------------- | ------------ |
| `waveform` | `sine` | `sine`, `square`, `triangle`, `data` | |
| `frequency` | `12` | 0.1Hz to 200Hz, step 0.1Hz | |
| `amplitude` | `3` | 0.1div to 4div, step 0.1div | |
| `persistenceMs` | `100` | 1ms to 1000ms, step 1ms | |
| `phosphorColor` | `#5dff8f` | color | |
| `sweepRate` | `5` | 0.25sweeps/s to 60sweeps/s, step 0.25sweeps/s | |
| `dataSeries` | \`\` | string | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Oscilloscope Trace
OSCILLOSCOPE
SOURCESINE
FREQ-
TIMEBASE-
VERT-
PHOSPHOR-
```
Tagged `instrument` `data` `showcase` `retro`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Rack Focus
Source: https://hyperframes.heygen.com/catalog/blocks/rack-focus
A focus pull with real aperture bokeh: the focal plane travels from a near subject to a far one, so one resolves as the other blows into hard-edged polygon discs that clip to a cat's eye toward the corners. A focus pull only reads against content at two clearly separated depths, so this block carries its own depth-layered night exterior and puts both subject depths on variables.
```html rack-focus.html theme={null}
Rack Focus
```
## Install
That writes one file: `compositions/rack-focus.html`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `--nearfocus` — Near focal distance in metres (where the pull starts and the near subject sits). Defaults to `1.2`.
* `--farfocus` — Far focal distance in metres (where the pull ends and the far subject sits). Defaults to `80`.
* `--focallength` — Focal length in mm (longer lens = shallower depth of field). Defaults to `85`.
* `--aperture` — Aperture f-number (lower = bigger bokeh). Defaults to `1.8`.
* `--blades` — Aperture blade count, the bokeh polygon's sides. Defaults to `6`.
* `--catseye` — Cat's-eye clipping at the frame corners (mechanical vignetting). Defaults to `0.62`.
* `--pullstart` — Seconds held on the near subject before the pull starts. Defaults to `1.2`.
* `--pullduration` — Pull duration in seconds. Defaults to `3.2`.
* `--pullease` — Pull easing (any GSAP ease name). Defaults to `power2.inOut`.
* `--bokeh` — Bokeh exposure. Defaults to `1`.
* `--backdrop` — Backdrop. Defaults to `#05060a`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | -------------- | ------------------------ | ------------ |
| `nearfocus` | `1.2` | 0.2m to 100m, step 0.05m | |
| `farfocus` | `80` | 0.3m to 400m, step 0.5m | |
| `focallength` | `85` | 12mm to 300mm, step 1mm | |
| `aperture` | `1.8` | 0.95 to 22, step 0.05 | |
| `blades` | `6` | 3 to 14, step 1 | |
| `catseye` | `0.62` | 0 to 1, step 0.02 | |
| `pullstart` | `1.2` | 0s to 30s, step 0.05s | |
| `pullduration` | `3.2` | 0.1s to 30s, step 0.05s | |
| `pullease` | `power2.inOut` | string | |
| `bokeh` | `1` | 0 to 3, step 0.05 | |
| `backdrop` | `#05060a` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Rack Focus
```
Tagged `webgl` `shader` `camera` `depth` `cinematic` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Reddit Post Card
Source: https://hyperframes.heygen.com/catalog/blocks/reddit-post
Animated Reddit post card overlay with upvotes and comments
## Install
That writes one file: `compositions/reddit-post.html`.
## Source
```html theme={null}
r/hyperframesu/placeholder_user · 3h
Prompt to change this title to whatever you want
Prompt to change this body text, the subreddit, username, and vote count to match your
content.
4.2k
328
Share
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `reddit`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Ridged Burn
Source: https://hyperframes.heygen.com/catalog/blocks/ridged-burn
Shader transition with ridged turbulence burn effect
## Install
That writes one file: `compositions/ridged-burn.html`.
## Source
```html theme={null}
02 / 14
SCENE A
SCENE B
Ridged Burn
Prompt
"use ridged burn shader transition"
abs(noise) creates sharp lightning-crack edges. Blackbody color gradient with
high-frequency ember sparks.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Ripple Waves
Source: https://hyperframes.heygen.com/catalog/blocks/ripple-waves
Shader transition with concentric ripple wave distortion
## Install
That writes one file: `compositions/ripple-waves.html`.
## Source
```html theme={null}
05 / 14
SCENE A
SCENE B
Ripple Waves
Prompt
"use ripple waves shader transition"
Exponential sine waves with sharp crests and broad troughs. Both scenes ripple in opposite
phases.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# SDF Iris
Source: https://hyperframes.heygen.com/catalog/blocks/sdf-iris
Shader transition with signed distance field iris reveal
## Install
That writes one file: `compositions/sdf-iris.html`.
## Source
```html theme={null}
04 / 14
SCENE A
SCENE B
SDF Iris
Prompt
"use sdf iris shader transition"
Aspect-corrected circle SDF opening from center. Triple onion ring glow with warm
exponential falloff.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Share-Sheet Carousel
Source: https://hyperframes.heygen.com/catalog/blocks/share-sheet-carousel
A share sheet springs up from the bottom of the phone and cycles previews inside its card on a fast cut rhythm while the blurred ground swaps behind it, ending on an accept tap
```html share-sheet-carousel.html theme={null}
Share-Sheet Carousel
Share
HyperFrames would like to share a video
OPEN-SOURCE VIDEO ENGINE · SHIP FROM HTML
Decline
Accept
```
## Install
That writes `compositions/share-sheet-carousel.html`, plus 5 supporting files under `assets/`.
## Add it to your video
It runs for 7.2333 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ------------------------------------------- | ------- | ------------------------------------------------------------------------------- |
| `shareTitle` | `Share` | string | Heading at the top of the share sheet. |
| `senderName` | `HyperFrames` | string | Bold name in the sheet subtitle. |
| `itemLabel` | `a video` | string | What the sender is offering, completing the sentence "… would like to share …". |
| `stripText` | `OPEN-SOURCE VIDEO ENGINE · SHIP FROM HTML` | string | Small-caps line under the preview, beside the logo. |
| `acceptLabel` | `Accept` | string | Right-hand action button. |
| `declineLabel` | `Decline` | string | Left-hand action button. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Share-Sheet Carousel
Share
HyperFrames would like to share a video
OPEN-SOURCE VIDEO ENGINE · SHIP FROM HTML
Decline
Accept
```
Tagged `showcase` `mock-ui` `share-sheet` `vertical` `ad-template`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Slack Notification Ad
Source: https://hyperframes.heygen.com/catalog/blocks/slack-notification-ad
A portrait lock screen fills with escalating Slack video requests before HeyGen delivers the payoff
## Install
That writes `compositions/slack-notification-ad.html`, plus 6 supporting files under `assets/img/` and `assets/fonts/`.
## Add it to your video
It runs for 12 seconds at 1080×1920. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
Thursday, August 14
9:41
9:42
9:45
9:51
```
Tagged `showcase` `mock-ui` `notification` `vertical` `ad-template`.
Created by HeyGen.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spain Map
Source: https://hyperframes.heygen.com/catalog/blocks/spain-map
Animated Spain choropleth by autonomous community with staggered reveals and gradient legend — D3 conic conformal projection
## Install
That writes one file: `compositions/spain-map.html`.
## Source
```html theme={null}
Spain Map
PIB per cápita por Comunidad Autónoma
Producto Interior Bruto per cápita, estimación 2024
BajoAlto
Fuente: Instituto Nacional de Estadística
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `spain` `europe` `choropleth`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spiral Galaxy
Source: https://hyperframes.heygen.com/catalog/blocks/spiral-galaxy
A spiral galaxy seen from outside, turning with real differential rotation: inner stars orbit faster than outer ones, so the arms wind up over the shot instead of spinning rigidly. 20,000 additive GPU sprites, seeded once and solved directly from time, so any frame can be rendered on its own.
```html spiral-galaxy.html theme={null}
Spiral Galaxy
```
## Install
That writes one file: `compositions/spiral-galaxy.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `stars` — Star count. Defaults to `20000`.
* `arms` — Arm count. Defaults to `3`.
* `rate` — Rotation rate. Defaults to `0.25`.
* `glow` — Core brightness. Defaults to `1.9`.
* `size` — Star size. Defaults to `10`.
* `core` — Core colour. Defaults to `#ffa575`.
* `rim` — Rim colour. Defaults to `#311599`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------- | ---------------------------------- | ------------ |
| `stars` | `20000` | 2000 to 40000, step 1000 | |
| `arms` | `3` | 2 to 8, step 1 | |
| `rate` | `0.25` | 0rad/s to 1.5rad/s, step 0.05rad/s | |
| `glow` | `1.9` | 0.2 to 4, step 0.1 | |
| `size` | `10` | 2px to 40px, step 1px | |
| `core` | `#ffa575` | color | |
| `rim` | `#311599` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Spiral Galaxy
```
Tagged `hero` `space` `particles` `webgl` `background`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Split-Flap Board
Source: https://hyperframes.heygen.com/catalog/blocks/split-flap-board
Solari-style departure board: every cell walks its drum forward through the intervening characters of a fixed alphabet until it lands on its target, so the text resolves as a mechanical cascade instead of a fade.
```html split-flap-board.html theme={null}
Split-Flap Board
```
## Install
That writes one file: `compositions/split-flap-board.html`.
## Add it to your video
It runs for 3.5 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ------------------------------------------ | ------------------------- | ------------ |
| `boardText` | `NOW BOARDING` | string | |
| `flapAlphabet` | ` ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,'` | string | |
| `flipDuration` | `0.09` | 0.03s to 1.2s, step 0.01s | |
| `cellStagger` | `0.05` | 0s to 0.5s, step 0.01s | |
| `cellCount` | `12` | 1 to 24, step 1 | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Split-Flap Board
```
Tagged `text` `kinetic` `mechanical` `split-flap` `solari` `departure-board` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spotify Now Playing
Source: https://hyperframes.heygen.com/catalog/blocks/spotify-card
Animated Spotify now-playing card with album art and progress bar
## Install
That writes one file: `compositions/spotify-card.html`.
## Source
```html theme={null}
HyperFrames
HeyGen
Spotify
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `spotify`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Swirl Vortex
Source: https://hyperframes.heygen.com/catalog/blocks/swirl-vortex
Shader transition with swirling vortex distortion
## Install
That writes one file: `compositions/swirl-vortex.html`.
## Source
```html theme={null}
10 / 14
SCENE A
SCENE B
Swirl Vortex
Prompt
"use swirl vortex shader transition"
Both scenes swirl in opposite directions with FBM-warped spiral path. Organic distortion.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Thermal Distortion
Source: https://hyperframes.heygen.com/catalog/blocks/thermal-distortion
Shader transition with heat haze thermal distortion
## Install
That writes one file: `compositions/thermal-distortion.html`.
## Source
```html theme={null}
11 / 14
SCENE A
SCENE B
Thermal Distortion
Prompt
"use thermal distortion shader transition"
FBM-driven heat shimmer rising from the bottom. Sine displacement modulated by noise with
warm haze.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Thread Message Stack
Source: https://hyperframes.heygen.com/catalog/blocks/thread-message-stack
A source-owned editable conversation stack with arbitrary incoming and outgoing messages
## Install
That writes one file: `compositions/thread-message-stack.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
Thread Message Stack
{ "messages": [ { "side": "incoming", "text": "wait, that is actually wild", "sender":
"Northbeam support" }, { "side": "outgoing", "text": "can you fix it?" }, { "side":
"incoming", "text": "way ahead of you" }, { "side": "outgoing", "text": "you are unreal"
}, { "side": "incoming", "text": "he owes you dinner for this one" }, { "side":
"outgoing", "text": "already booked" } ], "stagger": 0.86, "hold": 1 }
```
Tagged `social` `conversation` `messages`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# TikTok Follow
Source: https://hyperframes.heygen.com/catalog/blocks/tiktok-follow
Animated TikTok follow overlay with profile card and follow button
## Install
That writes `compositions/tiktok-follow.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
HeyGen
@heygen.com
1,999 followers
FollowFollowing
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `tiktok`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# 3D Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-3d
Showcase of 3D perspective flip and rotate transitions
## Install
That writes one file: `compositions/transitions-3d.html`.
## Source
```html theme={null}
3D Transitions
3D Transitions
1 Transition
ONE
Scene A
TWO
Scene B
Transition Name
End of 3D Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Blur Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-blur
Showcase of blur-based transitions between scenes
## Install
That writes one file: `compositions/transitions-blur.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Blur Transitions
3 transitions
ONE
SCENE A
TWO
SCENE B
01
Blur Through
Use a blur through transition
02
Directional Blur
Use a directional blur transition with motion skew
03
Calm Blur Through
Use a slow calm blur through transition
BLUR TRANSITIONS
3 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cover Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-cover
Showcase of cover/uncover slide transitions
## Install
That writes one file: `compositions/transitions-cover.html`.
## Source
```html theme={null}
Cover Transitions Showcase
Cover Transitions
3 transition styles
ONE
SCENE A
TWO
SCENE B
Cover Transitions
End of showcase
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Destruction Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-destruction
Showcase of destructive break-apart transitions
## Install
That writes one file: `compositions/transitions-destruction.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Destruction Transitions
1 transition
ONE
SCENE A
TWO
SCENE B
01
Page Burn
Use a page burn destruction transition
DESTRUCTION TRANSITIONS
1 Transition
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Dissolve Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-dissolve
Showcase of dissolve and fade transitions
## Install
That writes one file: `compositions/transitions-dissolve.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Dissolve Transitions
4 transitions
ONE
SCENE A
TWO
SCENE B
01
Crossfade
Use a crossfade transition
02
Blur Crossfade
Use a blur crossfade transition
03
Focus Pull
Use a focus pull transition
04
Color Dip
Use a color dip to black transition
DISSOLVE TRANSITIONS
4 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Distortion Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-distortion
Showcase of warp and distortion transitions
## Install
That writes one file: `compositions/transitions-distortion.html`.
## Source
```html theme={null}
Distortion Transitions
Distortion Transitions
Glitch • Chromatic • Ripple
ONE
Scene A
TWO
Scene B
ONE
ONE
Glitch
Distortion
Chromatic Aberration
Distortion
Ripple
Distortion
Distortion Transitions
End
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grid Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-grid
Showcase of grid-based tile transitions
## Install
That writes one file: `compositions/transitions-grid.html`.
## Source
```html theme={null}
Grid Transitions
Grid Transitions
Grid Dissolve
ONE
Scene A
TWO
Scene B
Grid Dissolve
Grid
Grid Transitions
End
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Light Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-light
Showcase of light-based glow and flash transitions
## Install
That writes one file: `compositions/transitions-light.html`.
## Source
```html theme={null}
Light Transitions Showcase
Light Transitions
3 transition styles
ONE
SCENE A
TWO
SCENE B
Light Transitions
End of showcase
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Mechanical Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-mechanical
Showcase of mechanical shutter and iris transitions
## Install
That writes one file: `compositions/transitions-mechanical.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Mechanical Transitions
2 transitions
ONE
SCENE A
TWO
SCENE B
01
Shutter
Use a shutter close/open transition
02
Clock Wipe
Use a clock wipe transition
MECHANICAL TRANSITIONS
2 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Other Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-other
Showcase of miscellaneous creative transitions
## Install
That writes one file: `compositions/transitions-other.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Other Transitions
3 transitions
ONE
SCENE A
TWO
SCENE B
01
Flash Cut
Use a flash cut transition
02
Gravity Drop
Use a gravity drop transition
03
Morph Circle
Use a morph circle expanding transition
OTHER TRANSITIONS
3 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Push Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-push
Showcase of push and slide transitions
## Install
That writes one file: `compositions/transitions-push.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Push Transitions
4 transitions
ONE
SCENE A
TWO
SCENE B
01
Push Slide
Use a push slide transition
02
Vertical Push
Use a vertical push transition
03
Elastic Push
Use an elastic push transition with overshoot
04
Squeeze
Use a squeeze transition
PUSH TRANSITIONS
4 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Radial Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-radial
Showcase of radial wipe and reveal transitions
## Install
That writes one file: `compositions/transitions-radial.html`.
## Source
```html theme={null}
Radial Transitions
Radial Transitions
3 Transitions
ONE
Scene A
TWO
Scene B
Transition Name
End of Radial Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scale Transitions
Source: https://hyperframes.heygen.com/catalog/blocks/transitions-scale
Showcase of scale and zoom transitions
## Install
That writes one file: `compositions/transitions-scale.html`.
## Source
```html theme={null}
TRANSITION CATALOG
Scale Transitions
2 transitions
ONE
SCENE A
TWO
SCENE B
01
Zoom Through
Use a zoom through transition
02
Zoom Out
Use a zoom out transition
SCALE TRANSITIONS
2 Transitions
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `showcase`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# 3D UI Reveal
Source: https://hyperframes.heygen.com/catalog/blocks/ui-3d-reveal
Perspective 3D reveal animation for UI elements
## Install
That writes one file: `compositions/ui-3d-reveal.html`.
## Source
```html theme={null}
ui-3d-reveal
App Redesign›Design System
DesignDev
Share
S
J
K
▶
LayersAssets
Search layers
Page 1
HeyGen — Home
Navigation
Logo / Mark
Nav Links
Create Card
Hero
Feature Grid
Footer
Design System
Landing
+
HeyGen — Home
Avatar
Video Agent
Motion Cut
Translate
Apps
Projects
J
Video Agent
New video
YESTERDAY
AI Skills Gap: Alien
PREVIOUS 3 DAYS
AI Skills Gap: Alien
Product Strategy: An AI...
S9
S7
S5
S3
PREVIOUS 7 DAYS
S8 lock
S4
S2
Moody t2
99+
Turn your ideas into production-ready video
Avatar
Jordan
Voice
Auto
Style
Auto
Describe your video idea ...
Generate
Styles from the community
All Styles
Retro Tech
Iconic Artist
Pop Culture
Print
Cinematic
IMPLEMENTATION DEPTH
Strategy means saying NO
?
THINK BIG. START SMALL.
Create Card · W 322 H 110
DesignPrototypeInspect
⬓
⬒
⬔
⬕
⬗
W108
H34
X1244
Y18
↺0°
⌐8
Auto layout−
→12px
⊡14 / 8
Fill+
FFFFFF100%
Stroke+
No strokes
Effects+
Drop shadow
Export+
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `showcase` `3d` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# US Map
Source: https://hyperframes.heygen.com/catalog/blocks/us-map
Animated US choropleth map with staggered state reveals, value labels, and gradient legend — pure inline SVG with GSAP
## Install
That writes one file: `compositions/us-map.html`.
## Source
```html theme={null}
US Map
Population Density by State
Residents per square mile, 2024 Census estimates
LowHigh
Source: U.S. Census Bureau
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `usa` `choropleth`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# US Bubble Map
Source: https://hyperframes.heygen.com/catalog/blocks/us-map-bubble
Animated US bubble map with proportional city markers, value callouts, and connection lines — composable with us-map
## Install
That writes one file: `compositions/us-map-bubble.html`.
## Source
```html theme={null}
US Bubble Map
Top 20 US Cities by Population
Proportional bubble markers by metropolitan population
Source: U.S. Census Bureau, 2024
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `usa` `bubble` `cities`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# US Flow Map
Source: https://hyperframes.heygen.com/catalog/blocks/us-map-flow
Animated connection arcs between US cities over a base map — composable origin-destination flow visualization
## Install
That writes one file: `compositions/us-map-flow.html`.
## Source
```html theme={null}
US Flow Map
Interstate Flow Connections
Relative volume of major city-to-city corridors
Source: Illustrative data
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `usa` `flow` `connections` `arcs`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# US Hex Grid Map
Source: https://hyperframes.heygen.com/catalog/blocks/us-map-hex
Animated hexagonal tile grid map — each state as an equal-weight hex with data fill and abbreviation label
## Install
That writes one file: `compositions/us-map-hex.html`.
## Source
```html theme={null}
US Hex Grid Map
Median Household Income by State
American Community Survey, 2024
$52k
$107k
Source: U.S. Census Bureau, American Community Survey 2024
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `usa` `hexgrid` `tilegrid`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Anamorphic Streak Flare
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-anamorphic-flare
A drifting field of bright points, each one throwing the long horizontal blue-violet streak a real anamorphic cinema lens produces. Built from the measured filter constants: a 0.3 high-pass, 80 horizontal taps at quarter resolution, a samples/3 gain and a 0x7a8aff tint.
```html vfx-anamorphic-flare.html theme={null}
Anamorphic Streak Flare
```
## Install
That writes one file: `compositions/vfx-anamorphic-flare.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Change how it looks
Set these CSS variables on the block:
* `--intensity` — Streak intensity. Defaults to `5`.
* `--threshold` — High-pass threshold. Defaults to `0.3`.
* `--streaklength` — Streak length gain. Defaults to `1`.
* `--tint` — Streak tint. Defaults to `#7a8aff`.
* `--bloomradius` — Bloom radius. Defaults to `0`.
* `--timescale` — Drift rate. Defaults to `0.5`.
* `--emitters` — Emitter count. Defaults to `140`.
* `--backdrop` — Backdrop. Defaults to `#04040a`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | --------- | --------------------- | ------------ |
| `intensity` | `5` | 0 to 20, step 0.1 | |
| `threshold` | `0.3` | 0 to 1, step 0.01 | |
| `streakLength` | `1` | 0.1 to 6, step 0.05 | |
| `tint` | `#7a8aff` | color | |
| `bloomRadius` | `0` | 0px to 80px, step 1px | |
| `timeScale` | `0.5` | 0 to 3, step 0.05 | |
| `emitters` | `140` | 1 to 400, step 1 | |
| `backdrop` | `#04040a` | color | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Anamorphic Streak Flare
```
Tagged `vfx` `background` `showcase` `optical` `canvas`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# iPhone & MacBook 3D Showcase
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-iphone-device
Real GLTF iPhone 15 Pro Max and MacBook Pro models with live HTML-in-Canvas screen content, morphing glass lens, product review camera choreography, and 360° turntable.
## Install
That writes `compositions/vfx-iphone-device.html`, plus 4 supporting files under `models/`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
Devices Canvas — HTML-in-Canvas API Showcase
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `3d` `device` `iphone` `macbook` `gltf`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Background
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-liquid-background
Organic liquid simulation with vertex displacement on a subdivided plane. HTML content floats above rippling fluid surface with real-time wave dynamics.
## Install
That writes one file: `compositions/vfx-liquid-background.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#0a0e17`.
* `--text-color` — Text color. Defaults to `#e2e8f0`.
## Source
```html theme={null}
Vault
PortfolioMarketsActivitySettings
Total Balance
$2,847,391.24+12.4%
AA
AAPL
Apple Inc.
+2.31%
$189.84
NV
NVDA
NVIDIA Corp.
+5.67%
$721.33
TS
TSLA
Tesla Inc.
-1.42%
$248.50
Home
Trade
Wallet
Profile
Sarah Chen
@sarahchen
Follow
What's happening?
Sarah Chen@sarahchen · 2h
Just shipped the new real-time collaboration feature. The CRDT sync engine handles
50k concurrent edits without breaking a sweat. This is what engineering craft
looks like.
42 replies1.2K retweets8.4K likes
Alex Rivera@alexrivera · 4h
The secret to great developer tools: make the easy things instant and the hard
things possible. Stop adding config options and start removing them.
18 replies847 retweets3.1K likes
Maya Patel@mayapatel · 6h
Benchmarked our new rendering pipeline against the previous version. 4.7x faster
on large scenes. Sometimes the best optimization is rewriting the architecture
from scratch.
31 replies2.3K retweets11K likes
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `liquid` `webgl` `displacement` `background`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Liquid Glass
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-liquid-glass
VFX composition block
## Install
That writes one file: `compositions/vfx-liquid-glass.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#030407`.
* `--accent-color` — Accent. Defaults to `#00d4ff`.
## Source
```html theme={null}
Liquid Glass Parallax
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `webgl`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Magnetic
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-magnetic
VFX composition block
## Install
That writes one file: `compositions/vfx-magnetic.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#0c0c0c`.
* `--text-color` — Text color. Defaults to `#e8e8e8`.
## Source
```html theme={null}
Magnetic Cursor — HTML-in-Canvas
The HTML-in-Canvas API renders live DOM as a WebGL texture
A magnetic shader warps every pixel toward the cursor
Chromatic aberration splits RGB channels at the distortion site
Impossible without native drawElementImage — no polyfill exists
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `webgl`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Portal
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-portal
VFX composition block
## Install
That writes one file: `compositions/vfx-portal.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Change the colors
Set these CSS variables on the block:
* `--bg-color` — Background. Defaults to `#000000`.
* `--portal-color` — Portal color. Defaults to `#fafafa`.
## Source
```html theme={null}
HTML Portal Transition
HTML-in-Canvas Required
This composition requires the experimental CanvasDrawElement API. Enable it in Chrome or
Brave:
chrome://flags/#canvas-draw-element
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `webgl`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Shatter
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-shatter
VFX composition block
## Install
That writes one file: `compositions/vfx-shatter.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
HTML Glass Shatter
HTML-in-Canvas Required
This composition requires the experimental CanvasDrawElement API. Enable it in Chrome or
Brave:
chrome://flags/#canvas-draw-element
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `webgl`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# VFX Text Cursor
Source: https://hyperframes.heygen.com/catalog/blocks/vfx-text-cursor
Dramatic text reveal with cursor glow, chromatic shadow rays, and directional lighting on a black stage. Canvas-based shader post-processing with spectral color edges.
## Install
That writes one file: `compositions/vfx-text-cursor.html`.
Live preview needs the `chrome://flags/#canvas-draw-element` flag switched on.
Without it this item's screen renders black. Rendering from the CLI switches
it on for you. [How it works](/guides/html-in-canvas)
## Source
```html theme={null}
VFX Text Cursor
|incanvas
Now availablein HyperFrames
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `html-in-canvas` `text` `shader` `cursor` `chromatic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# VPN YouTube Spot
Source: https://hyperframes.heygen.com/catalog/blocks/vpn-youtube-spot
Snappy Apple-style YouTube insert showing a phone finding and installing a friendly VPN app with sound effects.
## Install
That writes `compositions/vpn-youtube-spot.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
PRIVATESIMPLY
A calmer way to browse.
SAFE
Search
privacy apps
CloudPocket
Files and backups
4.6 ★★★★★
GET
LensLab
Photo editor
4.8 ★★★★★
GET
BeatShelf
Music discovery
4.4 ★★★★☆
GET
VaultPay
Budget tracker
4.7 ★★★★★
GET
TrailPing
Maps for trips
4.5 ★★★★☆
GET
VPN
Simple private browsing
4.9 ★★★★★
GET
QuickTunnel
Network tools
4.2 ★★★★☆
GET
PrivateFrame
Photo lockers
4.3 ★★★★☆
GET
VPN
Friendly privacy for everyday browsing.
GET
RATING
4.9
SPEED
Fast
AGE
4+
0%
✓
Ready to browse
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `app` `showcase` `youtube` `sfx`.
Created by [Stronkter](https://x.com/Stronkter).
```text theme={null}
HyperFrames by HeyGen make me a 7s video with Apple-style bold font and styling: a phone scrolling in an app store, clicking on a friendly VPN app called VPN, installing it, then snapping down and fading to a white background. Make it snappy and polished for a YouTube insert, with sound effects, 60fps, and 1920x1080.
```
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Weight Wave
Source: https://hyperframes.heygen.com/catalog/blocks/weight-wave
A crest of thickness travels along a headline: each character swells from light to black and leans forward as the wave passes, driven by the wght and slnt variable-font axes rather than by transforms.
```html weight-wave.html theme={null}
Weight Wave
```
## Install
That writes `compositions/weight-wave.html`, plus 2 supporting files under `compositions/assets/fonts/`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ----------------------------- | -------------------------------------------- | ------------ |
| `text` | `PRESSURE MOVES THROUGH TYPE` | string | |
| `color` | `#f5f5f7` | color | |
| `background` | `#0b0b0d` | color | |
| `weightFrom` | `400` | 300 to 1000, step 10 | |
| `weightTo` | `1000` | 300 to 1000, step 10 | |
| `crestWidth` | `4` | 1chars to 24chars, step 0.5chars | |
| `sweepSpeed` | `0.5` | 0.05passes/s to 3passes/s, step 0.05passes/s | |
| `slant` | `-12` | -15deg to 0deg, step 0.5deg | |
| `direction` | `ltr` | `ltr`, `rtl` | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Weight Wave
```
Tagged `typography` `kinetic-type` `title` `variable-font` `text`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Whip Pan
Source: https://hyperframes.heygen.com/catalog/blocks/whip-pan
Shader transition simulating a fast camera whip pan
## Install
That writes one file: `compositions/whip-pan.html`.
## Source
```html theme={null}
03 / 14
SCENE A
SCENE B
Whip Pan
Prompt
"use whip pan shader transition"
Both scenes slide horizontally with 10-sample directional motion blur simulating a fast
camera pan.
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `transition` `shader`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# World Map
Source: https://hyperframes.heygen.com/catalog/blocks/world-map
Animated world choropleth with country-by-country reveal, tooltip labels, and rotating globe inset — D3 Natural Earth projection
## Install
That writes one file: `compositions/world-map.html`.
## Source
```html theme={null}
World Map
Global GDP per Capita
Nominal GDP per capita, 2024 IMF estimates
LowHigh
Source: International Monetary Fund
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `data` `map` `geography` `world` `choropleth`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# X Post Card
Source: https://hyperframes.heygen.com/catalog/blocks/x-post
Animated X/Twitter post card overlay with engagement metrics
## Install
That writes one file: `compositions/x-post.html`.
## Source
```html theme={null}
Hyperframes
@hyperframes
Prompt to replace this text with your tweet. Change the display name, handle, timestamp,
and engagement counts to match your content. #YourHashtag
1:10 PM · Apr 7, 2026
34
2.3K
10.9K
150K
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `twitter`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Comment Cards
Source: https://hyperframes.heygen.com/catalog/blocks/yt-comment-card
Social comments typing on over footage: avatar pop, username and time, per-character typewriter, likes row; image avatars or initials chips
## Install
That writes one file: `compositions/yt-comment-card.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `social` `comments` `creator` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scanline Board Background
Source: https://hyperframes.heygen.com/catalog/blocks/yt-lcd-background
Textured paper board: scanlines with slow drift, optional pixel grid, static grain, and display text with a blur-focus entrance and chromatic-fringe title
## Install
That writes one file: `compositions/yt-lcd-background.html`.
## Add it to your video
It runs for 10 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `background` `texture` `creator`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Logo Intro Sequence
Source: https://hyperframes.heygen.com/catalog/blocks/yt-logo-intro
Logo stamp pops on a lined board, a kicker line gives way to the title with an accent arrow chip; seeded line distortion
## Install
That writes one file: `compositions/yt-logo-intro.html`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `logo` `intro` `creator`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# YouTube Lower Third
Source: https://hyperframes.heygen.com/catalog/blocks/yt-lower-third
Animated YouTube subscribe lower third with avatar and channel info
## Install
That writes `compositions/yt-lower-third.html`, plus 1 supporting file under `assets/`.
## Source
```html theme={null}
HeyGen
82.2K subscribers
Subscribe
Subscribed
```
## Usage
After installing, add the block to your host composition:
```html theme={null}
```
Tagged `social` `overlay` `youtube`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chromatic Fringe Title
Source: https://hyperframes.heygen.com/catalog/blocks/yt-prism-title
Display title on a transparent root: blur-focus entrance, red/blue fringe that settles then breathes, perspective bow, slow scale drift
## Install
That writes one file: `compositions/yt-prism-title.html`.
## Add it to your video
It runs for 6 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `typography` `title-card` `creator`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Vertical Media Filler
Source: https://hyperframes.heygen.com/catalog/blocks/yt-vertical-fill
Portrait media filling a widescreen frame via blurred-scale, mirror, or copy side fills; grid texture and foreground contrast lift (images inside the block; keep live footage in the host)
## Install
That writes one file: `compositions/yt-vertical-fill.html`.
## Add it to your video
It runs for 8 seconds at 1920×1080. Paste this into your composition:
```html index.html theme={null}
```
Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes) for the rest.
## Source
```html theme={null}
```
Tagged `placeholder` `vertical` `media`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Animated Bar Chart
Source: https://hyperframes.heygen.com/catalog/components/animated-bar-chart
A compact data card with deterministic bar growth and value callouts.
## Install
That writes one file: `compositions/components/animated-bar-chart.html`.
## Source
```html theme={null}
Animated Bar Chart
A compact data card with deterministic bar growth and value callouts.
+42%
```
## Usage
Open `compositions/components/animated-bar-chart.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `data`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Arc Motion Path
Source: https://hyperframes.heygen.com/catalog/components/arc-motion-path
A GSAP MotionPath primitive that flies a callout along a curved arc with autorotation.
## Install
That writes one file: `compositions/components/arc-motion-path.html`.
## Source
```html theme={null}
Arc Motion Path
Plan
Render
```
## Usage
Open `compositions/components/arc-motion-path.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `video-primitive` `motionpath` `gsap-plugin` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# ASCII Render Pass
Source: https://hyperframes.heygen.com/catalog/components/ascii-render-pass
A slotted scene renders as live ASCII: a canvas samples the source's luminance grid (rasterized once at mount) and draws glyphs from a density ramp charset; resolution steps coarse to fine as the piece resolves, then holds legible-fine.
```html ascii-render-pass.html theme={null}
ASCII Render Pass
```
## Install
That writes one file: `compositions/components/ascii-render-pass.html`.
## Paste it into your composition
Open `compositions/components/ascii-render-pass.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------ | ------------------------- | ----------------------------------------------------------------------------- |
| `charset` | ` .:-=+*#%@` | string | Density ramp, dark to light. A leading space keeps dark cells empty. |
| `grid` | `med` | `coarse`, `med`, `fine` | Final cell pitch the resolve lands on. |
| `resolve_at` | `1.4` | 0.6s to 10s, step 0.1s | Seconds from mount start when the coarse-to-fine resolve begins. |
| `accent` | `green` | `green`, `blue`, `violet` | Glyph ink: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the fine render holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
ASCII Render Pass
```
Tagged `motion-primitive` `experiment` `texture` `ascii` `quantize`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# ASCII Trail Reveal
Source: https://hyperframes.heygen.com/catalog/components/ascii-trail-reveal
An authored S-curve sweeps through a deterministic ASCII grid, flipping cells away to reveal a labeled panel.
```html ascii-trail-reveal.html theme={null}
ASCII Trail Reveal
```
## Install
That writes one file: `compositions/components/ascii-trail-reveal.html`.
## Paste it into your composition
Open `compositions/components/ascii-trail-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------ | ------------------------- | ------------------------------------------------------- |
| `label` | `The reveal` | string | Text shown on the revealed panel. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the trail and revealed panel. |
| `trail_width` | `narrow` | `narrow`, `wide` | Width of the cell reveal tail around the authored path. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
ASCII Trail Reveal
```
Tagged `motion-primitive` `intro` `reveal` `ascii` `trail` `grid`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Aurora Drift
Source: https://hyperframes.heygen.com/catalog/components/aurora-drift
Three soft accent-derived aurora fields drift in an exact ambient loop over a deep base and faint vignette.
```html aurora-drift.html theme={null}
Aurora Drift
```
## Install
That writes one file: `compositions/components/aurora-drift.html`.
## Paste it into your composition
Open `compositions/components/aurora-drift.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | --------------------------------------------------- |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used to derive the aurora hues. |
| `mood` | `deep` | `deep`, `bright` | Base luminance and aurora field strength. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Aurora Drift
```
Tagged `motion-primitive` `background` `aurora` `gradient` `ambient` `loopable`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Avatar Cloud
Source: https://hyperframes.heygen.com/catalog/components/avatar-cloud
Lettermark avatars populate a loose elliptical cloud while fine SVG links draw between the community and its central proof label.
```html avatar-cloud.html theme={null}
Avatar Cloud
Community
```
## Install
That writes one file: `compositions/components/avatar-cloud.html`.
## Paste it into your composition
Open `compositions/components/avatar-cloud.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | -------------- | --------------- | -------------------------------------------------- |
| `avatarCount` | `10` | 6 to 16, step 1 | Number of lettermark avatars in the network cloud. |
| `showLinks` | `yes` | `yes`, `no` | Show or hide the connecting network lines. |
| `label` | `50k builders` | string | Community proof copy shown in the center hub. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Avatar Cloud
Community
```
Tagged `effects` `avatars` `community` `network` `social-proof` `prove`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Avatar Group Hover
Source: https://hyperframes.heygen.com/catalog/components/avatar-group-hover
A distance-falloff avatar group lift with bouncy hover return
```html avatar-group-hover.html theme={null}
ABCD
```
## Install
That writes one file: `compositions/components/avatar-group-hover.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ---------- | ---------------------------- | ---------------------------------------------------------------------------------- |
| `size` | `standard` | `small`, `standard`, `large` | Avatar diameter, with the initials scaling alongside it. |
| `overlap` | `standard` | `tight`, `standard`, `loose` | How far each avatar tucks under the one before it, as a share of its own diameter. |
| `accent` | `blue` | `blue`, `violet`, `green` | Colour the avatar gradient resolves into. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
ABCD
```
## Usage
Open `compositions/components/avatar-group-hover.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `avatar` `hover`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Badge Pop
Source: https://hyperframes.heygen.com/catalog/components/badge-pop
A transitions.dev-inspired notification badge pop with elastic scale and count reveal
```html badge-pop.html theme={null}
3
```
## Install
That writes one file: `compositions/components/badge-pop.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | -------------------------------- | ------------------------------------------------------------------------------------- |
| `count` | `3` | string | Text shown inside the notification badge, up to four characters. |
| `accent` | `red` | `red`, `blue`, `green`, `violet` | Colour family of the badge. |
| `surface` | `light` | `light`, `dark` | Chrome of the button and the badge ring: light for bright frames, dark for dark ones. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
3
```
## Usage
Open `compositions/components/badge-pop.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `badge` `microinteraction`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Beat Accent
Source: https://hyperframes.heygen.com/catalog/components/beat-accent
A single music-hit sting: impact flash, micro scale-pulse on the subject, immediate decay.
```html beat-accent.html theme={null}
Beat Accent
```
## Install
That writes one file: `compositions/components/beat-accent.html`.
## Paste it into your composition
Open `compositions/components/beat-accent.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | -------- | -------------------------- | -------------------------------------------------- |
| `text` | `BOOM` | string | Word or short label emphasized by the beat hit. |
| `flashColor` | `accent` | `accent`, `soft`, `bright` | Token-backed accent tone used by the radial flash. |
| `intensity` | `1` | 0.5 to 2, step 0.1 | Strength of the scale pulse, flash, and shake. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Beat Accent
```
Tagged `motion-primitive` `effects` `burst` `sting` `emphasize` `impact`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Beat Pulse Background
Source: https://hyperframes.heygen.com/catalog/components/beat-pulse-background
An accent-derived backdrop pulses its glow intensity and saturation on a deterministic, supplied beat grid.
```html beat-pulse-background.html theme={null}
Beat Pulse Background
```
## Install
That writes one file: `compositions/components/beat-pulse-background.html`.
## Paste it into your composition
Open `compositions/components/beat-pulse-background.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ----------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `beats` | `0.5,1.0,1.5,2.0,2.5,3.0,3.5` | string | Comma-separated beat times in seconds. Invalid entries are ignored and numeric values are clamped to the composition duration. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used by the pulsing glow. |
| `intensity` | `subtle` | `subtle`, `club` | Strength of the glow and saturation pulse. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Beat Pulse Background
```
Tagged `motion-primitive` `background` `beat` `pulse` `rhythmic` `reactive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Beat Timeline
Source: https://hyperframes.heygen.com/catalog/components/beat-timeline
A paused master-timeline orchestration spine that pins titled beat rows to evenly spaced named labels. Each row enters on its label, holds with the sequence, then exits with the group.
```html beat-timeline.html theme={null}
Beat Timeline
```
## Install
That writes one file: `compositions/components/beat-timeline.html`.
## Paste it into your composition
Open `compositions/components/beat-timeline.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | -------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------- |
| `beatCount` | `4` | 2 to 6, step 1 | Number of beat rows in the sequence. |
| `interval` | `0.6` | 0.2s to 2s, step 0.05s | Base time between consecutive beat markers. |
| `labels` | `One,Two,Three,Four` | string | Comma-separated beat titles, one per beat. Extra entries are ignored and missing entries fall back to Beat N. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Beat Timeline
```
Tagged `orchestration` `transitions` `sequencing` `bridge` `timeline`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Before After Wipe
Source: https://hyperframes.heygen.com/catalog/components/before-after-wipe
Two full-bleed content slots compare before and after states as a persistent divider wipes the after layer over the before layer and rests at a configurable split. Callers fill the named before/after slot panels; token-styled defaults render when a slot is left empty.
```html before-after-wipe.html theme={null}
Before After Wipe
```
## Install
That writes one file: `compositions/components/before-after-wipe.html`.
## Paste it into your composition
Open `compositions/components/before-after-wipe.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | -------- | ------------------------- | ------------------------------------------------------------- |
| `label_a` | `Before` | string | Chip shown on the base before panel. Blank hides the chip. |
| `label_b` | `After` | string | Chip shown on the revealed after panel. Blank hides the chip. |
| `rest_split` | `50` | 0% to 100%, step 1% | Divider resting position after the wipe lands. |
| `wipe_at` | `0.25` | 0s to 8s, step 0.05s | Seconds after mount start when the wipe begins. |
| `accent` | `green` | `green`, `blue`, `violet` | Divider handle and after chip color. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the final comparison frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Before After Wipe
```
Tagged `prop` `ui-props` `compare` `holdable` `before-after` `wipe` `slots`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Blur In
Source: https://hyperframes.heygen.com/catalog/components/blur-in
An Operator Black word-level content reveal that resolves its own text from controlled blur
```html blur-in.html theme={null}
Designsystemsforvideo
```
## Install
That writes one file: `compositions/components/blur-in.html`.
## Paste it into your composition
Open `compositions/components/blur-in.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | -------- | --------------------------- | ------------------------------------------------------------------------------------------ |
| `size` | `52` | 24px to 120px, step 2px | Type size of the revealed words in pixels; the gap between words scales with it. |
| `tone` | `strong` | `strong`, `muted`, `accent` | Word colour: strong for headlines, muted for supporting lines, accent for the brand green. |
| `align` | `left` | `left`, `center`, `right` | Horizontal alignment of the words in the frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Designsystemsforvideo
```
Tagged `video-primitive` `blur-in` `text-effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Blur Out Up
Source: https://hyperframes.heygen.com/catalog/components/blur-out-up
Words arrive clean and depart upward with increasing blur for airy exits.
```html blur-out-up.html theme={null}
HELLO
```
## Install
That writes one file: `compositions/components/blur-out-up.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ----------------------------- | -------------------------------------------------------------------------------------- |
| `direction` | `up` | `up`, `down`, `left`, `right` | Where the offset the timeline drives points. |
| `distance` | `standard` | `close`, `standard`, `far` | Scales the travel offset, so the words cover a shorter or longer run in the same time. |
| `blur` | `standard` | `soft`, `standard`, `heavy` | Scales the blur radius the timeline drives, from a light haze to a full smear. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
HELLO
```
## Usage
Open `compositions/components/blur-out-up.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Bottom Up Letters
Source: https://hyperframes.heygen.com/catalog/components/bottom-up-letters
Splits text into letters and reveals each glyph from below with deterministic staggered timing
```html bottom-up-letters.html theme={null}
```
## Install
That writes one file: `compositions/components/bottom-up-letters.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | -------------------------- | --------------------------------------------------------------------------------------------- |
| `unit` | `letter` | `letter`, `word` | What each animated span holds. Letter staggers glyph by glyph, word keeps whole words intact. |
| `direction` | `up` | `up`, `down` | Where each span starts. Up starts below the baseline and rises, down starts above and drops. |
| `travel` | `standard` | `close`, `standard`, `far` | How far each span starts from its resting position, from 0.45em to 1.5em. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/bottom-up-letters.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `text` `letters` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Browser Device Stage
Source: https://hyperframes.heygen.com/catalog/components/browser-device-stage
A generic app surface in token-native device chrome (browser, window, or phone). The screen is a slot for caller img/video/HTML with a token-styled skeleton default; one settle entrance, a readable hold, and an optional screen swap.
```html browser-device-stage.html theme={null}
Browser Device Stage
```
## Install
That writes one file: `compositions/components/browser-device-stage.html`.
## Paste it into your composition
Open `compositions/components/browser-device-stage.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ----------------- | ---------------------------- | --------------------------------------------------------------------------- |
| `chrome` | `browser` | `browser`, `window`, `phone` | Device frame drawn around the screen slot. |
| `title` | `app.example.com` | string | Address pill text (browser) or title bar text (window). |
| `swap_at` | `0` | 0s to 30s, step 0.1s | Seconds from mount start to swap to the second screen. 0 disables the swap. |
| `accent` | `green` | `green`, `blue`, `violet` | Token the skeleton accent elements ride. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. None holds the final frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Browser Device Stage
```
Tagged `stage` `product-demo` `device` `browser` `phone` `slot` `chrome`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camera Rig Depth Stack
Source: https://hyperframes.heygen.com/catalog/components/camera-rig-depth-stack
A 3D camera-rig-style card stack with depth, parallax, and focus shift.
## Install
That writes one file: `compositions/components/camera-rig-depth-stack.html`.
## Source
```html theme={null}
Camera Rig Depth Stack
A 3D camera-rig-style card stack with depth, parallax, and focus shift.
```
## Usage
Open `compositions/components/camera-rig-depth-stack.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `advanced-motion` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camera Scan Gate
Source: https://hyperframes.heygen.com/catalog/components/camera-scan-gate
A camera and QR recognition moment with a viewfinder sweep, bracket lock, confirmation pulse, and verified next beat.
```html camera-scan-gate.html theme={null}
Camera Scan Gate
```
## Install
That writes one file: `compositions/components/camera-scan-gate.html`.
## Paste it into your composition
Open `compositions/components/camera-scan-gate.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | -------------- | ----------------------- | ---------------------------------------------------------------------- |
| `scanColor` | `var(--brand)` | string | Any CSS color value used by the scan line and recognition glow. |
| `targetLabel` | `Verified` | string | Confirmation label revealed at recognition lock. Blank hides the line. |
| `sweepSpeed` | `1` | 0.8x to 1.6x, step 0.1x | Speed multiplier for the scan sweep phase only. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Camera Scan Gate
```
Tagged `prop` `ui-props` `camera` `qr` `scan` `recognition` `interaction` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camera Shake
Source: https://hyperframes.heygen.com/catalog/components/camera-shake
Procedural handheld, telephoto and rig camera shake for any wrapper: nine measured profiles with per-lens projection, closed-form and seek-safe
```html camera-shake.html theme={null}
Camera Shake
CAMERASHAKE
profile
```
## Install
That writes one file: `compositions/components/camera-shake.html`.
## Paste it into your composition
Open `compositions/components/camera-shake.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------ |
| `shakeProfile` | `handheld-normal-mild` | `handheld-normal-mild`, `handheld-normal-strong`, `handheld-normal-extreme`, `handheld-wideangle-mild`, `handheld-wideangle-strong`, `handheld-tele-mild`, `handheld-tele-strong`, `rig-6d-shake`, `rig-6d-wobble` | |
| `shakeIntensity` | `1` | 0 to 3, step 0.05 | |
| `shakeFrequency` | `1` | 0.1 to 4, step 0.05 | |
| `shakeRotation` | `true` | boolean | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Camera Shake
CAMERASHAKE
profile
```
Tagged `camera` `shake` `handheld` `effect` `cinematic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Blend Difference
Source: https://hyperframes.heygen.com/catalog/components/caption-blend-difference
Auto-inverting text using mix-blend-mode: difference — flips between white and black per-pixel against the background
## Install
That writes one file: `compositions/components/caption-blend-difference.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/caption-blend-difference.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `text` `text-effect` `effect` `blend-mode` `contrast` `inversion`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camera Follow Captions
Source: https://hyperframes.heygen.com/catalog/components/caption-camera-follow
One sentence written across a world far larger than the frame. Each word is sized against everything already written, so the block grows geometrically and the camera pulls back at a steady rate to keep landing the new word at the same size. Old words stay lit and simply become small.
```html caption-camera-follow.html theme={null}
Camera Follow Captions
```
## Install
That writes one file: `compositions/components/caption-camera-follow.html`.
## Paste it into your composition
Open `compositions/components/caption-camera-follow.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ---------- | ------------------------------------ | --------------------------------------------------------------------------------------------- |
| `accent` | `gold` | `gold`, `green`, `blue`, `violet` | Colour of the highlighted words. gold is the original. |
| `framing` | `standard` | `tight`, `standard`, `wide` | Air the camera leaves around the written block, so the words land larger or smaller in frame. |
| `smear` | `standard` | `off`, `subtle`, `standard`, `heavy` | Scales the radial motion blur each camera move carries, from none to a heavy streak. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Camera Follow Captions
```
Tagged `captions` `caption-style` `camera` `typography` `motion-primitive` `portrait`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Clip Wipe
Source: https://hyperframes.heygen.com/catalog/components/caption-clip-wipe
Left-to-right clip-path wipe reveal per word
## Install
That writes one file: `compositions/components/caption-clip-wipe.html`.
## Source
```html theme={null}
Clip Wipe
```
## Usage
Open `compositions/components/caption-clip-wipe.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `wipe` `clip-path` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Editorial Emphasis
Source: https://hyperframes.heygen.com/catalog/components/caption-editorial-emphasis
Dual-font system with dramatic size contrast for emphasis words
## Install
That writes one file: `compositions/components/caption-editorial-emphasis.html`.
## Source
```html theme={null}
Editorial Emphasis
```
## Usage
Open `compositions/components/caption-editorial-emphasis.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `editorial` `typography` `emphasis`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Emoji Pop
Source: https://hyperframes.heygen.com/catalog/components/caption-emoji-pop
Emoji integration with stroked text and horizontal squeeze entrance
## Install
That writes one file: `compositions/components/caption-emoji-pop.html`.
## Source
```html theme={null}
Emoji Pop
```
## Usage
Open `compositions/components/caption-emoji-pop.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `emoji` `social`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Glitch RGB
Source: https://hyperframes.heygen.com/catalog/components/caption-glitch-rgb
RGB chromatic aberration with CRT scanline overlay
## Install
That writes one file: `compositions/components/caption-glitch-rgb.html`.
## Source
```html theme={null}
Glitch RGB
```
## Usage
Open `compositions/components/caption-glitch-rgb.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `glitch` `cyber` `tech`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Gradient Fill
Source: https://hyperframes.heygen.com/catalog/components/caption-gradient-fill
Gradient-clipped text with elastic bounce entrance
## Install
That writes one file: `compositions/components/caption-gradient-fill.html`.
## Source
```html theme={null}
Gradient Fill
```
## Usage
Open `compositions/components/caption-gradient-fill.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `gradient` `colorful`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Highlight
Source: https://hyperframes.heygen.com/catalog/components/caption-highlight
Red background sweep behind each active word, TikTok-style
## Install
That writes one file: `compositions/components/caption-highlight.html`.
## Source
```html theme={null}
Highlight
```
## Usage
Open `compositions/components/caption-highlight.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `highlight` `social` `tiktok`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Kinetic Slam
Source: https://hyperframes.heygen.com/catalog/components/caption-kinetic-slam
Full-screen single-word display with alternating entrance directions
## Install
That writes one file: `compositions/components/caption-kinetic-slam.html`.
## Source
```html theme={null}
Kinetic Slam
```
## Usage
Open `compositions/components/caption-kinetic-slam.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `kinetic` `typography` `slam`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Matrix Decode
Source: https://hyperframes.heygen.com/catalog/components/caption-matrix-decode
Character scramble animation before text reveal
## Install
That writes one file: `compositions/components/caption-matrix-decode.html`.
## Source
```html theme={null}
Matrix Decode
```
## Usage
Open `compositions/components/caption-matrix-decode.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `matrix` `scramble` `decode`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Neon Accent
Source: https://hyperframes.heygen.com/catalog/components/caption-neon-accent
Multi-color neon glow accents with wiggle drift animation
## Install
That writes one file: `compositions/components/caption-neon-accent.html`.
## Source
```html theme={null}
Neon Accent
```
## Usage
Open `compositions/components/caption-neon-accent.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `neon` `glow` `accent`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Neon Glow
Source: https://hyperframes.heygen.com/catalog/components/caption-neon-glow
Cyan and magenta neon glow with keyword accent colors
## Install
That writes one file: `compositions/components/caption-neon-glow.html`.
## Source
```html theme={null}
Neon Glow
```
## Usage
Open `compositions/components/caption-neon-glow.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `neon` `glow` `gaming`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Parallax Layers
Source: https://hyperframes.heygen.com/catalog/components/caption-parallax-layers
Behind-subject 3D text layering with vertical stretch effect
## Install
That writes one file: `compositions/components/caption-parallax-layers.html`.
## Source
```html theme={null}
Parallax Layers
```
## Usage
Open `compositions/components/caption-parallax-layers.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `parallax` `3d` `depth`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Particle Burst
Source: https://hyperframes.heygen.com/catalog/components/caption-particle-burst
Keyword words trigger colored particle explosions
## Install
That writes one file: `compositions/components/caption-particle-burst.html`.
## Source
```html theme={null}
Particle Burst
```
## Usage
Open `compositions/components/caption-particle-burst.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `particles` `burst` `effects`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Pill Karaoke
Source: https://hyperframes.heygen.com/catalog/components/caption-pill-karaoke
Pill-shaped container with per-word karaoke color highlight
## Install
That writes one file: `compositions/components/caption-pill-karaoke.html`.
## Source
```html theme={null}
Pill Karaoke
```
## Usage
Open `compositions/components/caption-pill-karaoke.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `karaoke` `pill`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Texture
Source: https://hyperframes.heygen.com/catalog/components/caption-texture
Flowing texture mask over large uppercase text — ships with 6 textures (lava, marble, metal, wood, concrete, rock), configurable via the texture variable
```html caption-texture.html theme={null}
Texture
```
## Install
That writes `compositions/components/caption-texture.html`, plus 6 supporting files under `compositions/components/`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | ------- | ------------ |
| `texture` | `lava` | string | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Texture
```
## Usage
Open `compositions/components/caption-texture.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `texture` `mask`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Weight Shift
Source: https://hyperframes.heygen.com/catalog/components/caption-weight-shift
Elegant font-weight transition between caption lines
## Install
That writes one file: `compositions/components/caption-weight-shift.html`.
## Source
```html theme={null}
Weight Shift
```
## Usage
Open `compositions/components/caption-weight-shift.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `captions` `caption-style` `minimal` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Card Resize
Source: https://hyperframes.heygen.com/catalog/components/card-resize
A transitions.dev-inspired card resize primitive that expands a compact card into a detail panel
```html card-resize.html theme={null}
Project statusReady to render
All scenes validated and queued for export.
```
## Install
That writes one file: `compositions/components/card-resize.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | -------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `surface` | `paper` | `paper`, `ink` | Card colour scheme: paper is the original white card, ink is a dark card for dark frames. |
| `accent` | `ocean` | `ocean`, `forest`, `ember` | Treatment of the media thumbnail: a plain plate, a hatched surface, or an image plate with a horizon-and-disc glyph. |
| `elevation` | `raised` | `flat`, `raised`, `floating` | How far the card lifts off the frame, from a contact shadow to a deep drop. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Project statusReady to render
All scenes validated and queued for export.
```
## Usage
Open `compositions/components/card-resize.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `card` `layout`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Char Slam Explode
Source: https://hyperframes.heygen.com/catalog/components/char-slam-explode
Headline glyphs hold in a deterministic scatter, then reassemble with an overshooting slam and a three-frame landing shake.
```html char-slam-explode.html theme={null}
Char Slam Explode
```
## Install
That writes one file: `compositions/components/char-slam-explode.html`.
## Paste it into your composition
Open `compositions/components/char-slam-explode.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | -------- | ------------------------- | ------------------------------------------------ |
| `text` | `Impact` | string | Text split into glyphs for the scatter and slam. |
| `accent` | `green` | `green`, `blue`, `violet` | Headline and glow color. |
| `spread` | `tight` | `tight`, `wild` | Distance and rotation of the scattered glyphs. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Char Slam Explode
```
Tagged `motion-primitive` `typography` `text-treatment` `scatter` `slam` `impact`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chart Story
Source: https://hyperframes.heygen.com/catalog/components/chart-story
One chart builds from data in reading order and lands the exact supplied values: staggered bars, a left-to-right line with area fill, a sweeping donut, or filling progress bars, with an accented value callout on the emphasized datum.
```html chart-story.html theme={null}
Chart Story
```
## Install
That writes one file: `compositions/components/chart-story.html`.
## Paste it into your composition
Open `compositions/components/chart-story.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
| `type` | `bars` | `bars`, `line`, `donut`, `progress` | Chart form the data builds into. |
| `data` | `12, 28, 45, 64` | string | Comma-separated numbers; the chart lands exactly on these values. |
| `labels` | `Q1, Q2, Q3, Q4` | string | Comma-separated labels, one per datum. |
| `emphasize` | `3` | number | Index of the datum that takes the accent and the value callout. Clamped to the data range. |
| `unit` | `%` | string | Suffix appended to every displayed value. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract color used by the emphasized datum and its callout. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Proof stats end on the still hold, so the default is none. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Chart Story
```
Tagged `motion-primitive` `proof` `stats` `chart` `bars` `line` `donut` `progress` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chat Message
Source: https://hyperframes.heygen.com/catalog/components/chat-message
One message arrives on the measured entry - scale 0.75, 0.12s, growing from its sender's corner. The type is an enum switched like marker-highlight's style: a received or sent bubble with a real tail, a large emoji row, an image, or a link card with title and domain. The atom that chat-thread builds conversations from
```html chat-message.html theme={null}
Chat Message
```
## Install
That writes one file: `compositions/components/chat-message.html`.
## Paste it into your composition
Open `compositions/components/chat-message.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------------------------------------------------ | -------------------------------------- | -------------------------------------------------- |
| `type` | `sent` | `recv`, `sent`, `emoji`, `img`, `card` | Which message form arrives. |
| `text` | `wait look 👀` | string | Bubble text, or the emoji row for the Emoji type. |
| `cardTitle` | `HyperFrames — Write HTML, render pixel-perfect video` | string | Link-card title (Link card type only). |
| `cardDomain` | `hyperframes.heygen.com` | string | Link-card domain line (Link card type only). |
| `tail` | `on` | `on`, `off` | The bubble tail anchoring the message to its side. |
| `delivered` | `on` | `on`, `off` | The receipt under a sent message. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Chat Message
```
Tagged `video-primitive` `chat` `mock-ui` `message`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chat Thread
Source: https://hyperframes.heygen.com/catalog/components/chat-thread
The measured conversation as one mountable scene at full fidelity: status bar, back badge, avatar and name pill, bubbles with real iMessage tails, a Delivered receipt, large emoji rows, a media placeholder, a link card, and typing dots holding the beat. Every message picks its type by prefix - recv:/sent: text, emoji: a large row, img media, card:Title~domain a link card - and heights are measured at mount so any thread fits
```html chat-thread.html theme={null}
Chat Thread
9:41
12
R
Rachel›
+
Message
```
## Install
That writes one file: `compositions/components/chat-thread.html`.
## Paste it into your composition
Open `compositions/components/chat-thread.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does | | | | | | | | |
| ---------- | -------------------------------------------- | ------------------ | --------------------------------------------------------------------------------- | ------------------ | ------------ | ------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------- | ------------ |
| `contact` | `Rachel` | string | Name in the thread header; the avatar shows its first letter. | | | | | | | | |
| `unread` | `12` | 0 to 99, step 1 | Count in the back-button badge. 0 hides it. | | | | | | | | |
| `messages` | \`recv:what r u using for the launch video?? | sent:wait look 👀 | card:HyperFrames — Write HTML, render pixel-perfect video\~hyperframes.heygen.com | recv:OMG IT'S HTML | emoji:🤯🤯🤯 | sent:renders in 4K. no editor\` | string | Pipe-separated thread. Each entry picks its type by prefix: recv: or sent: for a text bubble, emoji: for a large emoji row, img for a media placeholder, card:Title\~domain for a link card. Example: recv:hey | sent:look 👀 | card:HyperFrames\~hyperframes.heygen.com | emoji:🤯🤯🤯 |
| `beat` | `1.7` | 0.8 to 3, step 0.1 | Seconds between message arrivals. | | | | | | | | |
| `dots` | `on` | `on`, `off` | Show the three-dot indicator before received messages. | | | | | | | | |
| `receipt` | `on` | `on`, `off` | Show Delivered under the last sent bubble, as iMessage does. | | | | | | | | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Chat Thread
9:41
12
R
Rachel›
+
Message
```
Tagged `motion-primitive` `chat` `mock-ui` `conversation` `vertical`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Chromatic Aberration Wipe
Source: https://hyperframes.heygen.com/catalog/components/chromatic-aberration-wipe
A fast slide wipe with RGB channel split on peak frames.
```html chromatic-aberration-wipe.html theme={null}
Before
Chromatic Aberration Wipe
```
## Install
That writes one file: `compositions/components/chromatic-aberration-wipe.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `direction` | `left` | `left`, `right`, `up`, `down` | The direction the reveal travels; both scenes slide the same way and the wipe edge follows. |
| `accent` | `blue` | `blue`, `green`, `violet` | Colour family of the incoming scene's gradient. |
| `aberration` | `1` | 0x to 2x, step 0.1x | Multiplies the red/cyan channel split: 0 removes it, 1 is the stock strength, 2 doubles the offset and saturates the flash. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Before
Chromatic Aberration Wipe
```
## Usage
Open `compositions/components/chromatic-aberration-wipe.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `video-primitive` `transition-primitive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Code Terminal Run
Source: https://hyperframes.heygen.com/catalog/components/code-terminal-run
A token-chrome terminal panel runs one command: the prompt line types deterministically behind an integer-cycle caret, executes after a beat, and output lines print one per cue before a fresh prompt appears.
```html code-terminal-run.html theme={null}
Code Terminal Run
run build src/app--minify--out"dist/app"
- resolving 128 modules
- bundling src/app
ok 128 modules in 412 ms
ok wrote dist/app(96 kB)
```
## Install
That writes one file: `compositions/components/code-terminal-run.html`.
## Paste it into your composition
Open `compositions/components/code-terminal-run.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `prompt_glyph` | `$` | string | Leading glyph before the command and the trailing prompt. Empty string hides it. |
| `cadence` | `human` | `uniform`, `human` | Keystroke rhythm: uniform fixed steps or seeded human chunks. |
| `cues` | \`\` | string | Comma-separated seconds relative to mount start; cue N sets when output line N prints. Empty uses the authored rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Color of the prompt glyph and caret. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. Frame roots own transitions; none holds the end frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Code Terminal Run
run build src/app--minify--out"dist/app"
- resolving 128 modules
- bundling src/app
ok 128 modules in 412 ms
ok wrote dist/app(96 kB)
```
Tagged `motion-primitive` `product-demo` `terminal` `typing` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Comparison Split
Source: https://hyperframes.heygen.com/catalog/components/comparison-split
Two full-bleed panels compare before and after states as a persistent divider wipes the vivid after layer over the muted before layer and rests at a configurable split.
```html comparison-split.html theme={null}
```
## Install
That writes one file: `compositions/components/comparison-split.html`.
## Paste it into your composition
Open `compositions/components/comparison-split.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------ | ------------------------ | -------------------------------------------------- |
| `split` | `50` | 0% to 100%, step 1% | Target resting position of the comparison divider. |
| `orientation` | `horizontal` | `horizontal`, `vertical` | Axis and direction used by the comparison wipe. |
| `labelA` | `Before` | string | Caption shown on the base before panel. |
| `labelB` | `After` | string | Caption shown on the revealed after panel. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
Tagged `prop` `ui-props` `compare` `holdable` `before-after` `wipe`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Confetti
Source: https://hyperframes.heygen.com/catalog/components/confetti
A deterministic celebration burst with seeded particles and gravity.
## Install
That writes one file: `compositions/components/confetti.html`.
## Source
```html theme={null}
Confetti
A deterministic celebration burst with seeded particles and gravity.
```
## Usage
Open `compositions/components/confetti.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Conic Progress Ring
Source: https://hyperframes.heygen.com/catalog/components/conic-progress-ring
A token-driven conic progress ring whose angular fill and center count settle together from one registered percentage.
```html conic-progress-ring.html theme={null}
Conic Progress Ring
0
```
## Install
That writes one file: `compositions/components/conic-progress-ring.html`.
## Paste it into your composition
Open `compositions/components/conic-progress-ring.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ------------------- | --------------------------------------------------------------------- |
| `progress` | `100` | 0% to 100%, step 1% | Target angular fill from 0 to 100. |
| `thickness` | `12` | 4% to 30%, step 1% | Ring stroke thickness as a percent of the ring radius. |
| `label` | `100` | string | Numeric target shown in the center and counted in sync with the fill. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Conic Progress Ring
0
```
Tagged `data` `progress` `ring` `conic-gradient` `prove` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Constellation Hub
Source: https://hyperframes.heygen.com/catalog/components/constellation-hub
Feature nodes brighten in narration order as real-length SVG connectors draw outward from a fixed central hub, then settle into one lockup.
```html constellation-hub.html theme={null}
Constellation Hub
```
## Install
That writes one file: `compositions/components/constellation-hub.html`.
## Paste it into your composition
Open `compositions/components/constellation-hub.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------ |
| `hub_label` | `Product` | string | Text displayed inside the fixed central hub. |
| `nodes` | `Capture,Compose,Render,Share` | string | Comma-separated feature labels introduced in narration order. |
| `cues` | \`\` | string | Comma-separated seconds (from mount start) for each node reveal. Empty keeps the authored even spread. |
| `accent` | `green` | `green`, `blue`, `violet` | Highlight color used by the hub, connectors, and active nodes. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the lockup holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Constellation Hub
```
Tagged `motion-primitive` `feature-tour` `hub` `nodes` `connector` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Count Up
Source: https://hyperframes.heygen.com/catalog/components/count-up
A token-native stat counter that eases between values and lands with a restrained scale pulse.
```html count-up.html theme={null}
Count Up
```
## Install
That writes one file: `compositions/components/count-up.html`.
## Paste it into your composition
Open `compositions/components/count-up.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | ------------------------------------------------------------------------------ |
| `start` | `0` | number | First value shown by the count. |
| `end` | `100` | number | Final value where the count lands. |
| `prefix` | \`\` | string | Optional text shown before the value. |
| `suffix` | `%` | string | Optional text shown after the value. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the count. |
| `glow` | `false` | boolean | Optional soft accent glow under the count. Off by default. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the landed value holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Count Up
```
Tagged `motion-primitive` `proof` `stats` `counter` `number` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# CTA Close
Source: https://hyperframes.heygen.com/catalog/components/cta-close
A display-scale action line lands per word and fills the frame with air, one generous CTA capsule pops beneath it with a single overshoot, and the finished close holds completely still.
```html cta-close.html theme={null}
CTA Close
```
## Install
That writes one file: `compositions/components/cta-close.html`.
## Paste it into your composition
Open `compositions/components/cta-close.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ---------------- | ------------------------- | ------------------------------------------------------------------------------------------------------ |
| `action_line` | `Make it happen` | string | Two to four word action that closes the film. |
| `button_label` | `Start now` | string | Text displayed inside the single CTA capsule. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract color used by the CTA capsule. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the lockup holds until the frame cuts (this primitive closes films). |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
CTA Close
```
Tagged `motion-primitive` `ui-props` `cta` `end-card` `close` `ask`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# CTA Lockup
Source: https://hyperframes.heygen.com/catalog/components/cta-lockup
A canonical closing lockup that reveals an action line, pops in an accent CTA capsule, settles supporting microcopy, and holds with confidence.
```html cta-lockup.html theme={null}
CTA Lockup
```
## Install
That writes one file: `compositions/components/cta-lockup.html`.
## Paste it into your composition
Open `compositions/components/cta-lockup.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ---------------------- | ------------------------- | ---------------------------------------------- |
| `action_line` | `Start building today` | string | Primary action statement shown above the CTA. |
| `button_label` | `Get HyperFrames` | string | Text displayed inside the CTA capsule. |
| `microcopy` | `Free while in beta` | string | Supporting detail shown below the CTA capsule. |
| `accent` | `green` | `green`, `blue`, `violet` | Fill color used by the CTA capsule. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
CTA Lockup
```
Tagged `motion-primitive` `ui-props` `cta` `end-card` `lockup` `ask`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cursor Glyph Trail
Source: https://hyperframes.heygen.com/catalog/components/cursor-glyph-trail
An actor travels an authored path depositing small dithered glyphs at its past positions, each popping in and decaying in place, stamp rate scaling with the actor's velocity.
```html cursor-glyph-trail.html theme={null}
Cursor Glyph Trail
```
## Install
That writes one file: `compositions/components/cursor-glyph-trail.html`.
## Paste it into your composition
Open `compositions/components/cursor-glyph-trail.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | -------- | ------------------------- | ----------------------------------------------------------------------------------------- |
| `glyphs` | `░▒▓+·×` | string | Stamp charset; one glyph per stamp is chosen deterministically. |
| `density` | `med` | `low`, `med`, `high` | Arc-length spacing between stamps along the path. |
| `path` | `sweep` | `sweep`, `arc`, `zigzag` | Authored travel path preset. |
| `fade` | `0.8` | number | Per-stamp decay window in seconds, clamped 0.3 to 1.5. |
| `accent` | `green` | `green`, `blue`, `violet` | Trail and actor color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled actor holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Cursor Glyph Trail
```
Tagged `motion-primitive` `demonstrate` `trail` `cursor` `glyphs` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Cut the Curve
Source: https://hyperframes.heygen.com/catalog/components/cut-the-curve
A velocity-matched directional hard cut: the outgoing subject accelerates with power4.in, swaps at peak velocity, and the incoming subject continues in the same direction with power4.out.
```html cut-the-curve.html theme={null}
Cut the Curve
```
## Install
That writes one file: `compositions/components/cut-the-curve.html`.
## Paste it into your composition
Open `compositions/components/cut-the-curve.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | -------- | ----------------------------- | ---------------------------------------------------------------------------------------- |
| `subject` | `cursor` | `cursor`, `card`, `scene` | Visual payload used on both sides of the cut. |
| `direction` | `left` | `left`, `right`, `up`, `down` | Shared screen direction for outgoing and incoming travel. |
| `cutFraction` | `0.33` | 0 to 1, step 0.01 | Normalized point where the hard cut swaps subjects. |
| `blurPx` | `12` | 0px to 40px, step 1px | Blur in pixels shared by both subjects at the cut seam. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure of the incoming subject. Default none: it rests until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Cut the Curve
```
Tagged `transition` `directional-cut` `velocity-match` `whip` `bridge` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Decline Chart
Source: https://hyperframes.heygen.com/catalog/components/decline-chart
A metric line draws downward as its value counts down and the ambient background darkens in lockstep.
```html decline-chart.html theme={null}
Decline Chart
```
## Install
That writes one file: `compositions/components/decline-chart.html`.
## Paste it into your composition
Open `compositions/components/decline-chart.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ----------- | ---------------- | ------------------------------------------ |
| `label` | `Retention` | string | Label shown above the declining value. |
| `start_value` | `82` | 0 to 100, step 1 | Metric value at the start of the decline. |
| `end_value` | `34` | 0 to 100, step 1 | Metric value at the bottom of the decline. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Decline Chart
```
Tagged `motion-primitive` `data` `chart` `decline` `metric` `problem`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Device Frame Stage
Source: https://hyperframes.heygen.com/catalog/components/device-frame-stage
A phone or tablet mockup staged as a physical scene prop with a screen slot for arbitrary reconstructed UI, rising onto the stage, settling, and holding an idle float
```html device-frame-stage.html theme={null}
Device Frame Stage
```
## Install
That writes one file: `compositions/components/device-frame-stage.html`.
## Paste it into your composition
Open `compositions/components/device-frame-stage.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | ------------------------- | ------------ |
| `device` | `phone` | `phone`, `tablet` | |
| `cutout` | `none` | `none`, `island`, `notch` | |
| `body` | `graphite` | `graphite`, `silver` | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Device Frame Stage
```
Tagged `prop` `device` `mobile` `tablet` `ui-props` `holdable`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Directional Wipe
Source: https://hyperframes.heygen.com/catalog/components/directional-wipe
A directional scene push that slides one panel over another.
```html directional-wipe.html theme={null}
Before
Directional Wipe
```
## Install
That writes one file: `compositions/components/directional-wipe.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | --------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `palette` | `slate` | `slate`, `teal`, `ember` | Theme token for the ring marking the incoming panel. Slate rides --accent, teal --brand, ember --accent-2; each falls back to a neutral hairline. |
| `corner` | `rounded` | `square`, `rounded`, `soft` | Corner radius of the transition card. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Before
Directional Wipe
```
## Usage
Open `compositions/components/directional-wipe.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `transition-primitive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Drift Hold
Source: https://hyperframes.heygen.com/catalog/components/drift-hold
A centered content card stays subtly alive through loop-exact rotation, scale breathing, and a slow light sweep.
```html drift-hold.html theme={null}
Drift Hold
```
## Install
That writes one file: `compositions/components/drift-hold.html`.
## Paste it into your composition
Open `compositions/components/drift-hold.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | -------------- | --------------------- | -------------------------------------------------------------- |
| `text` | `Always alive` | string | Text displayed in the default centered card. |
| `intensity` | `standard` | `whisper`, `standard` | Amplitude of the ambient rotation, breathing, and light sweep. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Drift Hold
```
Tagged `motion-primitive` `camera` `ambient` `drift` `hold` `loopable`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Dynamic Grid
Source: https://hyperframes.heygen.com/catalog/components/dynamic-grid
A responsive animated grid background driven by CSS variables for SaaS, code, and data scenes
```html dynamic-grid.html theme={null}
```
## Install
That writes one file: `compositions/components/dynamic-grid.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ---------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `density` | `standard` | `fine`, `standard`, `coarse` | Cell size of the grid: fine reads as graph paper, coarse as a few large panels. |
| `weight` | `hairline` | `hairline`, `standard`, `bold` | Thickness of the grid lines, from a hairline rule to a bold structural grid. |
| `tone` | `neutral` | `neutral`, `green`, `blue`, `violet` | Line colour: neutral is the translucent white the original ships with, and the accents ride --brand, --accent and --accent-2. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/dynamic-grid.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `background` `grid` `ui`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Echo Trail
Source: https://hyperframes.heygen.com/catalog/components/echo-trail
A moving element renders with N ghosted copies of itself at t minus i times delta, opacity stepped down per ghost; one traversal, echoes collapsing into the settled element at rest.
```html echo-trail.html theme={null}
Echo Trail
```
## Install
That writes one file: `compositions/components/echo-trail.html`.
## Paste it into your composition
Open `compositions/components/echo-trail.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | ---------------------------------------------------------------------------------------- |
| `echoes` | `4` | number | Ghost copy count, clamped 2 to 6. |
| `delta` | `0.09` | number | Lag between successive ghosts in seconds, clamped 0.03 to 0.3. |
| `path` | `sweep` | `sweep`, `rise`, `arc` | Authored traversal preset. |
| `accent` | `green` | `green`, `blue`, `violet` | Subject accent color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled element holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Echo Trail
```
Tagged `motion-primitive` `demonstrate` `trail` `onion-skin` `ghosts` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Facet Morph
Source: https://hyperframes.heygen.com/catalog/components/facet-morph
A faceted low-poly mass of 36 triangles continuously reshapes between three authored silhouettes (blob, mark, badge) with per-facet flat shading that recomputes as the vertices move. Light reads from the upper left; lit facets lift toward a pale accent-tinted tone while turned-away facets fall toward near-black. One calm continuous morph, then a settled hold.
```html facet-morph.html theme={null}
Facet Morph
```
## Install
That writes one file: `compositions/components/facet-morph.html`.
## Paste it into your composition
Open `compositions/components/facet-morph.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ----------------- | ------------------------- | -------------------------------------------------------------------------------------------------------- |
| `forms` | `blob,mark,badge` | string | Comma-separated silhouette sequence from blob, mark, badge. |
| `hold_last` | `true` | boolean | True settles dead still on the final silhouette; false keeps the mass slowly breathing through the hold. |
| `accent` | `green` | `green`, `blue`, `violet` | Tint of the lit facets. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the settled mass. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Facet Morph
```
Tagged `motion-primitive` `intro` `morph` `low-poly` `svg` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Fade Through
Source: https://hyperframes.heygen.com/catalog/components/fade-through
A calm transition primitive that fades one layer out, passes through a wash, and reveals the next layer
```html fade-through.html theme={null}
```
## Install
That writes one file: `compositions/components/fade-through.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | --------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `wash` | `paper` | `paper`, `white`, `ink`, `accent` | Colour of the mid-transition frame. Paper resolves through --hf-fade-through-wash, accent rides --accent. |
| `strength` | `1` | 0.1 to 1, step 0.05 | How far the wash covers at its peak. 1 is a full flash, 0.3 a light veil. |
| `shape` | `flat` | `flat`, `bloom` | Flat fills the frame evenly, bloom concentrates the wash in the centre. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/fade-through.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `transition` `fade` `scene`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Focus Blur Resolve
Source: https://hyperframes.heygen.com/catalog/components/focus-blur-resolve
A premium focus pull from heavy blur to crisp text, then a soft blur-out exit.
```html focus-blur-resolve.html theme={null}
Crystalclear
```
## Install
That writes one file: `compositions/components/focus-blur-resolve.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | -------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
| `size` | `standard` | `compact`, `standard`, `display` | Type size of the words, from a caption-scale line to a full display card. |
| `blur` | `standard` | `soft`, `standard`, `heavy` | Scales the blur radius the timeline drives, so the focus pull starts as a light haze or a full smear. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Crystalclear
```
## Usage
Open `compositions/components/focus-blur-resolve.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Focus Rack
Source: https://hyperframes.heygen.com/catalog/components/focus-rack
Focus shifts once between two cards at different apparent depths through synchronized blur, dimming, scale, and parallax.
```html focus-rack.html theme={null}
Focus Rack
WorkspaceA
WorkspaceB
```
## Install
That writes one file: `compositions/components/focus-rack.html`.
## Paste it into your composition
Open `compositions/components/focus-rack.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ----------- | ------------------------- | --------------------------------------- |
| `label_a` | `Draft` | string | Label on the card that begins in focus. |
| `label_b` | `Published` | string | Label on the card that receives focus. |
| `accent` | `blue` | `green`, `blue`, `violet` | Highlight color shared by both cards. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Focus Rack
WorkspaceA
WorkspaceB
```
Tagged `motion-primitive` `camera` `focus` `focus-rack` `depth` `parallax` `emphasize`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Focus Swap
Source: https://hyperframes.heygen.com/catalog/components/focus-swap
Moves attention between two side-by-side cards as one recedes with scale, blur, and dimming while the other advances to full focus.
```html focus-swap.html theme={null}
Focus Swap
APlan
Shape the idea
Define the brief and align the team.
BLaunch
Ship the result
Move from approved work to live impact.
```
## Install
That writes one file: `compositions/components/focus-swap.html`.
## Paste it into your composition
Open `compositions/components/focus-swap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | --------------------- | -------------------------------------------------- |
| `focus` | `b` | `a`, `b` | Card that ends sharp, full-size, and fully opaque. |
| `blurPx` | `6` | 0px to 20px, step 1px | Blur applied to the card outside the viewer focus. |
| `dim` | `0.5` | 0 to 1, step 0.05 | Opacity of the card outside the viewer focus. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Focus Swap
APlan
Shape the idea
Define the brief and align the team.
BLaunch
Ship the result
Move from approved work to live impact.
```
Tagged `effect` `ui-props` `focus` `blur` `attention` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Gesture Tap
Source: https://hyperframes.heygen.com/catalog/components/gesture-tap
A contact circle taps a mobile pill button, releases it into a new labeled accent state, and lifts away.
```html gesture-tap.html theme={null}
Gesture Tap
```
## Install
That writes one file: `compositions/components/gesture-tap.html`.
## Paste it into your composition
Open `compositions/components/gesture-tap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | ----------- | ------------------------- | ------------------------------------------------------------- |
| `tap_label` | `Follow` | string | Button label shown before the tap response. |
| `response_label` | `Following` | string | Button label shown when the tap releases. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used for the completed button state and response pulse. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Gesture Tap
```
Tagged `motion-primitive` `gesture` `tap` `interaction` `ui-props`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Gloss Sweep
Source: https://hyperframes.heygen.com/catalog/components/gloss-sweep
A card lands with a restrained slam, catches one diagonal specular gloss, and holds perfectly still.
```html gloss-sweep.html theme={null}
Gloss Sweep
```
## Install
That writes one file: `compositions/components/gloss-sweep.html`.
## Paste it into your composition
Open `compositions/components/gloss-sweep.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------- | -------------------------- | --------------------------------------- |
| `text` | `Pro` | string | Text displayed on the card. |
| `accent` | `green` | `green`, `blue`, `violet` | Color treatment for the card. |
| `sweep_angle` | `25` | -60deg to 60deg, step 1deg | Angle of the specular gloss in degrees. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Gloss Sweep
```
Tagged `motion-primitive` `celebration` `gloss` `card` `badge` `payoff`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grade Split Reveal
Source: https://hyperframes.heygen.com/catalog/components/grade-split-reveal
The same picture twice, one flat and one finished, with a hard edge sweeping between them. It stops in the middle long enough to compare, then commits and the graded look takes the frame. Both looks are real HyperFrames color grading run through the WebGL shader, so the preview and the render match.
```html grade-split-reveal.html theme={null}
Grade Split Reveal
Ungraded
Warm Cinematic
```
## Install
That writes one file: `compositions/components/grade-split-reveal.html`.
## Paste it into your composition
Open `compositions/components/grade-split-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `look` | `warm-cinematic` | `warm-cinematic`, `cool-teal`, `bleach-bypass` | Grade carried by the upper copy, and the label printed over it. All three are real grading blocks handed to the shader, not CSS filters. |
| `split` | `62` | 25% to 85%, step 1% | How far across the plate the edge stops to hold the comparison, before it commits and takes the rest. |
| `edge` | `hairline` | `hairline`, `bold`, `hidden` | The divider line riding the wipe. Hidden drops it entirely so the grade arrives with no seam. |
| `labels` | `on` | `on`, `off` | Show or hide the two captions naming each half of the plate. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Grade Split Reveal
Ungraded
Warm Cinematic
```
Tagged `color-grading` `media` `compare` `reveal` `motion-primitive` `grade`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grain Field
Source: https://hyperframes.heygen.com/catalog/components/grain-field
A clearly visible accent-tinted dot field drifts over a subtle luminance gradient in an exact ambient loop.
```html grain-field.html theme={null}
Grain Field
```
## Install
That writes one file: `compositions/components/grain-field.html`.
## Paste it into your composition
Open `compositions/components/grain-field.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | ------------------------- | -------------------------------------------------------------- |
| `density` | `fine` | `fine`, `coarse` | Dot size and spacing across the grain field. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used to color the dots and luminance wash. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Grain Field
```
Tagged `motion-primitive` `background` `grain` `dots` `texture` `ambient` `loopable`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grain Overlay
Source: https://hyperframes.heygen.com/catalog/components/grain-overlay
Animated film grain texture overlay using CSS keyframes — adds warmth and analog character to any composition
## Install
That writes one file: `compositions/components/grain-overlay.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/grain-overlay.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `texture` `grain` `overlay` `film`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grid Card Assemble
Source: https://hyperframes.heygen.com/catalog/components/grid-card-assemble
N capability cards (thin-line icon that draws on, mono label, optional muted body) stagger-assemble into a grid or vertical list with a fade plus short slide into slot, then hold perfectly still.
```html grid-card-assemble.html theme={null}
Grid Card Assemble
```
## Install
That writes one file: `compositions/components/grid-card-assemble.html`.
## Paste it into your composition
Open `compositions/components/grid-card-assemble.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | -------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------- |
| `items` | `Capture,Compose,Render,Publish` | string | Comma-separated cards (3 to 12). "Label: body" adds a one-line muted body under the label. |
| `layout` | `grid` | `grid`, `list` | Grid wraps by columns; list stacks vertically. |
| `columns` | `0` | 0 to 4, step 1 | Grid column count (grid layout only). 0 picks automatically: one row up to 3 items, then ceil(sqrt(N)). |
| `cues` | \`\` | string | Comma-separated per-item entrance times in seconds. Blank entries use the default cascade. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used by the card icons. |
| `exit` | `none` | `none`, `fade`, `up` | How the assembled layout leaves the frame. Default none: the hold ends the film. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Grid Card Assemble
```
Tagged `motion-primitive` `layout` `grid` `list` `stagger` `assemble` `feature-tour`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Grid Pixelate Wipe
Source: https://hyperframes.heygen.com/catalog/components/grid-pixelate-wipe
Transition effect where the screen dissolves into a grid of squares that fade out with staggered timing — use between scenes
## Install
That writes one file: `compositions/components/grid-pixelate-wipe.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/grid-pixelate-wipe.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition` `wipe` `grid` `pixelate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Halftone Dissolve
Source: https://hyperframes.heygen.com/catalog/components/halftone-dissolve
Scene A dissolves into scene B through a growing halftone dot field: accent ink dots pop onto a fixed grid smallest-first, each opens into a window onto B, until the windows merge and B fully replaces A.
```html halftone-dissolve.html theme={null}
Halftone Dissolve
A
B
```
## Install
That writes one file: `compositions/components/halftone-dissolve.html`.
## Paste it into your composition
Open `compositions/components/halftone-dissolve.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------- |
| `dot_size` | `medium` | `small`, `medium`, `large` | Grid pitch for the halftone field. |
| `direction` | `ltr` | `ltr`, `center`, `noise` | Threshold ordering: ltr sweeps left to right, center grows from the middle, noise scatters. |
| `dissolve_at` | `1.1` | 0.2s to 10s, step 0.1s | Seconds from mount start when the dissolve begins. |
| `accent` | `green` | `green`, `blue`, `violet` | Ink dot color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: scene B holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Halftone Dissolve
A
B
```
Tagged `motion-primitive` `transition` `texture` `halftone` `dissolve`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Headline Slam
Source: https://hyperframes.heygen.com/catalog/components/headline-slam
A heavyweight headline scales down into frame, lands with a deterministic three-frame shake, holds with subtle drift, and whips upward on exit.
```html headline-slam.html theme={null}
Headline Slam
```
## Install
That writes one file: `compositions/components/headline-slam.html`.
## Paste it into your composition
Open `compositions/components/headline-slam.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------------- | --------------- | ------------------------- | ------------------------------------------------------------------------------------ |
| `text` | `Ship it today` | string | Text displayed as the headline. |
| `accent_word_index` | `1` | number | Zero-based word index to color. Out of range leaves the headline unaccented. |
| `accent` | `green` | `green`, `blue`, `violet` | Color applied to the selected word. |
| `shadow` | `true` | boolean | Drop shadow cast under the headline. On by default; set false for a flat matte look. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Headline Slam
```
Tagged `motion-primitive` `typography` `headline` `slam` `impact` `exit`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Hand-Drawn Arrow
Source: https://hyperframes.heygen.com/catalog/components/hw-arrow
Wobbled draw-on arrow with straight, gentle, and swoop curve presets; boils while on screen
## Install
That writes `compositions/components/hw-arrow.html`, plus 1 supporting file under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/hw-arrow.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
point at things
```
Tagged `handwritten` `annotation` `arrow` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Hand-Drawn Boil
Source: https://hyperframes.heygen.com/catalog/components/hw-boil
Hand-drawn jitter that re-poses every N frames, as seek-safe helpers: pose derives from quantized timeline time through a seeded hash; includes the shared onUpdate dispatcher and a wobbled-ellipse path generator
## Install
That writes `compositions/components/hw-boil.html`, plus 1 supporting file under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/hw-boil.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
the boil
FRAME DROP 3
FRAME DROP 1
TEXT, AMP 1.2
```
Tagged `handwritten` `effect` `annotation`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Hand-Drawn Box Label
Source: https://hyperframes.heygen.com/catalog/components/hw-box-label
Wobbled rounded rectangle draws around a region with a handwritten label above or centered
## Install
That writes `compositions/components/hw-box-label.html`, plus 1 supporting file under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/hw-box-label.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
```
Tagged `handwritten` `annotation` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scribble Callout Circle
Source: https://hyperframes.heygen.com/catalog/components/hw-callout-circle
Wobbled ellipse draws around a target with optional scribble fill, curved connector, and handwritten label
## Install
That writes `compositions/components/hw-callout-circle.html`, plus 1 supporting file under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/hw-callout-circle.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
subject
```
Tagged `handwritten` `annotation` `callout` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Squiggle Marks
Source: https://hyperframes.heygen.com/catalog/components/hw-underline
Hand-drawn squiggle underline, double-pass strikethrough, and bracket marks that draw on
## Install
That writes `compositions/components/hw-underline.html`, plus 1 supporting file under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/hw-underline.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
underline the point
cross this out
bracket the aside
```
Tagged `handwritten` `annotation` `text-treatment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Icon Morph Beat
Source: https://hyperframes.heygen.com/catalog/components/icon-morph-beat
An icon morphs between authored state silhouettes, shifts to an accent color, and marks completion with one restrained pulse.
```html icon-morph-beat.html theme={null}
Icon Morph Beat
```
## Install
That writes one file: `compositions/components/icon-morph-beat.html`.
## Paste it into your composition
Open `compositions/components/icon-morph-beat.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ----------- | ---------------------------------------- | ----------------------------------------------- |
| `pair` | `mic-check` | `mic-check`, `play-check`, `lock-unlock` | Before and after icon states used by the morph. |
| `accent` | `green` | `green`, `blue`, `violet` | Color applied as the morph completes. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Icon Morph Beat
```
Tagged `motion-primitive` `product-demo` `icon` `morph` `state-change` `completion`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Icon Swap
Source: https://hyperframes.heygen.com/catalog/components/icon-swap
A scale-and-blur icon swap primitive for toolbar and action state changes
```html icon-swap.html theme={null}
```
## Install
That writes one file: `compositions/components/icon-swap.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | ----------------------------- | ----------------------------------------------------------------------------------------------- |
| `tone` | `dark` | `dark`, `light`, `accent` | Button fill and glyph colour. Accent rides --brand. |
| `size` | `standard` | `small`, `standard`, `large` | Button box and glyph size, from a toolbar chip to a hero action. |
| `shape` | `rounded` | `rounded`, `circle`, `square` | Corner treatment of the button box. |
| `blur` | `standard` | `soft`, `standard`, `heavy` | Scales the blur radius the timeline drives through the swap, from a light haze to a full smear. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/icon-swap.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `icon` `swap`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Ink Bleed Reveal
Source: https://hyperframes.heygen.com/catalog/components/ink-bleed-reveal
Liquid ink blooms through paper under a gooey blur-plus-threshold filter, merges, then contracts as a crisp slotted mark resolves beneath it, with static seeded paper grain riding the result.
```html ink-bleed-reveal.html theme={null}
Ink Bleed Reveal
H
```
## Install
That writes one file: `compositions/components/ink-bleed-reveal.html`.
## Paste it into your composition
Open `compositions/components/ink-bleed-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | ------------------------------------------------------------------------------- |
| `blobs` | `5` | 4 to 6, step 1 | How many ink blobs bleed and merge (4 to 6). |
| `accent` | `green` | `green`, `blue`, `violet` | Ink tint: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the revealed mark holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Ink Bleed Reveal
H
```
Tagged `motion-primitive` `texture` `reveal` `gooey` `svg-filter` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Inline Highlight
Source: https://hyperframes.heygen.com/catalog/components/inline-highlight
A clean marker-style inline highlight that animates behind text using a CSS scale variable
```html inline-highlight.html theme={null}
```
## Install
That writes one file: `compositions/components/inline-highlight.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ----------------------------------- | ---------------------------------------------------------------------------- |
| `tint` | `yellow` | `yellow`, `green`, `blue`, `violet` | Marker colour. Green, blue and violet ride --brand, --accent and --accent-2. |
| `thickness` | `standard` | `thin`, `standard`, `thick` | Height of the marker band behind the text, as a share of the font size. |
| `origin` | `left` | `left`, `right`, `center` | Edge the marker grows out of as the scale variable runs from 0 to 1. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/inline-highlight.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `text` `highlight` `caption`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Input Feedback
Source: https://hyperframes.heygen.com/catalog/components/input-feedback
A transitions.dev-inspired input feedback primitive with shake, clear affordance, and success state
```html input-feedback.html theme={null}
mia@example.comOK
Looks good.
```
## Install
That writes one file: `compositions/components/input-feedback.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ----------------- | ---------------- | ------------------------------------------------------------------------------------- |
| `status` | `valid` | `valid`, `error` | Whether the field reads as accepted or rejected, colouring the border, chip and hint. |
| `value` | `mia@example.com` | string | Text held by the field. |
| `hint` | `Looks good.` | string | Helper line under the field. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
mia@example.comOK
Looks good.
```
## Usage
Open `compositions/components/input-feedback.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition-primitive` `transitions-dev-port` `input` `feedback`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Iris Reveal
Source: https://hyperframes.heygen.com/catalog/components/iris-reveal
A circle clip-path opens from an authored origin revealing state B over state A in one confident pass, then holds on B. Classic register dims and desaturates the before state so the after state lands in full color; a thin accent rim rides the iris edge. Callers fill the named before/after slot panels; token-styled defaults render when a slot is left empty.
```html iris-reveal.html theme={null}
Iris Reveal
```
## Install
That writes one file: `compositions/components/iris-reveal.html`.
## Paste it into your composition
Open `compositions/components/iris-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `iris_x` | `50` | 0% to 100%, step 1% | Horizontal iris origin as a percent of the frame width. |
| `iris_y` | `50` | 0% to 100%, step 1% | Vertical iris origin as a percent of the frame height. |
| `open_at` | `0.35` | 0s to 8s, step 0.05s | Seconds after mount start when the iris begins opening. |
| `register` | `color` | `color`, `plain` | Color dims and desaturates the before state so the after state lands in full color. Plain leaves both untouched. |
| `accent` | `green` | `green`, `blue`, `violet` | Iris rim ring and default after art tint. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the final revealed frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Iris Reveal
```
Tagged `transition` `iris` `circle-reveal` `clip-path` `bridge` `slots`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Keyframe Scrub Stack
Source: https://hyperframes.heygen.com/catalog/components/keyframe-scrub-stack
A keyframe-sequenced stack of cards with offset timing and easing presets.
## Install
That writes one file: `compositions/components/keyframe-scrub-stack.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/keyframe-scrub-stack.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `advanced-motion` `anime-inspired` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Kinetic Type Swap
Source: https://hyperframes.heygen.com/catalog/components/kinetic-type-swap
A held sentence keeps its fixed text in place while one widest-word masked slot rolls through alternatives and settles on the final option.
```html kinetic-type-swap.html theme={null}
Kinetic Type Swap
```
## Install
That writes one file: `compositions/components/kinetic-type-swap.html`.
## Paste it into your composition
Open `compositions/components/kinetic-type-swap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------- |
| `prefix` | `Ship` | string | Fixed sentence text before the rolling word slot. |
| `options` | `faster,smarter,together` | string | Comma-separated words shown in the rolling slot. |
| `suffix` | \`\` | string | Fixed sentence text after the rolling word slot. |
| `cues` | \`\` | string | Comma-separated seconds (from mount start) for each word swap. Empty keeps the authored even spread. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the rolling word slot. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the sentence holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Kinetic Type Swap
```
Tagged `motion-primitive` `text-effects` `kinetic-type` `word-swap` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Light Sweep Pass
Source: https://hyperframes.heygen.com/catalog/components/light-sweep-pass
A traveling key light re-shades a slotted scene: a soft diagonal gradient band crosses the frame once while every per-element highlight and shadow shifts in lockstep (all driven by one --light-x property), then the light settles into a resting key. Quiet, expensive-feeling; the scene itself never moves. Callers fill the named scene slot; a token hero-and-cards default renders when it is left empty.
```html light-sweep-pass.html theme={null}
Light Sweep Pass
```
## Install
That writes one file: `compositions/components/light-sweep-pass.html`.
## Paste it into your composition
Open `compositions/components/light-sweep-pass.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ---------- | -------------------------- | -------------------------------------------------------- |
| `angle` | `115` | 60deg to 160deg, step 1deg | Band and highlight gradient angle in degrees. |
| `sweep_at` | `0.9` | 0s to 8s, step 0.05s | Seconds after mount start when the band starts crossing. |
| `strength` | `standard` | `subtle`, `standard` | Band opacity and highlight bloom multiplier. |
| `accent` | `green` | `green`, `blue`, `violet` | Tint inside the band and the highlight blooms. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the settled key. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Light Sweep Pass
```
Tagged `motion-primitive` `overlay` `light` `sweep` `slots` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Line-by-Line Slide
Source: https://hyperframes.heygen.com/catalog/components/line-by-line-slide
Each line enters from the left with staggered slide and exits to the right.
```html line-by-line-slide.html theme={null}
Design fasterRender cleanerShip louder
```
## Install
That writes one file: `compositions/components/line-by-line-slide.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | -------------------------------- | ------------------------------------------------------------------------------------- |
| `size` | `standard` | `compact`, `standard`, `display` | Type size of the whole stack. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Line colour: ink for light frames, paper for dark ones, accent rides the brand token. |
| `density` | `standard` | `fine`, `standard`, `coarse` | The gap between lines, from a tight block to an airy stack. |
| `direction` | `left` | `left`, `right` | Which side the lines slide in from as the timeline drives the offset. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Design fasterRender cleanerShip louder
```
## Usage
Open `compositions/components/line-by-line-slide.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Line Swap
Source: https://hyperframes.heygen.com/catalog/components/line-swap
A masked full-line beat replacement: line A holds center then exits up through an overflow-hidden mask as line B enters bottom-up on the same beat, with an optional accent underline drawing beneath one word of line B.
```html line-swap.html theme={null}
Line Swap
```
## Install
That writes one file: `compositions/components/line-swap.html`.
## Paste it into your composition
Open `compositions/components/line-swap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | ------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `line_a` | `Everyone promised you AI.` | string | First line; holds center inside the mask, then exits up on the swap beat. |
| `line_b` | `Almost nobody promised you control.` | string | Replacement line; enters bottom-up on the swap beat and holds. |
| `swap_at` | `1.5` | number | Second (from mount start) of the beat replacement. Clamped so the swap and underline complete before any exit. |
| `underline_word` | `control` | string | First case-insensitive substring match in line B gets the accent underline after landing. Empty disables it. |
| `accent` | `green` | `green`, `blue`, `violet` | Underline color from the contract token map. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the landed line holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Line Swap
```
Tagged `motion-primitive` `text-effects` `swap` `beat` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Locked Nucleus Orbit
Source: https://hyperframes.heygen.com/catalog/components/locked-nucleus-orbit
A fixed center nucleus anchors deterministic satellite orbits that settle into a composed lockup.
```html locked-nucleus-orbit.html theme={null}
Locked Nucleus Orbit
```
## Install
That writes one file: `compositions/components/locked-nucleus-orbit.html`.
## Paste it into your composition
Open `compositions/components/locked-nucleus-orbit.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | ------------------------- | -------------------------------------------------------- |
| `label` | `core` | string | Text displayed inside the fixed center nucleus. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the nucleus, rings, and satellite markers. |
| `satellites` | `4` | 3 to 6, step 1 | Number of orbiting copy chips. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Locked Nucleus Orbit
```
Tagged `motion-primitive` `intro` `reveal` `orbit` `lockup` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Logo Brand Close
Source: https://hyperframes.heygen.com/catalog/components/logo-brand-close
A display-scale wordmark cascades letter by letter into a centered lockup, the accent brand period lands last, an optional tagline and wide-tracked mono URL settle beneath, and the finished identity holds dead still to the end of the film.
```html logo-brand-close.html theme={null}
Logo Brand Close
```
## Install
That writes one file: `compositions/components/logo-brand-close.html`.
## Paste it into your composition
Open `compositions/components/logo-brand-close.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | --------------------------- | ------------------------- | ------------------------------------------------------------------------ |
| `wordmark` | `HYPERFRAMES` | string | Brand name whose letters cascade into the centered lockup. |
| `tagline` | `Write HTML. Render video.` | string | Optional tagline that settles beneath the wordmark. Empty hides it. |
| `url` | `hyperframes.heygen.com` | string | Optional mono URL line beneath the tagline. Empty hides it. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract color used by the brand period at the end of the wordmark. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Films end on the still hold, so the default is none. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Logo Brand Close
```
Tagged `motion-primitive` `typography` `brand` `logo` `end-card` `close`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Logo Sting
Source: https://hyperframes.heygen.com/catalog/components/logo-sting
A wordmark slams into its final scale, fires one accent ring and one white impact frame, then holds completely still.
```html logo-sting.html theme={null}
Logo Sting
```
## Install
That writes one file: `compositions/components/logo-sting.html`.
## Paste it into your composition
Open `compositions/components/logo-sting.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------------- | ------------------------- | ----------------------------------------- |
| `wordmark` | `HYPERFRAMES` | string | Brand name displayed in the final lockup. |
| `accent` | `green` | `green`, `blue`, `violet` | Color of the single impact ring. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Logo Sting
```
Tagged `motion-primitive` `brand` `logo` `sting` `impact` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Logo Wall
Source: https://hyperframes.heygen.com/catalog/components/logo-wall
A trusted-by wall of placeholder lettermark logos that fades and scales into place with a deterministic per-cell stagger.
```html logo-wall.html theme={null}
Logo Wall
Trusted by teams
```
## Install
That writes one file: `compositions/components/logo-wall.html`.
## Paste it into your composition
Open `compositions/components/logo-wall.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | ---------------------- | ---------------------------------------------- |
| `rows` | `3` | 2 to 4, step 1 | Number of logo rows in the wall. |
| `cols` | `5` | 3 to 6, step 1 | Number of logo columns in the wall. |
| `stagger` | `45` | 20ms to 75ms, step 1ms | Delay between consecutive logo cell entrances. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Logo Wall
Trusted by teams
```
Tagged `data` `logos` `social-proof` `stagger` `prove`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Marker Checklist Card
Source: https://hyperframes.heygen.com/catalog/components/marker-checklist-card
A hand-lettered paper card: marker headline with an underline and a drawn ellipse around one word, then three checklist rows whose checks draw themselves on - typewriter labels, marker values. The paper-and-marker sibling of mk-specs-list's clean professional rows
```html marker-checklist-card.html theme={null}
Marker Checklist Card
THE POWER
OF
ONEFILE
WRITE
HTML
RENDER
IN 4K
SHIP
TODAY
```
## Install
That writes `compositions/components/marker-checklist-card.html`, plus 2 supporting files under `assets/fonts/`.
## Paste it into your composition
Open `compositions/components/marker-checklist-card.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ----------- | ------- | ------------------------------------------ |
| `top` | `THE POWER` | string | First marker line. |
| `mid` | `OF` | string | Small connecting word under the underline. |
| `circled` | `ONE` | string | The word the marker ellipse draws around. |
| `rest` | `FILE` | string | The rest of the bottom line. |
| `l1` | `WRITE` | string | Typewriter label of row 1. |
| `v1` | `HTML` | string | Marker value of row 1. |
| `l2` | `RENDER` | string | Typewriter label of row 2. |
| `v2` | `IN 4K` | string | Marker value of row 2. |
| `l3` | `SHIP` | string | Typewriter label of row 3. |
| `v3` | `TODAY` | string | Marker value of row 3. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Marker Checklist Card
THE POWER
OF
ONEFILE
WRITE
HTML
RENDER
IN 4K
SHIP
TODAY
```
Tagged `motion-primitive` `handwritten` `checklist` `paper` `marker`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Marker Highlight
Source: https://hyperframes.heygen.com/catalog/components/marker-highlight
Display text settles in, then one hand-drawn marker stroke (highlight, circle, underline, or scribble) draws over the emphasized word on cue.
```html marker-highlight.html theme={null}
Marker Highlight
```
## Install
That writes one file: `compositions/components/marker-highlight.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------------- | ------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `text` | `Ship it with confidence` | string | Full line of display text. |
| `emphasis_word` | `confidence` | string | First case-insensitive substring match in text receives the marker. Empty or unmatched draws no marker. |
| `style` | `highlight` | `highlight`, `circle`, `underline`, `scribble` | Shape of the hand-drawn marker stroke. |
| `draw_at` | `0.9` | number | Second (from mount start) the marker starts drawing. Clamped so the stroke completes before any exit. |
| `accent` | `green` | `green`, `blue`, `violet` | Marker ink color from the contract token map. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the lockup holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Marker Highlight
```
## Usage
Open `compositions/components/marker-highlight.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography` `emphasis` `marker` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Match Cut
Source: https://hyperframes.heygen.com/catalog/components/match-cut
A circle accelerates into a hard single-frame scene swap, matches the incoming circle exactly, and continues into a smaller resting pose.
```html match-cut.html theme={null}
Match Cut
Match complete
```
## Install
That writes one file: `compositions/components/match-cut.html`.
## Paste it into your composition
Open `compositions/components/match-cut.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | ------------------------- | ------------------------------------ |
| `accent` | `green` | `green`, `blue`, `violet` | Color shared by the matched circles. |
| `label_a` | `Start` | string | Text inside the outgoing button. |
| `label_b` | `Done` | string | Result text revealed after the cut. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Match Cut
Match complete
```
Tagged `motion-primitive` `transition` `match-cut` `hard-cut` `continuity`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Matrix Decode
Source: https://hyperframes.heygen.com/catalog/components/matrix-decode
Random scramble resolves left-to-right into the target text.
```html matrix-decode.html theme={null}
00000000000
```
## Install
That writes one file: `compositions/components/matrix-decode.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------------- | ---------------------------- | ----------------------------------------------------------------------------- |
| `text` | `HYPERFRAMES` | string | Word the scramble resolves into. One scrambling cell per character, up to 32. |
| `accent` | `green` | `green`, `blue`, `violet` | Colour family of the cells and their glow. |
| `size` | `64` | 24px to 160px, step 4px | Type size of the cells in pixels. Cell width follows it. |
| `glow` | `standard` | `none`, `standard`, `strong` | Strength of the halo behind the cells, from none to a heavy bloom. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
00000000000
```
## Usage
Open `compositions/components/matrix-decode.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Menu Morph
Source: https://hyperframes.heygen.com/catalog/components/menu-morph
A transitions.dev-inspired hamburger and plus-menu morph primitive for compact action menus
```html menu-morph.html theme={null}
Text
Image
Audio
```
## Install
That writes one file: `compositions/components/menu-morph.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | -------------------- | -------------------------------- | ------------------------------------------------------------------------------ |
| `actions` | `Text, Image, Audio` | string | Comma separated labels for the pills that fan out under the button. Up to six. |
| `tone` | `ink` | `ink`, `green`, `blue`, `violet` | Colour of the round button behind the white bars. |
| `size` | `68` | 52px to 112px, step 4px | Diameter of the round button in pixels. The bars scale with it. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Text
Image
Audio
```
## Usage
Open `compositions/components/menu-morph.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `menu` `morph`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Mesh Gradient Background
Source: https://hyperframes.heygen.com/catalog/components/mesh-gradient-bg
A render-safe mesh gradient using animated radial layers.
## Install
That writes one file: `compositions/components/mesh-gradient-bg.html`.
## Source
```html theme={null}
Mesh Gradient Background
A render-safe mesh gradient using animated radial layers.
```
## Usage
Open `compositions/components/mesh-gradient-bg.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Micro Transitions
Source: https://hyperframes.heygen.com/catalog/components/micro-transitions
A transitions.dev-inspired pack of badge, dropdown, modal, tabs, tooltip, and success-check micro transitions
```html micro-transitions.html theme={null}
3
Actions
Export, duplicate, archive
Ready to publish?All checks passed.
DraftLive
Copied
```
## Install
That writes one file: `compositions/components/micro-transitions.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ---------- | -------------------------- | --------------------------------------------------------------------------- |
| `badge` | `3` | string | Count inside the notification badge on the bell. |
| `tooltip` | `Copied` | string | Wording inside the small dark tooltip. |
| `tone` | `red` | `red`, `amber`, `violet` | Colour of the notification badge chip. |
| `travel` | `standard` | `close`, `standard`, `far` | Scales how far every panel starts from its resting place before it settles. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
3
Actions
Export, duplicate, archive
Ready to publish?All checks passed.
DraftLive
Copied
```
## Usage
Open `compositions/components/micro-transitions.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition-primitive` `motion-primitive` `transitions-dev-port` `ui` `transition` `microinteraction`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Background Emphasis Type
Source: https://hyperframes.heygen.com/catalog/components/mk-emphasis-type
Oversized low-contrast background word drifting slowly behind the subject — typography as texture
## Install
That writes one file: `compositions/components/mk-emphasis-type.html`.
## Paste it into your composition
Open `compositions/components/mk-emphasis-type.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
Emphasis
```
Tagged `typography` `text-treatment` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Hairline Arc Gauge
Source: https://hyperframes.heygen.com/catalog/components/mk-usage-arc
Thin circular gauge that draws on while its percentage counts up; one helper call drives both
## Install
That writes one file: `compositions/components/mk-usage-arc.html`.
## Paste it into your composition
Open `compositions/components/mk-usage-arc.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
0%Usage
```
Tagged `data-viz` `gauge` `minimal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Modal Morph
Source: https://hyperframes.heygen.com/catalog/components/modal-morph
A small card expands into a full panel, shared-element style: both layouts measured once at mount, the container morphs by transform only (never width/height tweens) while keyed children counter-scale and re-flow onto their own measured targets as pure functions of time.
```html modal-morph.html theme={null}
Modal Morph
OPEN
DETAILS
```
## Install
That writes one file: `compositions/components/modal-morph.html`.
## Paste it into your composition
Open `compositions/components/modal-morph.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | ------------------------- | -------------------------------------------------------------------------------- |
| `from_scale` | `1` | number | Multiplies the authored card footprint, clamped 0.5 to 1.5. |
| `expand_at` | `1.2` | number | Seconds after mount when the card grows into the panel. |
| `register` | `calm` | `calm`, `snappy` | Morph feel. Snappy is faster with a settle capped at 1.02 of the target rect. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled panel holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Modal Morph
OPEN
DETAILS
```
Tagged `motion-primitive` `structure` `flip` `shared-element` `modal` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Morph Swap
Source: https://hyperframes.heygen.com/catalog/components/morph-swap
Two slotted siblings stacked at one shared center: A holds, then condenses or reshapes into B on a shared 50% 50% transform origin. Condense shrink-fades A exactly as B scales up; reshape morphs the silhouette on scaleX/scaleY, never width or height tweens. Token card defaults render when a slot is left empty.
```html morph-swap.html theme={null}
Morph Swap
```
## Install
That writes one file: `compositions/components/morph-swap.html`.
## Paste it into your composition
Open `compositions/components/morph-swap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ---------- | ------------------------- | --------------------------------------------------------------------------------------------------------- |
| `swap_at` | `1.4` | 0.1s to 8s, step 0.05s | Seconds after mount start when the morph begins. |
| `register` | `condense` | `condense`, `reshape` | Morph mechanic: condense shrink-fades A into B at center; reshape morphs the silhouette on scaleX/scaleY. |
| `accent` | `green` | `green`, `blue`, `violet` | Incoming card accent color. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the final frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Morph Swap
```
Tagged `transition` `morph` `swap` `condense` `reshape` `holdable` `slots`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Morph Text
Source: https://hyperframes.heygen.com/catalog/components/morph-text
Gooey text morph — cycles through an editable word list using SVG threshold + GSAP-driven blur for a fluid, satisfying transition effect
## Install
That writes one file: `compositions/components/morph-text.html`.
## Source
```html theme={null}
Morph Text
Do more with less.
Built for what's next.
Fast. Focused. Powerful.
Your work, amplified.
Start free today.
```
## Usage
Open `compositions/components/morph-text.html` and paste its contents into your composition.
Edit the `` list to change the statements that cycle through. Each `
` accepts `data-font` (CSS font-family) and `data-color` (hex) attributes. Adjust `data-morph-speed` (seconds per transition) and `data-morph-pause` (hold time) on the root element.
Tagged `text` `text-effect` `typography` `morph` `gooey` `kinetic` `animation`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Motion Blur
Source: https://hyperframes.heygen.com/catalog/components/motion-blur
Velocity-driven motion blur — samples element position each frame and applies a one-sided SVG feGaussianBlur ghost trail proportional to speed
## Install
That writes one file: `compositions/components/motion-blur.html`.
## Source
```html theme={null}
```
## Usage
Paste the snippet into your composition, then call `attachMotionBlur()` after your GSAP tweens and before registering `window.__timelines`.
```html theme={null}
tl.set(document.body, {}, DATA_DURATION);
attachMotionBlur("#my-box", tl, {
axis: "x", // "x" | "y" | "both"
blurMax: 40, // max blur radius in px (default 20)
});
window.__timelines = window.__timelines || {};
window.__timelines["my-composition"] = tl;
```
## How it works
Each target element gets its own SVG filter. On every timeline seek, `attachMotionBlur` samples the element's GSAP `x`/`y` position, computes velocity, and drives three SVG filter primitives:
1. **Ghost copies** — three faded, blurred copies of the element placed behind it at increasing offsets proportional to speed. Inherently one-sided: no forward blur.
2. **Top blur** — a small symmetric Gaussian at the current position so the element looks in-motion rather than crisp on top of the trail.
Blur scales linearly with velocity up to `blurMax`. Both the ghost trail and top blur clear automatically when the element decelerates to rest.
## Options
| Option | Default | Description |
| -------------- | -------- | --------------------------------------------------- |
| `axis` | `"both"` | Motion axis — `"x"`, `"y"`, or `"both"` |
| `blurScale` | `0.008` | Blur per px/s of velocity |
| `blurMax` | `20` | Max blur radius on the motion axis (px) |
| `stretchScale` | `0.0002` | scaleX/Y added per px/s (requires `stretchMax > 0`) |
| `stretchMax` | `0` | Max stretch above 1.0 — disabled by default |
Tagged `effect` `motion-blur` `velocity` `animation` `physics`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Multi Device Splay
Source: https://hyperframes.heygen.com/catalog/components/multi-device-splay
Phone, tablet, and desktop product mockups fan from a centered stack into a proud splayed arrangement with a subtle idle float.
```html multi-device-splay.html theme={null}
Multi Device Splay
```
## Install
That writes one file: `compositions/components/multi-device-splay.html`.
## Paste it into your composition
Open `compositions/components/multi-device-splay.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | ------------------------------------------------------ |
| `accent` | `blue` | `green`, `blue`, `violet` | Shared accent color used by all three product screens. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Multi Device Splay
```
Tagged `motion-primitive` `device` `phone` `tablet` `desktop` `splay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Multiplayer Cursors
Source: https://hyperframes.heygen.com/catalog/components/multiplayer-cursors
Labeled collaborator cursors with token-derived colors and soft glows drift from spread positions into a shared center zone, proving live multiplayer presence.
```html multiplayer-cursors.html theme={null}
Multiplayer Cursors
```
## Install
That writes one file: `compositions/components/multiplayer-cursors.html`.
## Paste it into your composition
Open `compositions/components/multiplayer-cursors.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ----------------- | -------------- | --------------------------------------- |
| `cursorCount` | `4` | 2 to 6, step 1 | Number of labeled collaborator cursors. |
| `labels` | `Ana,Ken,Wen,Mia` | string | Comma-separated cursor names, in order. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Multiplayer Cursors
```
Tagged `cursor` `pointer` `multiplayer` `collaboration` `presence` `loop` `prove`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Native Notification Pop
Source: https://hyperframes.heygen.com/catalog/components/native-notification-pop
One system-faithful notification banner (iOS or macOS) drops in over any scene on an accurate interruptible spring: fast arrival, soft overshoot, settled mass, backdrop blur, app dot, title, one body line. Holds; tucks away only via exit.
```html native-notification-pop.html theme={null}
Native Notification Pop
```
## Install
That writes one file: `compositions/components/native-notification-pop.html`.
## Paste it into your composition
Open `compositions/components/native-notification-pop.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------------------------------------ | ------------------------- | ---------------------------------------------------------------------------- |
| `title` | `Render complete` | string | The notification title line. |
| `body` | `launch-cut.mp4 is ready to preview` | string | One body line. Long lines truncate with an ellipsis. |
| `app_label` | `HyperFrames` | string | Small-caps app name row beside the app dot. |
| `os` | `ios` | `ios`, `macos` | Banner geometry and placement: wide centered iOS or compact top-right macOS. |
| `at` | `0.3` | 0s to 8s, step 0.05s | Seconds after mount start when the banner drops in. |
| `accent` | `green` | `green`, `blue`, `violet` | App dot color. |
| `exit` | `none` | `none`, `fade`, `up` | None holds the banner; up tucks it back off the top; fade fades it in place. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Native Notification Pop
```
Tagged `motion-primitive` `product-demo` `overlay` `notification` `spring`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Notes Typing
Source: https://hyperframes.heygen.com/catalog/components/notes-typing
The notes-app confession as a mountable scene: a bold title, then body lines typed character by character on the measured human keystroke rhythm, the caret riding every landed character and jumping down at each paragraph. For a bare prompt line use typed-prompt; for an even mechanical reveal use typewriter
```html notes-typing.html theme={null}
Notes Typing
Things nobody told me about video.
Aa
```
## Install
That writes one file: `compositions/components/notes-typing.html`.
## Paste it into your composition
Open `compositions/components/notes-typing.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does | | |
| -------- | ----------------------- | -------------------- | -------------------------------------------------------- | ------------------ | --------------------------------------------------- |
| `title` | \`Things nobody told me | about video.\` | string | Bold note title. A | breaks the line. |
| `lines` | \`my videos sucked | my tools cost \$\$\$ | and re-edits never end.\` | string | Pipe-separated body lines, typed one after another. |
| `speed` | `1` | 0.5 to 2, step 0.1 | Typing speed multiplier. 1 is the measured human rhythm. | | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Notes Typing
Things nobody told me about video.
Aa
```
Tagged `motion-primitive` `notes` `typing` `mock-ui` `vertical`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Notification Pileup
Source: https://hyperframes.heygen.com/catalog/components/notification-pileup
Mobile notification cards arrive faster and faster, each new alert pushing the existing stack downward into a dense, anxious tower.
```html notification-pileup.html theme={null}
Notification Pileup
```
## Install
That writes one file: `compositions/components/notification-pileup.html`.
## Paste it into your composition
Open `compositions/components/notification-pileup.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | ------------------ | ------------------------------------------------------------- |
| `count` | `7` | 4 to 10, step 1 | Number of notification cards in the final pile. |
| `speed` | `1` | 0.5 to 2, step 0.1 | Pacing multiplier for the accelerating notification arrivals. |
| `showBadges` | `yes` | `yes`, `no` | Show or hide unread count badges on the notification cards. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Notification Pileup
```
Tagged `notification` `mobile` `ui-props` `overload` `pileup` `loop` `agitate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Notification Stack
Source: https://hyperframes.heygen.com/catalog/components/notification-stack
1 to 5 token notification cards slide-settle into a vertical stack on cues, newest on top; one card grows slightly and brightens as the focus while the rest dim by position.
```html notification-stack.html theme={null}
Notification Stack
```
## Install
That writes one file: `compositions/components/notification-stack.html`.
## Paste it into your composition
Open `compositions/components/notification-stack.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ----------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------ |
| `titles` | `Build queued,Checks passed,Deploy live` | string | Comma-separated card titles (1 to 5 cards). |
| `bodies` | `Pipeline started for main,All 42 checks green,Now serving version 2.4` | string | Comma-separated body lines matched to titles by index. Blank entries hide that body line. |
| `expand` | `-1` | -1 to 4, step 1 | Index of the focus card in the titles list. -1 focuses the newest card (top of the stack). |
| `cues` | \`\` | string | Comma-separated per-card arrival times in seconds. Blank entries use the default rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used by the icon dots. |
| `exit` | `none` | `none`, `fade`, `up` | How the stack leaves the frame. Default none: the hold ends the film. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Notification Stack
```
Tagged `motion-primitive` `product-demo` `notification` `stack` `stagger`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Number Pop In
Source: https://hyperframes.heygen.com/catalog/components/number-pop-in
A transitions.dev-inspired digit pop-in with blur, lift, and staggered value reveal
```html number-pop-in.html theme={null}
5.7k
```
## Install
That writes one file: `compositions/components/number-pop-in.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `value` | `5.7` | string | The number itself. Every character becomes its own span, so the stagger still lands character by character. |
| `unit` | `k` | string | Small suffix printed after the number. Pass an empty string to drop it. |
| `lift` | `standard` | `close`, `standard`, `far` | Scales the offset the timeline drives, so the characters cover a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Number colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
5.7k
```
## Usage
Open `compositions/components/number-pop-in.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `number` `pop`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Number Wheel
Source: https://hyperframes.heygen.com/catalog/components/number-wheel
A rolling digit counter primitive for metrics, prices, counts, and scoreboards
```html number-wheel.html theme={null}
```
## Install
That writes one file: `compositions/components/number-wheel.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ---------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `spin` | `single` | `single`, `double`, `triple` | How many full 0 to 9 revolutions each column adds before it lands, which is how far the reel travels in the same time. |
| `spacing` | `standard` | `tight`, `standard`, `wide` | Gap between the digit columns. |
| `tone` | `inherit` | `inherit`, `ink`, `paper`, `accent` | Digit colour: inherit keeps the surrounding text colour, ink suits light frames, paper suits dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/number-wheel.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `number` `counter` `data`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Offset Path Traveler
Source: https://hyperframes.heygen.com/catalog/components/offset-path-traveler
A slotted traveler follows an authored path with tangent rotation, curved entry, and curved exit.
```html offset-path-traveler.html theme={null}
Offset Path Traveler
```
## Install
That writes one file: `compositions/components/offset-path-traveler.html`.
## Paste it into your composition
Open `compositions/components/offset-path-traveler.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | ---------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------ |
| `path` | `M -90 390 C 150 490 190 70 430 185 C 650 300 720 105 850 145 C 970 180 1030 85 1090 35` | string | SVG path data authored in a 1000 by 500 route viewBox. |
| `traveler_label` | `Live preview` | string | Text displayed inside the default traveler chip. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the traveler and route. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Offset Path Traveler
```
Tagged `motion-primitive` `product-demo` `path` `traveler` `auto-rotate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Onboarding Stepper Flow
Source: https://hyperframes.heygen.com/catalog/components/onboarding-stepper-flow
A composed onboarding flow with milestone rail, active step card, and next-action button
## Install
That writes one file: `compositions/components/onboarding-stepper-flow.html`.
## Source
```html theme={null}
123
Step 2 of 3
Choose your visual style
Pick a direction so the agent can generate matching motion primitives.
```
## Usage
Open `compositions/components/onboarding-stepper-flow.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `ui-flow` `onboarding` `stepper`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Ordered Dither Pass
Source: https://hyperframes.heygen.com/catalog/components/ordered-dither-pass
Bayer-matrix ordered dithering quantizes a slotted scene (rasterized once at mount): the image emerges from pure 2-tone noise to clean, or dissolves the reverse. Stateless per frame, never error diffusion.
```html ordered-dither-pass.html theme={null}
Ordered Dither Pass
```
## Install
That writes one file: `compositions/components/ordered-dither-pass.html`.
## Paste it into your composition
Open `compositions/components/ordered-dither-pass.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ------------------------- | -------------------------------------------------------------------------------------------------------- |
| `matrix` | `4` | `2`, `4`, `8` | Bayer matrix size: 2 is the coarsest crosshatch, 8 the smoothest ordered grain. |
| `direction` | `in` | `in`, `out` | in resolves noise to clean; out dissolves clean to noise and holds it. |
| `levels` | `2` | 2 to 6, step 1 | Quantization levels per color channel during the dithered phase. |
| `accent` | `green` | `green`, `blue`, `violet` | Light tone of the 2-tone noise phase: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the final state holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Ordered Dither Pass
```
Tagged `motion-primitive` `experiment` `texture` `dither` `transition` `quantize`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Outline Draw
Source: https://hyperframes.heygen.com/catalog/components/outline-draw
A rounded outline that proves a callout by drawing clockwise as a hollow conic-gradient border with a clean closure.
```html outline-draw.html theme={null}
Outline Draw
```
## Install
That writes one file: `compositions/components/outline-draw.html`.
## Paste it into your composition
Open `compositions/components/outline-draw.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | --------------------------------------- | ------------------------------------------------------ |
| `progress` | `100` | 0% to 100%, step 1% | Final percentage of the outline that is drawn. |
| `thickness` | `6` | 10.1cqw to 200.1cqw, step 10.1cqw | Outline stroke in tenths of the host width. |
| `radius` | `24` | 00.1cqmin to 800.1cqmin, step 10.1cqmin | Corner radius in tenths of the host smaller dimension. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Outline Draw
```
Tagged `motion-primitive` `effects` `outline` `border` `mask` `proof`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Oversized Cursor
Source: https://hyperframes.heygen.com/catalog/components/oversized-cursor
A deliberately oversized macOS-style pointer that enters off-screen, travels to a target, clicks to ignite a visible response, then exits
```html oversized-cursor.html theme={null}
Oversized Cursor
```
## Install
That writes one file: `compositions/components/oversized-cursor.html`.
## Paste it into your composition
Open `compositions/components/oversized-cursor.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | ---------- | -------------------- | -------------------------------------------------------------------------------------------- |
| `cursor_variant` | `light` | `light`, `dark` | |
| `target_x` | `55` | 15% to 85%, step 1% | |
| `target_y` | `55` | 15% to 85%, step 1% | |
| `click_label` | `Generate` | string | |
| `exit` | `none` | `none`, `fade`, `up` | Optional whole-stage departure. Default none: the ignited target stays until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Oversized Cursor
```
Tagged `motion-primitive` `actor` `cursor` `pointer` `interaction`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Overwhelm Surround
Source: https://hyperframes.heygen.com/catalog/components/overwhelm-surround
Tasks, tabs, pings, and notification bubbles accelerate inward around a calm central subject, turning overload into visible spatial pressure.
```html overwhelm-surround.html theme={null}
Overwhelm Surround
```
## Install
That writes one file: `compositions/components/overwhelm-surround.html`.
## Paste it into your composition
Open `compositions/components/overwhelm-surround.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------- | ------------------ | ----------------------------------------------------------- |
| `count` | `16` | 8 to 24, step 1 | Number of tasks and notifications crowding the center. |
| `centerLabel` | `You` | string | Text inside the calm central subject. Blank hides the text. |
| `intensity` | `1` | 0.5 to 2, step 0.1 | How tightly and quickly the chips crowd the center. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Overwhelm Surround
```
Tagged `effects` `agitate` `overwhelm` `pressure` `notifications`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Page Slide
Source: https://hyperframes.heygen.com/catalog/components/page-slide
A transitions.dev-inspired page slide primitive with outgoing and incoming panels
```html page-slide.html theme={null}
DashboardAnalytics
```
## Install
That writes one file: `compositions/components/page-slide.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ----------- | ------------------------- | ---------------------------------------------------------------------------- |
| `label_a` | `Dashboard` | string | Label printed on the page that slides out. |
| `label_b` | `Analytics` | string | Label printed on the page that slides in. |
| `accent` | `green` | `green`, `blue`, `violet` | Gradient family painted on the incoming page. The outgoing page stays slate. |
| `corner` | `round` | `square`, `soft`, `round` | Corner radius of the frame the pages slide inside. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
DashboardAnalytics
```
## Usage
Open `compositions/components/page-slide.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `page` `slide`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Pan Stations
Source: https://hyperframes.heygen.com/catalog/components/pan-stations
A lateral camera move across a continuous row of labeled feature stations, with a steady dwell at each stop before the next pan.
```html pan-stations.html theme={null}
Pan Stations
```
## Install
That writes one file: `compositions/components/pan-stations.html`.
## Paste it into your composition
Open `compositions/components/pan-stations.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | --------------------------- | --------------------- | -------------------------------------------------------- |
| `stationCount` | `4` | 3 to 6, step 1 | Number of feature stations in the row. |
| `labels` | `Capture,Edit,Render,Share` | string | Comma-separated labels shown on the station cards. |
| `dwell` | `0.6` | 0.2s to 2s, step 0.1s | Seconds the camera holds at each station before panning. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Pan Stations
```
Tagged `camera` `pan` `stations` `features` `exhibit` `agitate` `cross-shelved`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Panel Reveal
Source: https://hyperframes.heygen.com/catalog/components/panel-reveal
A panel reveal primitive with height expansion and content fade
```html panel-reveal.html theme={null}
Motion tokens
Duration 420ms
Easing power3.out
```
## Install
That writes one file: `compositions/components/panel-reveal.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------- | ---------------------------- | --------------------------------------------------------------------------------------------------- |
| `title` | `Motion tokens` | string | The header line that sits above the folded body. |
| `width` | `standard` | `narrow`, `standard`, `wide` | How wide the panel sits, 280, 360 or 480 px. |
| `tone` | `paper` | `paper`, `ink` | Surface family: paper is the white card for light frames, ink inverts it for dark frames. |
| `reveal` | `fade` | `fade`, `solid` | Whether the body fades in with the height. fade is the shipped motion, solid opens the height only. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Motion tokens
Duration 420ms
Easing power3.out
```
## Usage
Open `compositions/components/panel-reveal.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition-primitive` `transitions-dev-port` `panel` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Parallax Device Dive
Source: https://hyperframes.heygen.com/catalog/components/parallax-device-dive
A canonical phone rises into view before the camera pushes through its screen and layered app UI expands to fill the frame.
```html parallax-device-dive.html theme={null}
Parallax Device Dive
Overview
HF
Weekly activity
24.8k +18%
Conversion
8.4%
Active users
12,604
```
## Install
That writes one file: `compositions/components/parallax-device-dive.html`.
## Paste it into your composition
Open `compositions/components/parallax-device-dive.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ----------- | ------------------------- | ------------------------------------------- |
| `accent` | `blue` | `green`, `blue`, `violet` | Highlight color used throughout the app UI. |
| `app_title` | `Dashboard` | string | Title displayed in the app header. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Parallax Device Dive
Overview
HF
Weekly activity
24.8k +18%
Conversion
8.4%
Active users
12,604
```
Tagged `motion-primitive` `camera` `device` `phone` `parallax` `transition`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Parallax Unzoom
Source: https://hyperframes.heygen.com/catalog/components/parallax-unzoom
Reveal transition — focus card scales down from full frame as siblings parallax in to form a grid (reverse of parallax-zoom)
## Install
That writes one file: `compositions/components/parallax-unzoom.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/parallax-unzoom.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition` `reveal` `unzoom` `parallax` `grid` `hero`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Parallax Zoom
Source: https://hyperframes.heygen.com/catalog/components/parallax-zoom
Center card scales up to fill the frame while siblings parallax outward — inspired by the eBay Playbook hero transition
## Install
That writes one file: `compositions/components/parallax-zoom.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/parallax-zoom.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition` `zoom` `parallax` `grid` `hero`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Particle Image Reveal
Source: https://hyperframes.heygen.com/catalog/components/particle-image-reveal
A seeded deterministic particle field converges and settles while a slotted image reveals beneath it, the trail thinning until the image holds clean.
```html particle-image-reveal.html theme={null}
Particle Image Reveal
H
```
## Install
That writes one file: `compositions/components/particle-image-reveal.html`.
## Paste it into your composition
Open `compositions/components/particle-image-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ------------------------- | ----------------------------------------------------------------------------------------------- |
| `density` | `med` | `low`, `med`, `high` | Particle count for the converging field. |
| `direction` | `ltr` | `ltr`, `center` | ltr sweeps the reveal left to right; center opens an iris from the middle outward. |
| `accent` | `green` | `green`, `blue`, `violet` | Particle and monogram color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the revealed image holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Particle Image Reveal
H
```
Tagged `motion-primitive` `intros-reveals` `particles` `reveal` `canvas` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Particle Text Dissolve
Source: https://hyperframes.heygen.com/catalog/components/particle-text-dissolve
Text assembles from a seeded particle cloud (or dissolves into it): per-particle targets sampled once from the rendered text bitmap at mount, table-driven particles, zero per-particle tweens, one onUpdate painter.
```html particle-text-dissolve.html theme={null}
Particle Text Dissolve
```
## Install
That writes one file: `compositions/components/particle-text-dissolve.html`.
## Paste it into your composition
Open `compositions/components/particle-text-dissolve.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `text` | `Dissolve` | string | The line that assembles from (or dissolves into) the particle cloud. |
| `direction` | `in` | `in`, `out` | in assembles the text from the cloud and holds it crisp; out erases the text into the cloud and holds empty. |
| `density` | `med` | `low`, `med`, `high` | Particle count cap for the field. |
| `accent` | `green` | `green`, `blue`, `violet` | Text and particle color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the end state holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Particle Text Dissolve
```
Tagged `motion-primitive` `text-effects` `particles` `canvas` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Per-Word Crossfade
Source: https://hyperframes.heygen.com/catalog/components/per-word-crossfade
Words gently fade into place with a short vertical drift for calm keynote rhythm.
```html per-word-crossfade.html theme={null}
Createoncereuseeverywhere
```
## Install
That writes one file: `compositions/components/per-word-crossfade.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------------------------------ | --------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `text` | `Create once reuse everywhere` | string | The line to animate. It is split on whitespace and every word gets its own span, so the stagger picks up the new words. |
| `drift` | `standard` | `close`, `standard`, `far` | Scales the vertical offset, so the words cover a shorter or longer run in the same time. |
| `blur` | `standard` | `soft`, `standard`, `heavy` | Scales the blur radius the timeline drives, from a light haze to a full smear. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Createoncereuseeverywhere
```
## Usage
Open `compositions/components/per-word-crossfade.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Per Word Rise
Source: https://hyperframes.heygen.com/catalog/components/per-word-rise
Words or characters rise into place in a controlled blur-to-sharp cascade, settle softly on landing, and hold still until the cut (optional fade or up exit).
```html per-word-rise.html theme={null}
Per Word Rise
```
## Install
That writes one file: `compositions/components/per-word-rise.html`.
## Paste it into your composition
Open `compositions/components/per-word-rise.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ----------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `text` | `WORDS IN MOTION` | string | Text whose words or characters rise into place. |
| `split` | `word` | `word`, `char` | Animate the text as words or individual characters. |
| `cues` | \`\` | string | Comma-separated seconds (from mount start) for each unit landing. Empty keeps the authored cascade rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract accent token used for the text color. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the line holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Per Word Rise
```
Tagged `motion-primitive` `text-effects` `typography` `stagger` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Perspective Marquee
Source: https://hyperframes.heygen.com/catalog/components/perspective-marquee
A 3D tilted marquee with depth feel as items roll toward the horizon.
```html perspective-marquee.html theme={null}
```
## Install
That writes one file: `compositions/components/perspective-marquee.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------- |
| `tilt` | `standard` | `flat`, `standard`, `steep` | How far the marquee plane leans back toward the horizon. |
| `travel` | `standard` | `short`, `standard`, `long` | Scales the offset the timeline drives, so the strip covers a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Pill colour: ink for light frames, paper for dark ones, accent rides the brand token. |
| `words` | `COMPONENTS, PRIMITIVES, TRANSITIONS, AGENTS` | string | Comma separated pill labels. The list is laid down twice so the strip still reads as a continuous loop. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/perspective-marquee.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Physical Exit
Source: https://hyperframes.heygen.com/catalog/components/physical-exit
A card exits with physical momentum in toss, drop, or slide mode, carrying acceleration and rotation through the final offscreen pose without fading.
```html physical-exit.html theme={null}
Physical Exit
```
## Install
That writes one file: `compositions/components/physical-exit.html`.
## Paste it into your composition
Open `compositions/components/physical-exit.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | --------------------------------------------------- |
| `mode` | `toss` | `toss`, `drop`, `slide` | Physical behavior used to carry the card offscreen. |
| `text` | `Later` | string | Word displayed on the exiting card. |
| `accent` | `green` | `green`, `blue`, `violet` | Color applied to the card edge. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Physical Exit
```
Tagged `motion-primitive` `exit` `momentum` `toss` `drop` `slide`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Press Ripple
Source: https://hyperframes.heygen.com/catalog/components/press-ripple
A cursor decel-arrives from off-stage, lands slightly off-center on a caller-positioned target, compresses with it in lockstep, releases with ink ripple rings, then exits off-stage while the pressed state holds.
```html press-ripple.html theme={null}
Press Ripple
```
## Install
That writes one file: `compositions/components/press-ripple.html`.
## Paste it into your composition
Open `compositions/components/press-ripple.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------------- | ------------------------- | --------------------------------------------------- |
| `label` | `Get started` | string | Text inside the default pill target. |
| `target_x` | `50` | 8% to 92%, step 1% | Zone center, percent of host width. |
| `target_y` | `50` | 8% to 92%, step 1% | Zone center, percent of host height. |
| `press_at` | `1.4` | 0.9s to 10s, step 0.1s | Seconds from mount start when the press begins. |
| `cursor` | `light` | `light`, `dark` | Pointer tone. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract color for the ripple ink and pressed fill. |
| `exit` | `none` | `none`, `fade`, `up` | How the frame leaves. None holds the pressed state. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Press Ripple
```
Tagged `motion-primitive` `product-demo` `cursor` `press` `ripple` `payoff`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Pull Back Reveal
Source: https://hyperframes.heygen.com/catalog/components/pull-back-reveal
A tight stat detail holds, then one decelerating camera pull-back reveals the headline and supporting cards that recontextualize it.
```html pull-back-reveal.html theme={null}
Pull Back Reveal
Net growth
Across every active workspace
Retention
94%
Teams
48
```
## Install
That writes one file: `compositions/components/pull-back-reveal.html`.
## Paste it into your composition
Open `compositions/components/pull-back-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------------ | ------------------------- | ---------------------------------------------------------- |
| `detail_text` | `+312%` | string | Stat shown in the detail chip at the center of the reveal. |
| `headline` | `Growth compounds` | string | Headline revealed around the focused detail. |
| `accent` | `green` | `green`, `blue`, `violet` | Highlight color used across the composed scene. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Pull Back Reveal
Net growth
Across every active workspace
Retention
94%
Teams
48
```
Tagged `motion-primitive` `camera` `pull-back` `reveal` `recontextualize`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Pull to Refresh
Source: https://hyperframes.heygen.com/catalog/components/pull-to-refresh
A mobile list pulls through nonlinear rubber-band resistance, arms at a threshold, commits to a bounded loading indicator, then snaps exactly back to rest.
```html pull-to-refresh.html theme={null}
Pull to Refresh
Pull to refreshRelease to refreshRefreshing
Activity
Updated now
Search activity
AL
Alex shared a draft
Launch sequence, ready for review
Now
MK
Mika left feedback
Three comments on the new flow
4m
NO
Noah published an update
Mobile preview is available
18m
SR
Sara joined the project
Workspace access granted
1h
```
## Install
That writes one file: `compositions/components/pull-to-refresh.html`.
## Paste it into your composition
Open `compositions/components/pull-to-refresh.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ------- | ----------------------- | ---------------------------------------------------------- |
| `pullDistance` | `120` | 60 to 220, step 5 | Raw pull distance before nonlinear rubber-band resistance. |
| `spinnerStyle` | `ring` | `arrow`, `dots`, `ring` | Refresh indicator geometry and loading motion. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Pull to Refresh
Pull to refreshRelease to refreshRefreshing
Activity
Updated now
Search activity
AL
Alex shared a draft
Launch sequence, ready for review
Now
MK
Mika left feedback
Three comments on the new flow
4m
NO
Noah published an update
Mobile preview is available
18m
SR
Sara joined the project
Workspace access granted
1h
```
Tagged `pointer` `pointers` `mobile` `gesture` `interaction` `refresh` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Push In
Source: https://hyperframes.heygen.com/catalog/components/push-in
A centered headline gains focus through one slow, continuous camera push and a gentle fade out.
```html push-in.html theme={null}
Push In
```
## Install
That writes one file: `compositions/components/push-in.html`.
## Paste it into your composition
Open `compositions/components/push-in.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ---------------------------- | --------------------------------------- |
| `text` | `Focus` | string | Text centered in the camera frame. |
| `intensity` | `standard` | `subtle`, `standard`, `bold` | Final camera scale reached by the push. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Push In
```
Tagged `motion-primitive` `camera` `push-in` `focus` `emphasize` `holdable`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Radial Surround
Source: https://hyperframes.heygen.com/catalog/components/radial-surround
Labeled hairline chips assemble around a centered subject on an elliptical ring, then optionally converge inward with a subtle edge dim. The center never moves: surrounded, not zoomed.
```html radial-surround.html theme={null}
Radial Surround
```
## Install
That writes one file: `compositions/components/radial-surround.html`.
## Paste it into your composition
Open `compositions/components/radial-surround.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------ |
| `center_label` | `Your team` | string | Label on the default center token card. |
| `chips` | `Docs,Tickets,Dashboards,Inbox,Chat,Sheets` | string | Comma-separated chip labels that surround the center (up to 12). |
| `close_in` | `true` | boolean | Converge the ring inward with a subtle edge dim after assembly. The center never moves. |
| `cues` | \`\` | string | Comma-separated per-chip entrance times in seconds. Blank entries use the default cascade. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used by the center card tint. |
| `exit` | `none` | `none`, `fade`, `up` | How the surrounded stage leaves the frame. Default none: the crowded hold ends the film. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Radial Surround
```
Tagged `motion-primitive` `problem-setup` `radial` `ring` `surround` `converge`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# RGB Glitch Text
Source: https://hyperframes.heygen.com/catalog/components/rgb-glitch-text
RGB-offset text copies jitter briefly for a controlled glitch window.
```html rgb-glitch-text.html theme={null}
GLITCHGLITCHGLITCH
```
## Install
That writes one file: `compositions/components/rgb-glitch-text.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `text` | `GLITCH` | string | The word shown on all three stacked copies. |
| `intensity` | `standard` | `subtle`, `standard`, `extreme` | Scales the red and cyan offsets the timeline drives, so the split reads as a hairline or a hard tear. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Colour of the solid copy the two ghosts split away from: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
GLITCHGLITCHGLITCH
```
## Usage
Open `compositions/components/rgb-glitch-text.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Rubber Band Bumper
Source: https://hyperframes.heygen.com/catalog/components/rubber-band-bumper
An outgoing panel pulls against increasing resistance, holds at tension, then snaps past an edge with overshoot as the incoming panel settles behind it.
```html rubber-band-bumper.html theme={null}
Rubber Band Bumper
NEXT
Clean release
The incoming scene settles behind the snap.
CURRENT
Hold the tension
Each pull travels less as resistance builds.
```
## Install
That writes one file: `compositions/components/rubber-band-bumper.html`.
## Paste it into your composition
Open `compositions/components/rubber-band-bumper.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ------------------------- | ------------------------------------------------------ |
| `direction` | `up` | `up`, `left` | Edge the outgoing panel releases through. |
| `accent` | `green` | `green`, `blue`, `violet` | Color applied to the tension bands and incoming panel. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Rubber Band Bumper
NEXT
Clean release
The incoming scene settles behind the snap.
CURRENT
Hold the tension
Each pull travels less as resistance builds.
```
Tagged `motion-primitive` `transition` `rubber-band` `resistance` `overshoot`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scan Band
Source: https://hyperframes.heygen.com/catalog/components/scan-band
A diagonal distortion band sweeps once across a clean wordmark, revealing clipped red and cyan offsets only inside the moving band.
```html scan-band.html theme={null}
Scan Band
```
## Install
That writes one file: `compositions/components/scan-band.html`.
## Paste it into your composition
Open `compositions/components/scan-band.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------- | -------------------------- | ------------------------------------------------- |
| `wordmark` | `HYPERFRAMES` | string | Text displayed by the scan effect. |
| `band_angle` | `12` | -30deg to 30deg, step 1deg | Diagonal angle of the distortion band in degrees. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Scan Band
```
Tagged `motion-primitive` `typography` `scan` `chromatic` `distortion` `wordmark`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scramble Reveal
Source: https://hyperframes.heygen.com/catalog/components/scramble-reveal
A deterministic hacker-style text reveal that cycles fixed glyph rows and locks the target string from left to right.
```html scramble-reveal.html theme={null}
Scramble Reveal
>_
```
## Install
That writes one file: `compositions/components/scramble-reveal.html`.
## Paste it into your composition
Open `compositions/components/scramble-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------------- | ------------------------- | ------------------------------------------------------------------------------- |
| `text` | `HYPERFRAMES` | string | Target string that resolves from deterministic wrong glyphs. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the text, prefix, and optional terminal frame. |
| `style` | `terminal` | `terminal`, `clean` | Terminal frame or clean text-only presentation. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the locked string holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Scramble Reveal
>_
```
Tagged `motion-primitive` `text-effects` `scramble` `reveal` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Screen Flow Carousel
Source: https://hyperframes.heygen.com/catalog/components/screen-flow-carousel
Two to five app screens ride a horizontal rail: one primary at center, neighbors receded, advancing on cues with a velocity-matched throw and a smooth long-tail catch while a mono caption swaps with each advance. Screens are slots with token skeleton defaults.
```html screen-flow-carousel.html theme={null}
Screen Flow Carousel
```
## Install
That writes one file: `compositions/components/screen-flow-carousel.html`.
## Paste it into your composition
Open `compositions/components/screen-flow-carousel.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | ------------------------- | ------------------------------------------------------------------------------------------------------ |
| `screens` | `3` | 2 to 5, step 1 | How many screens ride the rail. |
| `captions` | \`\` | string | Comma-separated caption per screen. Blank entries use the authored defaults. |
| `cues` | \`\` | string | Comma-separated advance times in seconds from mount start. Blank entries use the authored even rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Token the active ring, caption dot, and skeleton accents ride. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the final screen holds until the cut. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Screen Flow Carousel
```
Tagged `product-demo` `feature-tour` `carousel` `rail` `slot` `screens`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scroll Camera Story
Source: https://hyperframes.heygen.com/catalog/components/scroll-camera-story
A compressed forced-scroll cinematic pass: a tall scene of slotted sections travels past the camera top to bottom, depth layers parallax at different rates, each section rises as the camera reaches it, and the pass decelerates into a held final section.
```html scroll-camera-story.html theme={null}
Scroll Camera Story
01
02
03
04
>_
```
## Install
That writes one file: `compositions/components/scroll-camera-story.html`.
## Paste it into your composition
Open `compositions/components/scroll-camera-story.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `sections` | `3` | 2 to 4, step 1 | How many skeleton sections ride the pass. A sections slot overrides this with its own child count. |
| `travel` | `220` | 100cqh to 400cqh, step 10cqh | Total camera travel in cqh. The world is 100 + travel cqh tall. |
| `cues` | \`\` | string | Comma-separated seconds: arrival times for the sections after the first. Empty keeps the authored default rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Token the skeleton accents and foreground motes ride. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. None holds the final section. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Scroll Camera Story
01
02
03
04
>_
```
Tagged `camera` `scroll` `parallax` `story` `sections` `slot` `servo`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Scroll Feed
Source: https://hyperframes.heygen.com/catalog/components/scroll-feed
A loop-friendly column of varied skeleton post cards scrolls upward with subtle motion trails and an agitated pace.
```html scroll-feed.html theme={null}
Scroll Feed
```
## Install
That writes one file: `compositions/components/scroll-feed.html`.
## Paste it into your composition
Open `compositions/components/scroll-feed.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `speed` | `doom` | `doom`, `frantic` | Pace of the upward feed movement. |
| `card_count` | `6` | 4 to 10, step 1 | Number of skeleton posts in one repeated feed cycle. |
| `cues` | \`\` | string | Comma-separated seconds (from mount start); each cue advances the feed by one card. Empty synthesizes evenly spaced flicks, one per card. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the feed scrolls until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Scroll Feed
```
Tagged `motion-primitive` `effects` `scroll` `feed` `loop` `agitation`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Segmentation Flood
Source: https://hyperframes.heygen.com/catalog/components/segmentation-flood
Machine-vision read of a slotted subject: translucent accent segmentation masks flood on in quantized scanline steps, each region gets a thin bracket and mono label chip, a deterministic 2-frame HUD flicker rides the pass, then the labeled read settles clean.
```html segmentation-flood.html theme={null}
Segmentation Flood
```
## Install
That writes one file: `compositions/components/segmentation-flood.html`.
## Paste it into your composition
Open `compositions/components/segmentation-flood.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `regions` | `Figure, Signal, Ground` | string | Comma-separated region labels; 2 to 4 are used, one translucent mask + bracket + mono chip each. |
| `flood_at` | `0.8` | number | Seconds from mount start when the segmentation pass begins. Clamped so the pass and any exit stay inside the clip. |
| `flicker` | `on` | `on`, `off` | Deterministic 2-frame HUD luminance toggle riding the flood pass. |
| `accent` | `green` | `green`, `blue`, `violet` | Mask, bracket, and chip color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the labeled read holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Segmentation Flood
```
Tagged `motion-primitive` `product-demo` `ai` `hud` `canvas` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Separator
Source: https://hyperframes.heygen.com/catalog/components/separator
A one-pixel structural separator with horizontal and vertical variants plus a seek-safe progress reveal
```html separator.html theme={null}
```
## Install
That writes one file: `compositions/components/separator.html`.
## Paste it into your composition
Open `compositions/components/separator.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------ | ------------------------------ | -------------------------------------------------------------------------------- |
| `orientation` | `horizontal` | `horizontal`, `vertical` | Which way the rule runs, and so which way the reveal travels. |
| `thickness` | `hairline` | `hairline`, `medium`, `bold` | Size of the rule across its short edge, from a 1px hairline to a 4px bar. |
| `tone` | `neutral` | `neutral`, `accent`, `warning` | Colour of the revealed fill: neutral grey, the theme accent, or the warning hue. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
Tagged `video-primitive` `separator` `layout`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Settings Toggle Flow
Source: https://hyperframes.heygen.com/catalog/components/settings-toggle-flow
A composed settings flow with preference rows, toggle switches, and active-state feedback
## Install
That writes one file: `compositions/components/settings-toggle-flow.html`.
## Source
```html theme={null}
Auto captionsGenerate timed captions
Brand kitApply saved colors
Sound effectsLayer subtle UI sounds
```
## Usage
Open `compositions/components/settings-toggle-flow.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `ui-flow` `settings` `toggle`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Shared Axis Y
Source: https://hyperframes.heygen.com/catalog/components/shared-axis-y
Per-word vertical shared-axis transition for sharp editorial swaps.
```html shared-axis-y.html theme={null}
PlanDebugAsk
```
## Install
That writes one file: `compositions/components/shared-axis-y.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | -------------------------- | ---------------------------------------------------------------------------------------- |
| `direction` | `up` | `up`, `down` | Which side of the baseline the words travel in from. |
| `distance` | `standard` | `close`, `standard`, `far` | Scales the vertical offset, so the words cover a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
PlanDebugAsk
```
## Usage
Open `compositions/components/shared-axis-y.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Shared Axis Z
Source: https://hyperframes.heygen.com/catalog/components/shared-axis-z
Scale-based shared-axis transition for focus shifts and context depth.
```html shared-axis-z.html theme={null}
Zoomcontext
```
## Install
That writes one file: `compositions/components/shared-axis-z.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `direction` | `in` | `in`, `out` | Which way the words travel along the z axis: in swells up from small, out settles down from large. |
| `depth` | `standard` | `shallow`, `standard`, `deep` | Scales how far the words start from their final size, so the push covers a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Zoomcontext
```
## Usage
Open `compositions/components/shared-axis-z.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Sheet Spring-Up
Source: https://hyperframes.heygen.com/catalog/components/sheet-spring-up
A bottom sheet rushes up from below the frame on a real spring sampled frame by frame from reference footage, overshooting its resting place and settling back without an approximated ease
```html sheet-spring-up.html theme={null}
Share
Sheet content goes here.
```
## Install
That writes one file: `compositions/components/sheet-spring-up.html`.
## Paste it into your composition
Open `compositions/components/sheet-spring-up.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------ | -------------------------------------------------------------------------- |
| `width` | `668` | 400px to 900px, step 4px | Sheet width in pixels. |
| `radius` | `34` | 16px to 48px, step 1px | Sheet corner radius. |
| `tone` | `light` | `light`, `dark` | Light is the reference near-white sheet; dark is the raised surface token. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Share
Sheet content goes here.
```
Tagged `video-primitive` `sheet` `spring` `mock-ui` `overlay`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Shimmer Sweep
Source: https://hyperframes.heygen.com/catalog/components/shimmer-sweep
Animated light sweep across text or elements using a CSS gradient mask — ideal for AI accents and premium reveals
## Install
That writes one file: `compositions/components/shimmer-sweep.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/shimmer-sweep.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `text` `shimmer` `highlight` `effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Signup Flow
Source: https://hyperframes.heygen.com/catalog/components/signup-flow
A composed signup flow with social action, email field, password field, and submit button
## Install
That writes one file: `compositions/components/signup-flow.html`.
## Source
```html theme={null}
Create account
or
email@company.com
Password
```
## Usage
Open `compositions/components/signup-flow.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `ui-flow` `signup` `form`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Simulated Cursor
Source: https://hyperframes.heygen.com/catalog/components/simulated-cursor
A lightweight cursor pointer and click pulse for product walkthroughs and agent UI demos
```html simulated-cursor.html theme={null}
```
## Install
That writes one file: `compositions/components/simulated-cursor.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `size` | `44` | 20px to 120px, step 2px | Height and width of the pointer in pixels. The click ring scales with it. Values outside the range clamp to the nearest end and anything that is not a number falls back to 44. |
| `tone` | `light` | `light`, `dark`, `accent` | Pointer fill and click ring colour: light reads on dark screens, dark reads on light ones, accent rides --hf-ui-accent. |
| `pulse` | `standard` | `subtle`, `standard`, `bold`, `none` | Weight of the ring the click animation expands: subtle is a thin small ring, bold a thick wide one, none removes the ring entirely. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/simulated-cursor.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `cursor` `ui` `walkthrough`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Skeleton Reveal
Source: https://hyperframes.heygen.com/catalog/components/skeleton-reveal
A skeleton loader transition that pulses, then cross-fades into content
```html skeleton-reveal.html theme={null}
Jane Cooperjane@example.com
```
## Install
That writes one file: `compositions/components/skeleton-reveal.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------------------ | --------------- | ---------------------------------------------------------------------------------------------------------- |
| `name` | `Jane Cooper` | string | Primary line revealed once the skeleton fades out. |
| `detail` | `jane@example.com` | string | Secondary line under the name, such as an email or a role. |
| `tone` | `light` | `light`, `dark` | Card palette. Light is the paper card, dark is a near-black card with the matching skeleton bars and text. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Jane Cooperjane@example.com
```
## Usage
Open `compositions/components/skeleton-reveal.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `skeleton` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Slit Scan Reveal
Source: https://hyperframes.heygen.com/catalog/components/slit-scan-reveal
The frame's rows sample an authored subject at offset times: a canvas painter draws row slices of one pure position function evaluated at t minus offset(row), smearing arrival through time until the offsets collapse to zero and the mark holds coherent.
```html slit-scan-reveal.html theme={null}
Slit Scan Reveal
```
## Install
That writes one file: `compositions/components/slit-scan-reveal.html`.
## Paste it into your composition
Open `compositions/components/slit-scan-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `axis` | `rows` | `rows`, `cols` | rows smears arrival across horizontal slices; cols across vertical slices. |
| `spread` | `0.45` | number | Maximum sampling offset in seconds across the frame; larger smears further through time. |
| `resolve_at` | `2.2` | number | Seconds from mount start when the offsets start collapsing to zero. Clamped so the collapse and any exit stay inside the clip. |
| `accent` | `green` | `green`, `blue`, `violet` | Subject ring and orbit color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the resolved mark holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Slit Scan Reveal
```
Tagged `motion-primitive` `time` `slit-scan` `canvas` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Slot Machine Roll
Source: https://hyperframes.heygen.com/catalog/components/slot-machine-roll
A vertical reel scrolls characters from one value to another.
```html slot-machine-roll.html theme={null}
0 A0 70 K
```
## Install
That writes one file: `compositions/components/slot-machine-roll.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `result` | `A7K` | string | Characters the reels land on, one reel column per character. Whitespace is stripped and every reel starts on a zero. |
| `direction` | `up` | `up`, `down` | Which way the reels roll: up lifts the zero out through the top, down drops it out through the bottom. |
| `size` | `standard` | `small`, `standard`, `large` | Reel height and type size. The roll distance scales with it so the reel always lands exactly one row on. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Character colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
0 A0 70 K
```
## Usage
Open `compositions/components/slot-machine-roll.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Social Proof Card
Source: https://hyperframes.heygen.com/catalog/components/social-proof-card
The app-store close as one mountable scene: wordmark, five stars, a proof line, three feature icons and a CTA capsule build in a quiet stagger and hold - measured from reference ad footage. For an animated star sweep use star-rating-fill; for a quote card use testimonial-proof-card; for a bare lockup use cta-lockup
```html social-proof-card.html theme={null}
Social Proof Card
HyperFrames
12,000+ creators
Start rendering free
```
## Install
That writes one file: `compositions/components/social-proof-card.html`.
## Paste it into your composition
Open `compositions/components/social-proof-card.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does | | |
| -------- | ---------------------- | --------------- | ---------------------------------- | --------------- | ---------------- |
| `brand` | `HyperFrames` | string | Wordmark at the top of the card. | | |
| `proof` | `12,000+ creators` | string | Social-proof line under the stars. | | |
| `cta` | `Start rendering free` | string | Label on the closing capsule. | | |
| `f1` | \`Write | plain HTML\` | string | First feature, | breaks the line. |
| `f2` | \`Render | pixel-perfect\` | string | Second feature, | breaks the line. |
| `f3` | \`Own | every line\` | string | Third feature, | breaks the line. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Social Proof Card
HyperFrames
12,000+ creators
Start rendering free
```
Tagged `motion-primitive` `social-proof` `end-card` `cta` `vertical`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Soft Blob Touch
Source: https://hyperframes.heygen.com/catalog/components/soft-blob-touch
A granular soft blob idles with slow internal drift; a scripted touch dot decel-arrives, the blob deforms toward it with an attraction bulge, then recovers with a velocity-preserving spring. No hard edges anywhere.
```html soft-blob-touch.html theme={null}
Soft Blob Touch
```
## Install
That writes one file: `compositions/components/soft-blob-touch.html`.
## Paste it into your composition
Open `compositions/components/soft-blob-touch.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | ------------------------- | ------------------------------------------------------------------------------ |
| `touch_x` | `66` | 8% to 92%, step 1% | Touch point, percent of host width. |
| `touch_y` | `38` | 8% to 92%, step 1% | Touch point, percent of host height. |
| `touch_at` | `1.6` | 0.9s to 10s, step 0.1s | Seconds from mount start when the dot makes contact. |
| `grain` | `fine` | `fine`, `coarse` | Speck register for the granular body. |
| `accent` | `green` | `green`, `blue`, `violet` | Body tint: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled blob holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Soft Blob Touch
```
Tagged `motion-primitive` `product-demo` `material` `blob` `touch` `grain`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Soft Blur In
Source: https://hyperframes.heygen.com/catalog/components/soft-blur-in
A soft opacity, blur, and lift reveal for headlines, captions, and product UI callouts
```html soft-blur-in.html theme={null}
```
## Install
That writes one file: `compositions/components/soft-blur-in.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | --------------------------- | -------------------------------------------------------------------------------------------------- |
| `distance` | `standard` | `close`, `standard`, `far` | How far the element is offset before it slides home: 14px, 28px or 52px. |
| `direction` | `up` | `up`, `down` | up starts the element below its resting place so it rises in, down starts it above so it drops in. |
| `blur` | `standard` | `soft`, `standard`, `heavy` | Starting blur radius, from a light haze to a full smear. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/soft-blur-in.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `text` `reveal` `blur`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Split Tilt Cards
Source: https://hyperframes.heygen.com/catalog/components/split-tilt-cards
Two equal-weight cards arrive from opposite wings with mirrored rotateY book-open tilts under one shared perspective, pill badges spring-pop at each inner edge, and the pair holds with a barely-there phase-opposed idle float. Card bodies are content slots with token skeleton defaults.
```html split-tilt-cards.html theme={null}
Split Tilt Cards
```
## Install
That writes one file: `compositions/components/split-tilt-cards.html`.
## Paste it into your composition
Open `compositions/components/split-tilt-cards.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | -------- | ------------------------- | ---------------------------------------------------------------------------- |
| `label_a` | `Before` | string | Mono header on the left card. Blank hides it. |
| `label_b` | `After` | string | Mono header on the right card. Blank hides it. |
| `badge_a` | `v1` | string | Pill badge that spring-pops at the left card inner edge. Blank disables it. |
| `badge_b` | `v2` | string | Pill badge that spring-pops at the right card inner edge. Blank disables it. |
| `accent` | `green` | `green`, `blue`, `violet` | Right-card tint, right badge, and right ambient glow color. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. None holds the final spread. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Split Tilt Cards
```
Tagged `motion-primitive` `layout` `compare` `holdable` `book-open` `tilt` `slots`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spotlight Card
Source: https://hyperframes.heygen.com/catalog/components/spotlight-card
A card with a scripted cursor spotlight and lit border.
## Install
That writes one file: `compositions/components/spotlight-card.html`.
## Source
```html theme={null}
Spotlight Card
A card with a scripted cursor spotlight and lit border.
```
## Usage
Open `compositions/components/spotlight-card.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spring Pop
Source: https://hyperframes.heygen.com/catalog/components/spring-pop
A badge pops in from a visible near-rest scale, overshoots full size once, and settles cleanly.
```html spring-pop.html theme={null}
Spring Pop
```
## Install
That writes one file: `compositions/components/spring-pop.html`.
## Paste it into your composition
Open `compositions/components/spring-pop.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ---------------------- | ----------------------------------------------- |
| `overshoot` | `1.7` | 1.1 to 2, step 0.1 | Strength passed to the back.out entrance curve. |
| `fromScale` | `0.9` | 0.8 to 0.97, step 0.01 | Scale at the start of the entrance. |
| `text` | `New` | string | Text displayed inside the badge. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Spring Pop
```
Tagged `motion-primitive` `effects` `spring` `overshoot` `pop` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Spring Stack Shuffle
Source: https://hyperframes.heygen.com/catalog/components/spring-stack-shuffle
A stack of 3 to 5 slotted cards reshuffles on cues: the back card throws over the top and lands at the front with real mass, the rest compress and resettle; cues that land mid-flight redirect the moving cards with velocity preserved.
```html spring-stack-shuffle.html theme={null}
Spring Stack Shuffle
01
02
03
04
05
```
## Install
That writes one file: `compositions/components/spring-stack-shuffle.html`.
## Paste it into your composition
Open `compositions/components/spring-stack-shuffle.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cards` | `4` | 3 to 5, step 1 | Number of cards in the stack, 3 to 5. |
| `cues` | `0.9, 1.7, 1.95` | string | Comma-separated seconds from mount start; each cue throws the back card to the front. Cues inside a running throw redirect it mid-flight, velocity preserved. Empty keeps the default rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Active-card ring color from the contract token map. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled stack holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Spring Stack Shuffle
01
02
03
04
05
```
Tagged `motion-primitive` `product-demo` `physics` `stack` `interruptible-spring`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Stagger Cascade
Source: https://hyperframes.heygen.com/catalog/components/stagger-cascade
A responsive grid of tile cards that fades and travels into place with an evenly spaced per-item GSAP stagger. The ordered cascade is the only visual mechanic.
```html stagger-cascade.html theme={null}
Stagger Cascade
```
## Install
That writes one file: `compositions/components/stagger-cascade.html`.
## Paste it into your composition
Open `compositions/components/stagger-cascade.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ----------------------------- | ------------------------------------------------------ |
| `itemCount` | `6` | 3 to 12, step 1 | Number of tiles in the responsive grid. |
| `stagger` | `60` | 20ms to 150ms, step 1ms | Delay between consecutive tile entrances. |
| `direction` | `up` | `up`, `down`, `left`, `right` | Direction each tile travels into its resting position. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Stagger Cascade
```
Tagged `effects` `grid` `stagger` `entrance` `exhibit`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Stagger Lattice
Source: https://hyperframes.heygen.com/catalog/components/stagger-lattice
A staggered grid reveal inspired by Anime.js v4 stagger utilities, implemented with GSAP for HyperFrames.
## Install
That writes one file: `compositions/components/stagger-lattice.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/stagger-lattice.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `advanced-motion` `anime-inspired` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Staggered Fade Up
Source: https://hyperframes.heygen.com/catalog/components/staggered-fade-up
Words fade in and slide up one after another with configurable delay.
```html staggered-fade-up.html theme={null}
Staggeredfadeup
```
## Install
That writes one file: `compositions/components/staggered-fade-up.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------------------- | ----------------------------- | -------------------------------------------------------------------------------------- |
| `direction` | `up` | `up`, `down`, `left`, `right` | Where the offset the timeline drives points. |
| `distance` | `standard` | `close`, `standard`, `far` | Scales the travel offset, so the words cover a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Word colour: ink for light frames, paper for dark ones, accent rides --brand. |
| `words` | `Staggered fade up` | string | The words themselves, split on spaces, one span and one stagger step each. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Staggeredfadeup
```
## Usage
Open `compositions/components/staggered-fade-up.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Star Rating Fill
Source: https://hyperframes.heygen.com/catalog/components/star-rating-fill
A token-driven star row whose colored layer sweeps to a rating, preserves the fractional final star, and can count the value in sync.
```html star-rating-fill.html theme={null}
Star Rating Fill
0.0
```
## Install
That writes one file: `compositions/components/star-rating-fill.html`.
## Paste it into your composition
Open `compositions/components/star-rating-fill.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ---------------- | --------------------------------------------- |
| `rating` | `4.8` | 0 to 5, step 0.1 | Target rating in star units from 0 to 5. |
| `starCount` | `5` | 1 to 10, step 1 | Number of stars shown in the row. |
| `showValue` | `yes` | `yes`, `no` | Show or hide the synchronized numeric rating. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Star Rating Fill
0.0
```
Tagged `data` `rating` `stars` `fractional` `fill` `prove`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# State Chip Rail
Source: https://hyperframes.heygen.com/catalog/components/state-chip-rail
A rail of mono status chips advances a seek-safe data-state snap machine on a cue schedule: active chip ink on surface, done chips dim, pending chips hollow, optional badges pop beside one state.
```html state-chip-rail.html theme={null}
State Chip Rail
```
## Install
That writes one file: `compositions/components/state-chip-rail.html`.
## Paste it into your composition
Open `compositions/components/state-chip-rail.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | ------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `states` | `Queued,Reading,Drafting,Done` | string | Comma-separated chip labels in machine order (2 to 8 states). |
| `times` | \`\` | string | Comma-separated activation times in seconds, one per advance (state 1 onward). Blank entries use the default even rhythm. |
| `badge_state` | `1` | 0 to 7, step 1 | Index of the state the badges pop beside. |
| `badges` | \`\` | string | Comma-separated badge labels shown beside the badge state. Empty disables. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent token family used by the active chip. |
| `exit` | `none` | `none`, `fade`, `up` | How the rail leaves the frame. Default none: the hold ends the film. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
State Chip Rail
```
Tagged `motion-primitive` `product-demo` `state-machine` `status` `chips` `rail`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Sticky Mock Swap
Source: https://hyperframes.heygen.com/catalog/components/sticky-mock-swap
A pinned product mock cross-fades through accent-tinted feature states while matching captions rise, hold, and exit beside it.
```html sticky-mock-swap.html theme={null}
Sticky Mock Swap
```
## Install
That writes one file: `compositions/components/sticky-mock-swap.html`.
## Paste it into your composition
Open `compositions/components/sticky-mock-swap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | --------------------------------------------- | ------------------------- | -------------------------------------------------------------- |
| `captions` | `Instant previews,Zero config,Ship on Friday` | string | Comma-separated feature captions shown beside the pinned mock. |
| `accent` | `violet` | `green`, `blue`, `violet` | Accent tint used across the mock states. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Sticky Mock Swap
```
Tagged `motion-primitive` `product-demo` `sticky` `mock` `crossfade` `feature-tour`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Stitched Text Draw
Source: https://hyperframes.heygen.com/catalog/components/stitched-text-draw
Text drawn as thread stitches: a single-stroke display alphabet draws via attribute-driven dashoffset with stitch-tuned dash patterns, seeded angle jitter, needle-hole dots, a leading needle, and a thread-tail overshoot per letter.
```html stitched-text-draw.html theme={null}
Stitched Text Draw
```
## Install
That writes one file: `compositions/components/stitched-text-draw.html`.
## Paste it into your composition
Open `compositions/components/stitched-text-draw.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | -------- | ------------------------- | -------------------------------------------------------------------------------- |
| `text` | `STITCH` | string | Uppercased A-Z 0-9 and space, clamped to 12 characters. |
| `stitch` | `fine` | `fine`, `coarse` | Dash/gap scale, thread width, and jitter amplitude. |
| `accent` | `green` | `green`, `blue`, `violet` | Thread color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the stitched word holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Stitched Text Draw
```
Tagged `motion-primitive` `experiment` `type` `craft` `stitch` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Stop Motion Cadence
Source: https://hyperframes.heygen.com/catalog/components/stop-motion-cadence
The stepped-time law as a demo primitive: one driver quantizes timeline time to floor(t * fps) / fps and feeds ALL motion; four token paper-cut shapes throw-and-land with squash on hits, 2-frame boil jitter seeded per step, and sparkle accents living exactly 2 to 3 frames.
```html stop-motion-cadence.html theme={null}
Stop Motion Cadence
```
## Install
That writes one file: `compositions/components/stop-motion-cadence.html`.
## Paste it into your composition
Open `compositions/components/stop-motion-cadence.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ------------------------- | ------------------------------------------------------------------------------------ |
| `fps` | `10` | `8`, `10`, `12` | Stepped-time cadence in frames per second. |
| `boil` | `on` | `on`, `off` | 2-frame edge jitter, seeded per step. Off holds dead still. |
| `accent` | `green` | `green`, `blue`, `violet` | Lead shape color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the settled collage holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Stop Motion Cadence
```
Tagged `motion-primitive` `time-law` `stop-motion` `stepped` `boil` `deterministic` `experiment`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Store Badge Lockup
Source: https://hyperframes.heygen.com/catalog/components/store-badge-lockup
Settles a short headline above equal-size App Store and Google Play badges as a token-driven mobile end-card call to action.
```html store-badge-lockup.html theme={null}
Store Badge Lockup
ADownload on theApp Store
GET IT ONGoogle Play
```
## Install
That writes one file: `compositions/components/store-badge-lockup.html`.
## Paste it into your composition
Open `compositions/components/store-badge-lockup.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------- | ----------- | ----------------------------------------------- |
| `headline` | `Get the app` | string | Short action line shown above the store badges. |
| `showApple` | `yes` | `yes`, `no` | Show or hide the App Store badge. |
| `showGoogle` | `yes` | `yes`, `no` | Show or hide the Google Play badge. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Store Badge Lockup
ADownload on theApp Store
GET IT ONGoogle Play
```
Tagged `prop` `ui-props` `mobile` `store-badges` `cta` `ask`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Streaming Text
Source: https://hyperframes.heygen.com/catalog/components/streaming-text
Words arrive the way an AI answer streams - in uneven bursts on a measured token rhythm, each word landing grey and inking to full colour - rather than the even tick of a typewriter
```html streaming-text.html theme={null}
```
## Install
That writes one file: `compositions/components/streaming-text.html`.
## Paste it into your composition
Open `compositions/components/streaming-text.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------- | -------------------------------- | ------------------------------------------------------------------------ |
| `size` | `27` | 18px to 64px, step 1px | Type size of the streamed words. |
| `tone` | `dark-on-light` | `dark-on-light`, `light-on-dark` | Ink pair: dark words on a light ground, or light words on a dark ground. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
Tagged `video-primitive` `text-effect` `ai` `chat`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Strikethrough Replace
Source: https://hyperframes.heygen.com/catalog/components/strikethrough-replace
Draw a strike line across old text, then reveal the replacement.
```html strikethrough-replace.html theme={null}
SlowFast
```
## Install
That writes one file: `compositions/components/strikethrough-replace.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ---------- | -------------------------------- | ------------------------------------------------------------------------ |
| `origin` | `left` | `left`, `center`, `right` | Edge the strike grows out of as the timeline runs its scale from 0 to 1. |
| `thickness` | `standard` | `thin`, `standard`, `thick` | Height of the strike line, from a hairline rule to a heavy bar. |
| `tint` | `red` | `red`, `amber`, `blue`, `violet` | Strike colour. Blue and violet ride --accent and --accent-2. |
| `tone` | `ink` | `ink`, `paper` | Colour of both words: ink for light frames, paper for dark ones. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
SlowFast
```
## Usage
Open `compositions/components/strikethrough-replace.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Success Check
Source: https://hyperframes.heygen.com/catalog/components/success-check
A success check primitive with ring pop, path draw, and subtle rotate blur
```html success-check.html theme={null}
```
## Install
That writes one file: `compositions/components/success-check.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `tint` | `green` | `green`, `blue`, `violet`, `amber` | Colour pair, a pale halo behind a saturated mark. green and amber are literal state colours; blue and violet ride the composition theme tokens. |
| `size` | `standard` | `small`, `standard`, `large` | Diameter of the halo and of the mark inside it. |
| `ring` | `standard` | `subtle`, `standard`, `bold` | Opacity of the circle the tick sits in. |
| `spin` | `standard` | `subtle`, `standard`, `bold` | Multiplies the rotation the timeline drives, so the mark swings less or more into place. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/success-check.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `success` `check`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# SVG Line Draw Loader
Source: https://hyperframes.heygen.com/catalog/components/svg-line-draw-loader
An Anime.js-style path drawing loader implemented as a seekable GSAP stroke timeline.
## Install
That writes one file: `compositions/components/svg-line-draw-loader.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/svg-line-draw-loader.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `video-primitive` `advanced-motion` `anime-inspired` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# SVG Mask Reveal
Source: https://hyperframes.heygen.com/catalog/components/svg-mask-reveal
A soft token-colored sweep reveals media only through an editable SVG wordmark mask.
```html svg-mask-reveal.html theme={null}
SVG Mask Reveal
```
## Install
That writes one file: `compositions/components/svg-mask-reveal.html`.
## Paste it into your composition
Open `compositions/components/svg-mask-reveal.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------------- | -------- | ---------------------- | -------------------------------------- |
| `text` | `REVEAL` | string | Text used as the SVG mask window. |
| `revealProgress` | `100` | 0% to 100%, step 1% | Final revealed width of the wordmark. |
| `featherPx` | `24` | 0px to 120px, step 1px | Softness of the traveling reveal edge. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
SVG Mask Reveal
```
Tagged `effect` `svg` `mask` `wordmark` `reveal` `exhibit`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# SVG Stroke Trace
Source: https://hyperframes.heygen.com/catalog/components/svg-stroke-trace
An authored SVG path draws from its measured length, holds with subtle drift, and optionally fills when the path is closed.
```html svg-stroke-trace.html theme={null}
SVG Stroke Trace
```
## Install
That writes one file: `compositions/components/svg-stroke-trace.html`.
## Paste it into your composition
Open `compositions/components/svg-stroke-trace.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------- |
| `path` | `M 92 328 C 178 142 292 138 366 276 C 430 396 500 414 558 262 C 622 94 724 112 786 274 C 836 406 894 376 930 194` | string | SVG path data for the authored mark. |
| `stroke_width` | `12` | 2 to 32, step 1 | Width of the traced stroke in SVG viewBox units. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by the trace and optional fill. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the finished mark holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
SVG Stroke Trace
```
Tagged `motion-primitive` `intro` `reveal` `svg` `stroke` `line-draw`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Swipe Rail
Source: https://hyperframes.heygen.com/catalog/components/swipe-rail
A contact circle leads a horizontal card rail through a fast drag, momentum carry, and settled snap to the next card.
```html swipe-rail.html theme={null}
Swipe Rail
```
## Install
That writes one file: `compositions/components/swipe-rail.html`.
## Paste it into your composition
Open `compositions/components/swipe-rail.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------------- | --------- | ------------------------- | --------------------------------------------------------- |
| `card_count` | `4` | 3 to 5, step 1 | Number of cards rendered in the rail. |
| `accent` | `green` | `green`, `blue`, `violet` | Active color used by the focused card and contact circle. |
| `card_label_prefix` | `Feature` | string | Text placed before each card number. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Swipe Rail
```
Tagged `motion-primitive` `interaction` `gesture` `swipe` `cards` `rail`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Tabs Slide Indicator
Source: https://hyperframes.heygen.com/catalog/components/tabs-slide-indicator
A pill indicator transition that slides between active tabs
```html tabs-slide-indicator.html theme={null}
```
## Install
That writes one file: `compositions/components/tabs-slide-indicator.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `accent` | `ink` | `ink`, `green`, `blue`, `violet` | Fill of the sliding pill. ink is literal; the rest ride the composition theme tokens. |
| `width` | `standard` | `compact`, `standard`, `wide` | Width of one tab. The slide the timeline drives is scaled to match, so the pill still lands on the next tab. |
| `shape` | `pill` | `pill`, `rounded`, `square` | Corner radius of the track and the pill. |
| `labels` | `Plan,Debug,Ask` | string | The tab names, separated by commas. Two or more names rebuild the row. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/tabs-slide-indicator.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `transition-primitive` `transitions-dev-port` `tabs` `indicator`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Telemetry HUD
Source: https://hyperframes.heygen.com/catalog/components/telemetry-hud
Quiet mono debug-HUD readouts frame a slotted subject: corner brackets draw on, label:value lines tick their values on cues, one readout emphasized in accent. The subject never moves; the HUD breathes zero.
```html telemetry-hud.html theme={null}
Telemetry HUD
```
## Install
That writes one file: `compositions/components/telemetry-hud.html`.
## Paste it into your composition
Open `compositions/components/telemetry-hud.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ----------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `readouts` | `fps:59.94,latency:11.8 ms,gpu:38%,heap:1.2 GB` | string | Comma-separated label:value pairs, up to 8. The first colon splits label from value. |
| `emphasize` | `0` | -1 to 7, step 1 | Index of the readout rendered in the accent color. -1 disables. |
| `cues` | \`\` | string | Comma-separated seconds relative to mount start; cue N starts readout N value tick. Empty uses the authored rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Color of the emphasized readout. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. Frame roots own transitions; none holds the end frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Telemetry HUD
```
Tagged `motion-primitive` `product-demo` `hud` `telemetry` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Terminal Simulator
Source: https://hyperframes.heygen.com/catalog/components/terminal-simulator
A terminal window types commands and streams log output.
## Install
That writes one file: `compositions/components/terminal-simulator.html`.
## Source
```html theme={null}
Terminal Simulator
index.html style.css timeline.js
$ hyperframes render --skill=terminal-simulator
```
## Usage
Open `compositions/components/terminal-simulator.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `code-animation`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Testimonial Card
Source: https://hyperframes.heygen.com/catalog/components/testimonial-card
Reveals a customer quote at reading pace, then settles its avatar, author name, and handle beneath as a clean proof beat.
```html testimonial-card.html theme={null}
Testimonial Card
★★★★★
★★★★★5 / 5
```
## Install
That writes one file: `compositions/components/testimonial-card.html`.
## Paste it into your composition
Open `compositions/components/testimonial-card.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------------------- | ---------------- | ---------------------------------------------------- |
| `quote` | `This changed how we ship.` | string | Customer testimonial copy revealed at reading pace. |
| `author` | `Ken Tanaka` | string | Name attributed to the testimonial. |
| `handle` | `@ken` | string | Role or social handle shown beneath the author name. |
| `rating` | `5` | 0 to 5, step 0.1 | Visible customer rating from zero to five stars. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Testimonial Card
★★★★★
★★★★★5 / 5
```
Tagged `prop` `ui-props` `testimonial` `social-proof` `quote` `prove`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Testimonial Proof Card
Source: https://hyperframes.heygen.com/catalog/components/testimonial-proof-card
A quote card whose testimonial reveals per-line through a soft mask, with an avatar disc (initials default, image slot), mono name and role, an optional company text mark, and one emphasis substring underlined in accent ink after the quote lands.
```html testimonial-proof-card.html theme={null}
Testimonial Proof Card
“
```
## Install
That writes one file: `compositions/components/testimonial-proof-card.html`.
## Paste it into your composition
Open `compositions/components/testimonial-proof-card.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | --------------------------------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `quote` | `We shipped our launch video in a single afternoon` | string | The testimonial line. Wraps inside the card; each rendered line reveals through its own mask. |
| `name` | `Maya Chen` | string | Attribution name in mono. Also seeds the avatar initials. |
| `role` | `Head of Product` | string | Attribution role in muted mono. Empty hides the line. |
| `company` | `NORTHWIND` | string | Company mark as wide-tracked mono text at the byline end. Empty hides it. |
| `emphasis` | `single afternoon` | string | First case-insensitive substring match in quote, expanded to whole words, gets the accent underline. Empty disables the draw. |
| `accent` | `green` | `green`, `blue`, `violet` | Underline and glyph ink from the contract token map. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the card holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Testimonial Proof Card
“
```
Tagged `motion-primitive` `proof` `testimonial` `quote` `social-proof` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Text Shimmer
Source: https://hyperframes.heygen.com/catalog/components/text-shimmer
A static headline receives one clean specular gradient sweep through its glyphs, then returns to its ordinary text color.
```html text-shimmer.html theme={null}
Text Shimmer
```
## Install
That writes one file: `compositions/components/text-shimmer.html`.
## Paste it into your composition
Open `compositions/components/text-shimmer.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------------ | ------------------------- | ------------------------------------------- |
| `text` | `Effortless` | string | Text receiving the single shimmer pass. |
| `accent` | `green` | `green`, `blue`, `violet` | Hue of the specular shimmer band. |
| `sweep_at` | `1.2` | 0.2s to 2s, step 0.1s | Requested start time for the shimmer sweep. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Text Shimmer
```
Tagged `motion-primitive` `text-effects` `shimmer` `specular` `emphasis`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Text Stagger
Source: https://hyperframes.heygen.com/catalog/components/text-stagger
A transitions.dev-inspired text stagger primitive with enter, shimmer, and exit-ready words
```html text-stagger.html theme={null}
Buildmotionsystemsfast
```
## Install
That writes one file: `compositions/components/text-stagger.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------------------- | ------------------------- | ------------------------------------------------------------------------------------- |
| `text` | `Build motion systems fast` | string | Headline copy. Every whitespace-separated word becomes one staggered span. |
| `size` | `74` | 24px to 160px, step 1px | Type size of every word in pixels, clamped to 24-160. Line height stays proportional. |
| `tone` | `ink` | `ink`, `paper` | Base word colour: ink for light frames, paper for dark ones. |
| `accent` | `blue` | `blue`, `green`, `violet` | Colour of the shimmer the second timeline step sweeps across the words. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Buildmotionsystemsfast
```
## Usage
Open `compositions/components/text-stagger.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `text` `stagger`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Text State Swap
Source: https://hyperframes.heygen.com/catalog/components/text-state-swap
A text state swap primitive with outgoing blur and incoming lift
```html text-state-swap.html theme={null}
Saving draftSaved
```
## Install
That writes one file: `compositions/components/text-state-swap.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | -------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `from-text` | `Saving draft` | string | The outgoing label, on screen before the swap. |
| `to-text` | `Saved` | string | The incoming label, on screen after the swap. It rests hidden until the timeline reveals it. |
| `distance` | `standard` | `close`, `standard`, `far` | Scales the vertical offset the timeline drives, so each label covers a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Label colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Saving draftSaved
```
## Usage
Open `compositions/components/text-state-swap.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `text` `swap`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Texture Mask Text
Source: https://hyperframes.heygen.com/catalog/components/texture-mask-text
CSS luminance masks that cut holes through letterforms - 66 pre-built texture masks from ambientCG PBR color maps
Brick
BRICK
Rock
ROCK
Ground 103
GROUND
Wood
WOOD
Metal
METAL
Lava
LAVA
## Install
That writes `compositions/components/texture-mask-text/texture-mask-text.html`, plus 66 supporting files under `assets/texture-mask-text/masks/`.
## Source
```html theme={null}
```
## Ask an agent for it
Paste this to your coding agent:
```text theme={null}
Use the Texture Mask Text catalog component.
1. From the project root, run:
npx hyperframes add texture-mask-text
2. That command creates this installed snippet:
compositions/components/texture-mask-text/texture-mask-text.html
3. Open that file and paste the real
```
## Usage
Open `compositions/components/three-orbiting-cards.html` and paste its contents into your composition. The comment header describes the timeline integration and any optional dependency setup.
Tagged `video-primitive` `three-js` `webgl` `hyperframes-native`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Ticker Takeover
Source: https://hyperframes.heygen.com/catalog/components/ticker-takeover
A mono ticker rolls through options, locks on a final word with an accent flash, and promotes it into a full-frame headline.
```html ticker-takeover.html theme={null}
Ticker Takeover
signal
```
## Install
That writes one file: `compositions/components/ticker-takeover.html`.
## Paste it into your composition
Open `compositions/components/ticker-takeover.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------------------------------ | ------------------------- | ------------------------------------------------ |
| `options` | `faster,smarter,together,everywhere` | string | Comma-separated words shown by the ticker. |
| `final_word` | `together` | string | Word the ticker locks on and promotes. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used for the lock flash and promoted word. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Ticker Takeover
signal
```
Tagged `motion-primitive` `typography` `ticker` `slot-machine` `headline` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Tilt Card
Source: https://hyperframes.heygen.com/catalog/components/tilt-card
A transitions.dev-inspired tilt card primitive with depth layers and hover-style parallax
```html tilt-card.html theme={null}
PrimitiveAgent-ready motion
```
## Install
That writes one file: `compositions/components/tilt-card.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | -------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `eyebrow` | `Primitive` | string | Small uppercase kicker above the headline. |
| `headline` | `Agent-ready motion` | string | Large card headline. |
| `glow` | `standard` | `tight`, `standard`, `wide` | How far the corner glow reaches past the card edges, which sets both its spread at rest and how far the timeline drift carries it. |
| `accent` | `indigo` | `indigo`, `emerald`, `violet` | Colour family of the card gradient, corner glow, eyebrow and drop shadow. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
PrimitiveAgent-ready motion
```
## Usage
Open `compositions/components/tilt-card.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `transition-primitive` `transitions-dev-port` `card` `tilt`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Titlecard Calm
Source: https://hyperframes.heygen.com/catalog/components/titlecard-calm
A restrained title card where a mono kicker and generous grotesque headline fade upward, drift almost imperceptibly, and exit cleanly.
```html titlecard-calm.html theme={null}
Titlecard Calm
```
## Install
That writes one file: `compositions/components/titlecard-calm.html`.
## Paste it into your composition
Open `compositions/components/titlecard-calm.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------------------ | ------- | --------------------------------------------------- |
| `headline` | `Less, but better` | string | Primary title displayed in the card. |
| `kicker` | `DESIGN PRINCIPLE` | string | Small uppercase label displayed above the headline. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Titlecard Calm
```
Tagged `motion-primitive` `typography` `title-card` `calm` `orient`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Titlecard Lockup
Source: https://hyperframes.heygen.com/catalog/components/titlecard-lockup
The calm breather titlecard: an optional mono kicker fades up, the wordmark settles dead-center with one restrained move, a hairline rule draws left to right, a mono label fades beneath, and the lockup holds truly still.
```html titlecard-lockup.html theme={null}
Titlecard Lockup
```
## Install
That writes one file: `compositions/components/titlecard-lockup.html`.
## Paste it into your composition
Open `compositions/components/titlecard-lockup.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | --------------------------- | ------------------------- | ------------------------------------------------------------------------ |
| `wordmark` | `HYPERFRAMES` | string | Display wordmark that settles dead-center. |
| `label` | `WRITE HTML. RENDER VIDEO.` | string | Mono caption under the rule. Empty hides it. |
| `kicker` | `INTRODUCING` | string | Small mono label above the wordmark. Empty hides it. |
| `rule` | `show` | `show`, `hide` | Hairline rule drawn left to right under the wordmark. |
| `accent` | `green` | `green`, `blue`, `violet` | Contract color carried by the hairline rule. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Frame roots own transitions, so none is the default. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Titlecard Lockup
```
Tagged `motion-primitive` `typography` `title-card` `lockup` `breather` `orient`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Toggle Flip
Source: https://hyperframes.heygen.com/catalog/components/toggle-flip
An oversized UI toggle switch that flips with real physicality: thumb overshoot, track color crossfade, and a soft press-compress before release. The reference prop of the ui-props family.
```html toggle-flip.html theme={null}
Toggle Flip
```
## Install
That writes one file: `compositions/components/toggle-flip.html`.
## Paste it into your composition
Open `compositions/components/toggle-flip.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ----------- | ------------------- | -------------------------------------------------------- |
| `direction` | `on` | `on`, `off` | Target end state the flip lands on. |
| `label` | `Auto-save` | string | Optional caption under the toggle. Blank hides the line. |
| `size` | `40` | 20% to 70%, step 1% | Toggle width as a percent of the host box width. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Toggle Flip
```
Tagged `prop` `ui-props` `toggle` `interaction` `reference-prop` `demonstrate`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Top-Down Letters
Source: https://hyperframes.heygen.com/catalog/components/top-down-letters
Letters descend from above in a pronounced staircase with zero blur.
```html top-down-letters.html theme={null}
CASCADE
```
## Install
That writes one file: `compositions/components/top-down-letters.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------- |
| `text` | `CASCADE` | string | Word that cascades in. Every character becomes one letter span, in source order. |
| `distance` | `standard` | `close`, `standard`, `far` | Multiplies the drop the timeline drives, so the letters cover a shorter or longer run in the same time. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Letter colour: ink for light frames, paper for dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
CASCADE
```
## Usage
Open `compositions/components/top-down-letters.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Touch Indicator
Source: https://hyperframes.heygen.com/catalog/components/touch-indicator
A translucent contact-circle gesture actor for mobile UI scenes: it touches the glass, causes a same-frame response, and lifts. Tap or swipe, picked by variable.
```html touch-indicator.html theme={null}
Touch Indicator
```
## Install
That writes one file: `compositions/components/touch-indicator.html`.
## Paste it into your composition
Open `compositions/components/touch-indicator.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | --------------- | ------------ |
| `gesture` | `tap` | `tap`, `swipe` | |
| `polarity` | `light` | `light`, `dark` | |
| `targetX` | `50` | 0% to 100% | |
| `targetY` | `55` | 0% to 100% | |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Touch Indicator
```
Tagged `motion-primitive` `mobile` `gesture` `touch` `pointer`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Tracing Beam
Source: https://hyperframes.heygen.com/catalog/components/tracing-beam
A glowing dash follows one SVG path through three UI elements, lifting and brightening each element in sequence.
```html tracing-beam.html theme={null}
Tracing Beam
01
Step one
02
Step two
03
Step three
```
## Install
That writes one file: `compositions/components/tracing-beam.html`.
## Paste it into your composition
Open `compositions/components/tracing-beam.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ----------------------- | ------------------------- | ------------------------------------------------- |
| `labels` | `Search,Preview,Export` | string | Three comma-separated labels shown in path order. |
| `accent` | `cyan` | `cyan`, `violet`, `amber` | Beam and active-element color. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Tracing Beam
01
Step one
02
Step two
03
Step three
```
Tagged `motion-primitive` `product-demo` `attention` `beam` `path` `spotlight`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Tracking In
Source: https://hyperframes.heygen.com/catalog/components/tracking-in
A precise letter-spacing reveal for premium headings and interface labels
```html tracking-in.html theme={null}
```
## Install
That writes one file: `compositions/components/tracking-in.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ---------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `tracking` | `standard` | `tight`, `standard`, `wide` | Multiplies the letter-spacing the timeline drives, so the reveal starts and settles proportionally wider or tighter. |
| `rise` | `standard` | `subtle`, `standard`, `bold` | Vertical offset the text starts from, which the timeline reads as the start of its travel and eases to zero. |
| `tone` | `inherit` | `inherit`, `ink`, `paper`, `accent` | Text colour: inherit keeps the surrounding page colour, ink suits light frames, paper dark ones, accent rides --brand. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
## Usage
Open `compositions/components/tracking-in.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `motion-primitive` `text` `reveal` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Trust Strip
Source: https://hyperframes.heygen.com/catalog/components/trust-strip
A monochrome trust row of wide-tracked mono wordmarks that fade in with an opacity-only left-to-right stagger, then hold dead still.
```html trust-strip.html theme={null}
Trust Strip
```
## Install
That writes one file: `compositions/components/trust-strip.html`.
## Paste it into your composition
Open `compositions/components/trust-strip.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------- |
| `marks` | `Northwind, Acme Corp, Globex, Initech, Umbra` | string | Comma-separated wordmark texts (3 to 7 recommended). |
| `tone` | `muted` | `muted`, `ink` | Mark color: quiet muted or full-contrast ink. |
| `cues` | \`\` | string | Comma-separated reveal starts in seconds from mount start. Empty uses the authored 0.15s stagger. |
| `accent` | `green` | `green`, `blue`, `violet` | Faint palette tint mixed into the mark color. |
| `exit` | `none` | `none`, `fade`, `up` | End-of-clip behavior. None holds to the last frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Trust Strip
```
Tagged `motion-primitive` `proof` `trust` `logo-strip` `wordmarks`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Type Match Cut
Source: https://hyperframes.heygen.com/catalog/components/type-match-cut
A headline splits vertically around an incoming panel, which grows from the negative space and takes the frame as the words exit through opposite edges.
```html type-match-cut.html theme={null}
Type Match Cut
New editorReady
▶
```
## Install
That writes one file: `compositions/components/type-match-cut.html`.
## Paste it into your composition
Open `compositions/components/type-match-cut.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | --------------------- | ------------------------- | ----------------------------------------------- |
| `text` | `Meet the new editor` | string | Text split around the incoming panel. |
| `accent` | `green` | `green`, `blue`, `violet` | Accent color used by the incoming editor scene. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Type Match Cut
New editorReady
▶
```
Tagged `motion-primitive` `transition` `typography` `match-cut` `continuity`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Typed Prompt
Source: https://hyperframes.heygen.com/catalog/components/typed-prompt
A prompt line types itself in chunked human cadence behind a deterministic blinking caret, with optional backspace-and-retype correction of the final word.
```html typed-prompt.html theme={null}
Typed Prompt
```
## Install
That writes one file: `compositions/components/typed-prompt.html`.
## Paste it into your composition
Open `compositions/components/typed-prompt.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------------- | --------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `text` | `Generate a product launch video` | string | The prompt that gets typed. |
| `prompt_glyph` | `>` | string | Leading glyph before the typed line. Empty string hides it. |
| `cadence` | `human` | `uniform`, `human` | Keystroke rhythm: uniform fixed steps or seeded human chunks. |
| `caret` | `blink` | `blink`, `solid` | Blink runs integer sine cycles during typing then goes solid. |
| `correction` | \`\` | string | Mistyped word typed in place of the final word, then backspaced and corrected. Empty disables. |
| `cues` | \`\` | string | Comma-separated seconds relative to mount start; cue N anchors the start of word N. Empty uses the authored rhythm. |
| `accent` | `green` | `green`, `blue`, `violet` | Color of the prompt glyph and caret. |
| `exit` | `none` | `none`, `fade`, `up` | Outgoing transition. Frame roots own transitions; none holds the end frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Typed Prompt
```
Tagged `motion-primitive` `product-demo` `typing` `prompt` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Typewriter
Source: https://hyperframes.heygen.com/catalog/components/typewriter
Character-by-character text reveal with a deterministic blinking cursor.
```html typewriter.html theme={null}
hyperframes add typewriter
```
## Install
That writes one file: `compositions/components/typewriter.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ---------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------- |
| `text` | `hyperframes add typewriter` | string | Line that types itself out character by character. |
| `tone` | `ink` | `ink`, `paper`, `accent` | Colour of the text and the caret: ink for light frames, paper for dark ones, accent rides --brand. |
| `caret` | `line` | `line`, `block`, `none` | Caret shape: a thin rule, a terminal-style block, or no caret at all. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
hyperframes add typewriter
```
## Usage
Open `compositions/components/typewriter.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `video-primitive` `motion-primitive` `typography`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Typing Indicator
Source: https://hyperframes.heygen.com/catalog/components/typing-indicator
The three-dot chat bubble that says someone is writing: it pops in at the thread's edge exactly as messaging apps do, holds while the reply is coming, and vanishes when the message lands
```html typing-indicator.html theme={null}
```
## Install
That writes one file: `compositions/components/typing-indicator.html`.
## Paste it into your composition
Open `compositions/components/typing-indicator.html` and copy what is inside into your own composition.
The file opens with a comment header that walks you through it.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| -------- | ------- | ----------------------- | ------------------------------------------------------------------ |
| `size` | `124` | 80px to 220px, step 2px | Bubble width in pixels; dots and tail scale with it. |
| `tone` | `dark` | `dark`, `light` | Dark is the reference iOS bubble; light suits bright chat grounds. |
| `tail` | `on` | `on`, `off` | The two shrinking circles anchoring the bubble to the sender side. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
```
Tagged `video-primitive` `chat` `mock-ui` `overlay`.
Created by Miao Yang.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# UI Focus Zoom
Source: https://hyperframes.heygen.com/catalog/components/ui-focus-zoom
A full app surface establishes with one settle, then the camera zooms and pans to an anchored region on its cue and holds the zoomed state, with an optional soft focus halo at the anchor. The surface is a slot with a token-styled skeleton default.
```html ui-focus-zoom.html theme={null}
UI Focus Zoom
```
## Install
That writes one file: `compositions/components/ui-focus-zoom.html`.
## Paste it into your composition
Open `compositions/components/ui-focus-zoom.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ---------- | ------- | ------------------------- | ----------------------------------------------------------------------------------------- |
| `anchor_x` | `64` | 0% to 100%, step 1% | Focus anchor, percent from the left edge of the surface. |
| `anchor_y` | `36` | 0% to 100%, step 1% | Focus anchor, percent from the top edge of the surface. |
| `zoom` | `1.6` | 1 to 3, step 0.05 | Camera scale at the focused state. |
| `zoom_at` | `1.4` | 0s to 30s, step 0.1s | Seconds from mount start when the camera departs for the anchor. Clamped inside the hold. |
| `halo` | `show` | `show`, `hide` | Soft accent bloom at the anchor as the camera arrives. |
| `accent` | `green` | `green`, `blue`, `violet` | Token the halo and skeleton accent elements ride. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. None holds the final frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
UI Focus Zoom
```
Tagged `camera` `product-demo` `zoom` `focus` `pan` `slot` `servo`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Variable Axis Type
Source: https://hyperframes.heygen.com/catalog/components/variable-axis-type
A locked one-line headline whose weight or width axis morphs into a decisive emphasis beat.
```html variable-axis-type.html theme={null}
Variable Axis Type
IMPACT
```
## Install
That writes one file: `compositions/components/variable-axis-type.html`.
## Paste it into your composition
Open `compositions/components/variable-axis-type.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | -------- | ------------------ | ----------------------------------------------- |
| `text` | `IMPACT` | string | Word or short headline to emphasize. |
| `axis` | `wght` | `wght`, `wdth` | Variable-font axis used for the emphasis morph. |
| `fromValue` | `200` | 25 to 1000, step 1 | Starting coordinate on the selected font axis. |
| `toValue` | `900` | 25 to 1000, step 1 | Ending coordinate on the selected font axis. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Variable Axis Type
IMPACT
```
Tagged `typography` `variable-font` `kinetic-type` `axis` `emphasize`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Variable Font Flex
Source: https://hyperframes.heygen.com/catalog/components/variable-font-flex
A word lands while its variable-font weight and width axes flex from hairline-condensed to black-wide with per-character stagger; font-size eases inversely so the letterforms gain mass while the box holds.
```html variable-font-flex.html theme={null}
Variable Font Flex
```
## Install
That writes one file: `compositions/components/variable-font-flex.html`.
## Paste it into your composition
Open `compositions/components/variable-font-flex.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------- | ------------------------- | ------------------------------------------------------------------------------ |
| `text` | `FLEX` | string | The word whose variable-font axes flex. |
| `axis` | `both` | `weight`, `width`, `both` | Which variable-font axes animate: weight, width, or both. |
| `stagger` | `0.06` | number | Seconds between per-character flex starts, clamped 0 to 0.25. |
| `accent` | `green` | `green`, `blue`, `violet` | Word color: green rides --brand, blue rides --accent, violet rides --accent-2. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the carved word holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Variable Font Flex
```
Tagged `motion-primitive` `experiment` `type` `variable-font` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Vector Editor Rig
Source: https://hyperframes.heygen.com/catalog/components/vector-editor-rig
A dark design-tool app chrome with a live vector pen path, sequential anchor points, bezier handles, a selection frame, and theme-driven blue accents.
```html vector-editor-rig.html theme={null}
Vector Editor Rig
Vector
100%
```
## Install
That writes one file: `compositions/components/vector-editor-rig.html`.
## Paste it into your composition
Open `compositions/components/vector-editor-rig.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ---------------------- | --------------------------------------- |
| `tool` | `pen` | `pen`, `shape`, `type` | Tool highlighted in the editor toolbar. |
| `pathLabel` | `Logo` | string | Name shown for the active vector path. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Vector Editor Rig
Vector
100%
```
Tagged `prop` `ui-props` `demonstrate` `vector` `design-tool` `pen-tool` `bezier` `app-chrome`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Velocity Throw Snap
Source: https://hyperframes.heygen.com/catalog/components/velocity-throw-snap
A five-shot rail whips past on a fast decaying curve, then overshoots and snaps the selected hero shot exactly to center.
```html velocity-throw-snap.html theme={null}
Velocity Throw Snap
01
02
03
04
05
```
## Install
That writes one file: `compositions/components/velocity-throw-snap.html`.
## Paste it into your composition
Open `compositions/components/velocity-throw-snap.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------------- | ------- | ------------------------- | ---------------------------------------------------- |
| `hero_index` | `2` | 0 to 4, step 1 | Zero-based index of the shot centered at the settle. |
| `accent` | `green` | `green`, `blue`, `violet` | Highlight color used by the hero shot. |
| `card_label_prefix` | `Shot` | string | Text placed before each shot number. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Velocity Throw Snap
01
02
03
04
05
```
Tagged `motion-primitive` `feature-tour` `rail` `velocity` `throw` `snap` `physics`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Vignette
Source: https://hyperframes.heygen.com/catalog/components/vignette
Cinematic radial vignette overlay using a pure-CSS gradient — darkens the edges to pull focus toward the center
## Install
That writes one file: `compositions/components/vignette.html`.
## Source
```html theme={null}
```
## Usage
Open `compositions/components/vignette.html` and paste its contents into your composition. See the comment header in the file for detailed instructions.
Tagged `vignette` `overlay` `cinematic` `effect`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Vox Annotate
Source: https://hyperframes.heygen.com/catalog/components/vox-annotate
The Vox-style annotate gesture: a keyword in a held sentence gets a hand-drawn marker while a thin connector draws up to a mono callout label, all as one choreographed beat on the cue.
```html vox-annotate.html theme={null}
Vox Annotate
```
## Install
That writes one file: `compositions/components/vox-annotate.html`.
## Paste it into your composition
Open `compositions/components/vox-annotate.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | ------------------------------ | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `text` | `Ship the story, not the spec` | string | Full line of display text. |
| `keyword` | `story` | string | First case-insensitive substring match in text receives the marker and annotation. Empty or unmatched draws nothing. |
| `note` | `the annotate beat` | string | Mono callout label at the end of the connector. Empty draws the marker only. |
| `style` | `highlight` | `highlight`, `circle`, `underline`, `scribble` | Shape of the hand-drawn marker stroke. |
| `draw_at` | `0.9` | number | Second (from mount start) the annotate gesture starts. Clamped so the gesture completes before any exit. |
| `accent` | `green` | `green`, `blue`, `violet` | Annotation ink color from the contract token map. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure. Default none: the lockup holds until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Vox Annotate
```
Tagged `motion-primitive` `typography` `annotation` `marker` `deterministic`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Whip Pan Cut
Source: https://hyperframes.heygen.com/catalog/components/whip-pan-cut
A full-frame whip pan: scene A whips off laterally with capped directional motion blur while scene B enters in the same direction at matched velocity, on a speed-ramp profile with a decelerating catch. Both scenes ride one strip, so seam velocity is exact by construction. Callers fill the named before/after slot panels; token-styled defaults render when a slot is left empty.
```html whip-pan-cut.html theme={null}
Whip Pan Cut
```
## Install
That writes one file: `compositions/components/whip-pan-cut.html`.
## Paste it into your composition
Open `compositions/components/whip-pan-cut.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ----------- | ------- | ------------------------- | ------------------------------------------------------------------------------------ |
| `direction` | `left` | `left`, `right` | Shared travel direction for the outgoing and incoming scenes. |
| `whip_at` | `0.25` | 0s to 8s, step 0.05s | Seconds after mount start when the whip begins. |
| `accent` | `green` | `green`, `blue`, `violet` | Seam hairline and default after art tint. |
| `exit` | `none` | `none`, `fade`, `up` | Optional departure of the landed scene. Default none: it rests until the frame cuts. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Whip Pan Cut
```
Tagged `transition` `whip-pan` `motion-blur` `velocity-match` `speed-ramp` `bridge` `slots`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Whiteboard Ink
Source: https://hyperframes.heygen.com/catalog/components/whiteboard-ink
A whiteboard sketch draws one measured stroke at a time while a pen nib follows the active tip. Preset sketches (bulb, flow, rocket) or your own multi-stroke SVG paths via the strokes slot; a path marked data-ink=accent rides the accent token.
```html whiteboard-ink.html theme={null}
Whiteboard Ink
```
## Install
That writes one file: `compositions/components/whiteboard-ink.html`.
## Paste it into your composition
Open `compositions/components/whiteboard-ink.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| --------- | --------------- | ------------------------- | ----------------------------------------------------------------------------------- |
| `sketch` | `bulb` | `bulb`, `flow`, `rocket` | Authored preset sketch to draw. Ignored when the strokes slot holds custom paths. |
| `caption` | `Draw the idea` | string | Short line shown after the sketch completes. |
| `pen` | `show` | `show`, `hide` | Show or hide the pen nib actor. |
| `accent` | `green` | `green`, `blue`, `violet` | Color used by strokes marked data-ink=accent (one highlight stroke in each preset). |
| `exit` | `none` | `none`, `fade`, `up` | How the completed lockup leaves. none holds the final frame. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Whiteboard Ink
```
Tagged `motion-primitive` `intro` `reveal` `svg` `whiteboard` `line-draw` `slot`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Wordmark Tiles
Source: https://hyperframes.heygen.com/catalog/components/wordmark-tiles
A wordmark resolves from deterministic color noise into correctly cropped glyph tiles through a spatially modulated GSAP wave.
```html wordmark-tiles.html theme={null}
Wordmark Tiles
```
## Install
That writes one file: `compositions/components/wordmark-tiles.html`.
## Paste it into your composition
Open `compositions/components/wordmark-tiles.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------- | -------- | ---------------------- | ------------------------------------------------- |
| `text` | `LAUNCH` | string | Text resolved by the tile wave. |
| `columns` | `12` | 8 to 14, step 1 | Number of columns in the wordmark tile grid. |
| `waveStagger` | `40` | 15ms to 50ms, step 1ms | Delay between tile reveals in spatial wave order. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Wordmark Tiles
```
Tagged `typography` `wordmark` `tiles` `raster` `reveal`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# X Follow Card
Source: https://hyperframes.heygen.com/catalog/components/x-follow-card
A social follow card with avatar, handle, and follower motion.
## Install
That writes one file: `compositions/components/x-follow-card.html`.
## Source
```html theme={null}
X Follow Card
A social follow card with avatar, handle, and follower motion.
30.6K
```
## Usage
Open `compositions/components/x-follow-card.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `social-overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Camera Punch-In
Source: https://hyperframes.heygen.com/catalog/components/yt-camera-move
Dynamic zoom, slide, and 3D tilt-pan helpers for any wrapper (video, include, card) with cubic-easing defaults and an edge-defocus pulse overlay
## Install
That writes one file: `compositions/components/yt-camera-move.html`.
## Paste it into your composition
Open `compositions/components/yt-camera-move.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
FOOTAGE
```
Tagged `camera` `zoom` `effect` `creator`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Pointer Circle + Countdown
Source: https://hyperframes.heygen.com/catalog/components/yt-circle-pointer
Draw-on annotation ellipse around a target plus a countdown chip that pulses each tick
## Install
That writes one file: `compositions/components/yt-circle-pointer.html`.
## Paste it into your composition
Open `compositions/components/yt-circle-pointer.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
the thing
5sec
```
Tagged `annotation` `countdown` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Feathered Spotlight
Source: https://hyperframes.heygen.com/catalog/components/yt-feather-highlight
Dims the frame except a feathered ellipse; the hole's position and size are CSS variables, so helpers glide the spotlight between targets
## Install
That writes one file: `compositions/components/yt-feather-highlight.html`.
## Paste it into your composition
Open `compositions/components/yt-feather-highlight.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
A
B
```
Tagged `highlight` `spotlight` `effect` `overlay`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# On-Screen Display Effect
Source: https://hyperframes.heygen.com/catalog/components/yt-screen-warp
Grid, scanline, vignette, and sheen overlay plus a 3D-warp wrapper class that makes footage read as if playing on a physical display
## Install
That writes one file: `compositions/components/yt-screen-warp.html`.
## Paste it into your composition
Open `compositions/components/yt-screen-warp.html` and copy what is inside into your own composition.
A component has no size or duration of its own. It takes both from the composition
you paste it into.
## Source
```html theme={null}
on screen
```
Tagged `effect` `overlay` `texture`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Zoom Through Transition
Source: https://hyperframes.heygen.com/catalog/components/zoom-through-transition
A transition that zooms through a focal card into the next scene.
```html zoom-through-transition.html theme={null}
Zoom Through Transition
>
Before
Zoom Through Transition
```
## Install
That writes one file: `compositions/components/zoom-through-transition.html`.
## Variables
Every one of these has a default, so the piece works untouched. Set the ones you
want to change on the element:
| Variable | Default | Accepts | What it does |
| ------------ | ------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `from-label` | `Before` | string | Caption on the outgoing scene, the one on screen when the transition starts. |
| `to-label` | `Zoom Through Transition` | string | Caption on the incoming scene, the one the timeline wipes into frame. |
| `depth` | `standard` | `close`, `standard`, `far` | Multiplies how far both scenes travel and how hard the outgoing one blurs, so the push covers a shorter or longer run in the same time. |
| `accent` | `blue` | `blue`, `green`, `violet` | Theme token for the ring marking the incoming scene. Blue rides --accent, green --brand, violet --accent-2; each falls back to a neutral hairline. |
Set them with `data-variable-values` on the element that mounts it. These are the
defaults, so this behaves exactly like the preview above until you change one:
```html wrap theme={null}
```
## Source
```html theme={null}
Zoom Through Transition
>
Before
Zoom Through Transition
```
## Usage
Open `compositions/components/zoom-through-transition.html` and paste its contents into your composition. See the comment header in the file for timeline integration guidance.
Tagged `transition-primitive`.
## Related topics
* [Browse the complete Catalog](/catalog)
* [Add assets and Catalog items in Studio](/studio/assets-and-blocks)
* [Build a richer composition](/go-further)
# Catalog
Source: https://hyperframes.heygen.com/catalog/index
Browse reusable HyperFrames scenes, transitions, captions, overlays, effects, and components.
The Catalog gives you reusable visuals you can add to a project instead of building each one from scratch.
```html catalog-overview-v3.html theme={null}
```
Start with a larger scene or self-contained visual.
Add a smaller effect or behavior inside an existing scene.
## Use an item
1. Open an item and watch the motion preview.
2. Copy its plain-language request into your agent chat.
3. Replace the example content, then review it inside your complete video.
The tour covers Code Animations, Captions, HTML-in-Canvas, Social Overlays, Lower Thirds, Shader Transitions, CSS Transitions, Showcases, Data, Effects, and Blocks.
## Related topics
* [Add Catalog items in Studio](/studio/assets-and-blocks)
* [Build richer compositions](/go-further)
* [Contribute a Catalog item](/contributing/catalog)
# Changelog
Source: https://hyperframes.heygen.com/changelog
Release notes for HyperFrames.
Recent HyperFrames releases, including user-facing features, fixes, and migration notes.
The audio effects rack, track groups, mute and solo are on for everyone.
They shipped across twelve releases behind a flag at zero percent, so this is
the first release where you can reach them.
## Features
* **Audio:** Open the audio FX, group and mute features to everyone ([0e9a4f371](https://github.com/heygen-com/hyperframes/commit/0e9a4f371d4cff4e853640ea87caf76814af5278), [#3401](https://github.com/heygen-com/hyperframes/pull/3401)).
## Fixes
* **CLI:** Stop a caught post-render throw reporting a valid render as failed ([ea95b7d44](https://github.com/heygen-com/hyperframes/commit/ea95b7d44e6de95a514931026d6c01be7f9c01a0), [#3409](https://github.com/heygen-com/hyperframes/pull/3409)).
* **Lint:** Surface unloadable media variable defaults, stop reading data-var-src ids as paths ([41edbfb2c](https://github.com/heygen-com/hyperframes/commit/41edbfb2ce5a8beb1c9d9de2a3eb09195a369a4b), [#3406](https://github.com/heygen-com/hyperframes/pull/3406)).
* **Studio:** Invalidate the preview signature off the watcher that sees project writes ([5842dd8df](https://github.com/heygen-com/hyperframes/commit/5842dd8df4c7fca3ed895e4bc047299c9274ed14), [#3364](https://github.com/heygen-com/hyperframes/pull/3364)).
* **Lint:** Stop duplicate\_composition\_id firing on repeated sub-composition mounts ([09a5ef709](https://github.com/heygen-com/hyperframes/commit/09a5ef70925f8a67276df0166ff1e1a6eca5db6f), [#3404](https://github.com/heygen-com/hyperframes/pull/3404)).
* **Producer:** Anchor local-font embedding to its url() occurrence ([e1191edba](https://github.com/heygen-com/hyperframes/commit/e1191edba6d8ec44e3d79624cc92ef32fe99805d), [#3405](https://github.com/heygen-com/hyperframes/pull/3405)).
## Internal
* **Engine:** Give the audio grouping mixes room, and make a stall say why ([9c73e64a0](https://github.com/heygen-com/hyperframes/commit/9c73e64a07635fe02922ec2f0f3bc0b37ef6483d), [#3408](https://github.com/heygen-com/hyperframes/pull/3408)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.7...v0.8.8).
Audio now works in groups. Set one volume, one mute, or one FX rack across many clips at once, and hear the same thing in preview that lands in the export.
Studio also got a broad UX pass across captions, the player, the panels, and the sidebar, and lint findings now show up inside Studio.
## Features
* **Studio,core:** Reach presets and the rack from the timeline ([6a92d2140](https://github.com/heygen-com/hyperframes/commit/6a92d21401974441a6a9b311c78e40df522e209d), [#3292](https://github.com/heygen-com/hyperframes/pull/3292)).
* **Studio,core:** Mute groups, and hear-only-this that cannot reach the export ([0d26072e6](https://github.com/heygen-com/hyperframes/commit/0d26072e6cb3f5b901891c26396a0f6c1e0d8853), [#3291](https://github.com/heygen-com/hyperframes/pull/3291)).
* **Studio,core:** A volume and a living meter on the group row ([5fd84c395](https://github.com/heygen-com/hyperframes/commit/5fd84c395b52d8533c924ea31628e71e7e5bc3f6), [#3290](https://github.com/heygen-com/hyperframes/pull/3290)).
* **Engine:** Render grouped audio through a summed, FX-processed bus ([99f42be04](https://github.com/heygen-com/hyperframes/commit/99f42be04ce6bce535600c42a8eb694fed8ebc9e), [#3289](https://github.com/heygen-com/hyperframes/pull/3289)).
* **Studio,lint:** Carve targets voiceover groups — always, when plural ([485c037dc](https://github.com/heygen-com/hyperframes/commit/485c037dcf2602b2b92fc9297a8dec8f965e79dc), [#3288](https://github.com/heygen-com/hyperframes/pull/3288)).
* **Core:** Route grouped audio through a group bus in preview ([602cf53cf](https://github.com/heygen-com/hyperframes/commit/602cf53cf6d556711dc02592baad5f7e6088e748), [#3287](https://github.com/heygen-com/hyperframes/pull/3287)).
* **Studio:** Group rows in the timeline, and a split disclosure ([acfa7c55a](https://github.com/heygen-com/hyperframes/commit/acfa7c55a2f3dcdb070e304bfb8e7b819d2ef3cf), [#3286](https://github.com/heygen-com/hyperframes/pull/3286)).
* **Core:** The audio group model — element, membership, helpers ([524036715](https://github.com/heygen-com/hyperframes/commit/524036715043c4685d0fd41eaccb5addf5ce31c7), [#3278](https://github.com/heygen-com/hyperframes/pull/3278)).
* **Core,studio:** The character presets pitch shift unlocks ([5e0cc7511](https://github.com/heygen-com/hyperframes/commit/5e0cc75115e3080aeb2ebab0f13ceac435fd52c4), [#3277](https://github.com/heygen-com/hyperframes/pull/3277)).
* **Core:** Pitch shift — a granular shifter as the fifth FX worklet ([1b86b5612](https://github.com/heygen-com/hyperframes/commit/1b86b561273e85e09e4f1a2cc57233ceac1a2945), [#3276](https://github.com/heygen-com/hyperframes/pull/3276)).
* **Studio:** Make presets the primary path into the FX rack ([43c4e6935](https://github.com/heygen-com/hyperframes/commit/43c4e6935ef34468b09b71f49a1977b83781e9a1), [#3274](https://github.com/heygen-com/hyperframes/pull/3274)).
* **Producer:** Host/render telemetry in RenderPerfSummary ([7e3bcd9ef](https://github.com/heygen-com/hyperframes/commit/7e3bcd9ef145b9d0ebac7dd2b497b58b3e5d0ca2), [#1551](https://github.com/heygen-com/hyperframes/pull/1551)).
## Fixes
* **Lint:** Break two fix-loops and drop two rules the runtime owns ([9bb4b4ce6](https://github.com/heygen-com/hyperframes/commit/9bb4b4ce60b6d41f2aa5fc4c1bcfc3e4efa73b16), [#3400](https://github.com/heygen-com/hyperframes/pull/3400)).
* **Core:** Bind native window methods in the scoped sub-composition proxy ([a1c1f519c](https://github.com/heygen-com/hyperframes/commit/a1c1f519cb1d83baf3162e78aa5271c72abcd937), [#3378](https://github.com/heygen-com/hyperframes/pull/3378)).
* **Cli,studio:** Surface project lint in Studio ([8b67bb6db](https://github.com/heygen-com/hyperframes/commit/8b67bb6db591e8d2866abd914fd791583f5cc701), [#3393](https://github.com/heygen-com/hyperframes/pull/3393)).
* **Studio:** Captions UX — mode exit, undo, autosave surfacing, honest gating ([254de3d1c](https://github.com/heygen-com/hyperframes/commit/254de3d1c4c1babe4484e0d3112a3c1e3e5c4cc1), [#1968](https://github.com/heygen-com/hyperframes/pull/1968)).
* **Studio:** Player UX — honest waveform, keyframe menu actions, beat-delete gesture ([a01a5d7b3](https://github.com/heygen-com/hyperframes/commit/a01a5d7b3c6555b5e577fed45fbeb59c8f1cfcfe), [#1967](https://github.com/heygen-com/hyperframes/pull/1967)).
* **Studio:** Sidebar/panels UX — asset delete confirm, rename, search trap, undo ([44791c3f7](https://github.com/heygen-com/hyperframes/commit/44791c3f7da178a114950e498ffd6396f8dcf2f1), [#1966](https://github.com/heygen-com/hyperframes/pull/1966)).
* **Studio:** Editor panel UX — commit safety, keyboard a11y, wired BlockParamsPanel ([ba607bf88](https://github.com/heygen-com/hyperframes/commit/ba607bf88683f129a489ea6855e1ff562e4a4d93), [#1965](https://github.com/heygen-com/hyperframes/pull/1965)).
* **Deps:** Bump puppeteer so the browser hides its console window on Windows ([63eb35041](https://github.com/heygen-com/hyperframes/commit/63eb35041c0c1ad4f571d7d21f24ac3689ac5df7), [#3394](https://github.com/heygen-com/hyperframes/pull/3394)).
* **Engine:** Hide ffmpeg console windows on Windows ([315a7b758](https://github.com/heygen-com/hyperframes/commit/315a7b758cca73b67dc9cb0b2548bae6295cea73), [#3381](https://github.com/heygen-com/hyperframes/pull/3381)).
* **CLI:** Reject blank default composition entries ([a9ea07edd](https://github.com/heygen-com/hyperframes/commit/a9ea07edde6648463e3970a572dc42f4007a3d7f), [#3392](https://github.com/heygen-com/hyperframes/pull/3392)).
* **Core,studio:** Silence hidden audio in preview, and call it mute ([8f3ab60b5](https://github.com/heygen-com/hyperframes/commit/8f3ab60b5a2f5a3fc1757d43d2ff45b53368c5bd), [#3275](https://github.com/heygen-com/hyperframes/pull/3275)).
* **Producer:** Attach src URL to ffprobe failures for compile-phase attribution (STUDIO-5433) ([00f08e8de](https://github.com/heygen-com/hyperframes/commit/00f08e8de461aa03f9c9c13aa6b1e6cb428ea5e7), [#3033](https://github.com/heygen-com/hyperframes/pull/3033)).
* **Producer:** Decode percent-encoded video src in HDR pre-extract ([13c867267](https://github.com/heygen-com/hyperframes/commit/13c867267e50030e786bf209164d4817ff12869a), [#2759](https://github.com/heygen-com/hyperframes/pull/2759)).
* **CLI:** Surface HYPERFRAMES\_BROWSER\_PATH hint on Windows chrome-headless-shell launch crashes ([7563b644a](https://github.com/heygen-com/hyperframes/commit/7563b644a2f5c4f8b6787b2b088695219aaf9419), [#2481](https://github.com/heygen-com/hyperframes/pull/2481)).
* **CLI:** Add missing cache fields to telemetry test fixture ([24b3ebdf9](https://github.com/heygen-com/hyperframes/commit/24b3ebdf9f71d49aaffc48e077ab36ff5d5e3871), [#1915](https://github.com/heygen-com/hyperframes/pull/1915)).
* **Studio:** Resume drag-paused timelines instead of only re-seeking ([64b94ebf3](https://github.com/heygen-com/hyperframes/commit/64b94ebf3a5ac4611292e10f6b676a4616e9dfe2), [#1876](https://github.com/heygen-com/hyperframes/pull/1876)).
* **Core:** Play bounded WebAudio clips full-length at non-1x playback rate ([1ff99a50f](https://github.com/heygen-com/hyperframes/commit/1ff99a50f5b3673a5af722c848c3f13b161e0a03), [#1494](https://github.com/heygen-com/hyperframes/pull/1494)).
* **Core:** Prevent symlink path traversal in htmlBundler safePath (F-005) ([c09b0b918](https://github.com/heygen-com/hyperframes/commit/c09b0b91830f26e34e2393d0c5ac8abc8b2da027), [#1214](https://github.com/heygen-com/hyperframes/pull/1214)).
## Docs & Examples
* Drop --full-depth from skills install commands ([9ec75a485](https://github.com/heygen-com/hyperframes/commit/9ec75a485f05e0e6a6190b0931aefbdc48bd8535), [#3399](https://github.com/heygen-com/hyperframes/pull/3399)).
## Catalog
* **Catalog:** Render the Matrix Decode docs preview; remove Checkout Flow ([d4765512d](https://github.com/heygen-com/hyperframes/commit/d4765512df8b9ff9636c7a2e5e4a41de08039a78), [#3396](https://github.com/heygen-com/hyperframes/pull/3396)).
## Internal
* **Engine:** Give the ffmpeg-bound grouping mixes their 30s timeout ([77566a198](https://github.com/heygen-com/hyperframes/commit/77566a198bcc8844f6f901be26b0dfc0c1f333f4), [#3398](https://github.com/heygen-com/hyperframes/pull/3398)).
* **CLI:** Bump pinned Chromium to 152.0.7977.30 ([556fe936f](https://github.com/heygen-com/hyperframes/commit/556fe936f89d5d4cc520f2a4e7b60e31bb7ae01c), [#3231](https://github.com/heygen-com/hyperframes/pull/3231)).
* Gitignore local chrome-for-testing downloads ([865f7fec5](https://github.com/heygen-com/hyperframes/commit/865f7fec52bf6288fcec55be8499757c0ab631e4), [#1451](https://github.com/heygen-com/hyperframes/pull/1451)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.6...v0.8.7).
Audio now replays reliably after backward seeks, and rendered mixes keep every clip at its authored time.
Studio keeps nested timelines open, skill updates require confirmation, and a brittle lint error is gone.
## Fixes
* **Audio:** Keep delayed clips at their authored times in rendered mixes, preventing late clips from jumping to the start or disappearing ([c056289d8](https://github.com/heygen-com/hyperframes/commit/c056289d832351dc35256bda8b36188a77bc557a), [#3380](https://github.com/heygen-com/hyperframes/pull/3380)).
* **Core:** Replay ended audio after backward timeline seeks without repeating tails during ordinary playback ([477e09642](https://github.com/heygen-com/hyperframes/commit/477e09642b6db735866316301d924d0dfdc3cf38), [#3383](https://github.com/heygen-com/hyperframes/pull/3383)).
* **Skills:** Ask for confirmation before updating installed skills ([efc2e1964](https://github.com/heygen-com/hyperframes/commit/efc2e1964a1c837f748a1c319896998a0e9da211), [#3295](https://github.com/heygen-com/hyperframes/pull/3295)).
* **Studio:** Keep subcomposition timelines open during playback ([a340ed382](https://github.com/heygen-com/hyperframes/commit/a340ed382aa5d335a3b7e40b6cfb4dfae1870569), [#3382](https://github.com/heygen-com/hyperframes/pull/3382)).
* **Lint:** Remove the fragile `head_leaked_text` rule that could block correct compositions ([a89780679](https://github.com/heygen-com/hyperframes/commit/a8978067981805bdae72b8f16ca1c57153ec207a), [#3385](https://github.com/heygen-com/hyperframes/pull/3385)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.5...v0.8.6).
Lint is quieter and more accurate. Seven rules that fired on correct compositions are gone, so you waste fewer edits chasing errors that were never real.
The clip example in the docs also stopped failing its own linter.
## Features
* **Telemetry:** Measure which lint rules fire, cost, and fail to converge ([f822200fb8](https://github.com/heygen-com/hyperframes/commit/f822200fb8f437b73985f43837c195f5e7312289), [#3367](https://github.com/heygen-com/hyperframes/pull/3367)).
* **Skills:** Anchored-connector rule + source-traceable visuals doctrine ([a6a9e2f89e](https://github.com/heygen-com/hyperframes/commit/a6a9e2f89e509424a64a1dcd976aabfd54b60d02), [#3354](https://github.com/heygen-com/hyperframes/pull/3354)).
## Fixes
* **Studio:** Capture storyboard tiles at review density ([b4d5abd7b2](https://github.com/heygen-com/hyperframes/commit/b4d5abd7b2cdc419906153ca75d99bd813adf614), [#3371](https://github.com/heygen-com/hyperframes/pull/3371)).
* **Lint:** Stop erroring on the documented canonical clip block ([2be5a03b80](https://github.com/heygen-com/hyperframes/commit/2be5a03b800e0b17ee36e99167c99edc383065ce), [#3374](https://github.com/heygen-com/hyperframes/pull/3374)).
* **Skills:** Resolve the blueprint id from a qualified `blueprint:` field ([d1482b0129](https://github.com/heygen-com/hyperframes/commit/d1482b012926d7118fa39e53ef8974328e84cc9e), [#3337](https://github.com/heygen-com/hyperframes/pull/3337)).
* **Skills:** Stage SVGs that capture wrote into capture/assets/svgs/ ([c66c9a4c76](https://github.com/heygen-com/hyperframes/commit/c66c9a4c76ff0681cadc8007a8e02744bbcdab10), [#3336](https://github.com/heygen-com/hyperframes/pull/3336)).
* **Core:** Keep authored gain above unity off el.volume in the sandbox bridge ([9140c0eaa1](https://github.com/heygen-com/hyperframes/commit/9140c0eaa1b332de7ca061af040611f5b1c64419), [#3349](https://github.com/heygen-com/hyperframes/pull/3349)).
* **Producer:** Seek once per step when discovering video visibility ([d09145faab](https://github.com/heygen-com/hyperframes/commit/d09145faabfd3078c29969fbcf293067d50275ac), [#3233](https://github.com/heygen-com/hyperframes/pull/3233)).
* **Studio:** Capture the storyboard frame hero at full resolution ([f0e637375f](https://github.com/heygen-com/hyperframes/commit/f0e637375f2c43b22192f1ad8c3aef1b5d010e8a), [#3338](https://github.com/heygen-com/hyperframes/pull/3338)).
## Internal
* **Lint:** Drop seven rules that fire on correct compositions ([83ceaeb902](https://github.com/heygen-com/hyperframes/commit/83ceaeb902f07ffc4bed976ca3bdd501eb60aa55), [#3366](https://github.com/heygen-com/hyperframes/pull/3366)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.4...v0.8.5).
A new `normalize-audio` command matches one clip's loudness to another, and the volume fader now tells the truth about the gain it writes.
Previews keep running in the background in every launch mode, and pressing Delete in Studio now removes the whole selection.
## Features
* **CLI:** Add normalize-audio to match one clip's loudness to another ([b3c43e248](https://github.com/heygen-com/hyperframes/commit/b3c43e24804e632ef2437e2ebd6789094ced2569), [#3306](https://github.com/heygen-com/hyperframes/pull/3306)).
* **CLI:** Run a managed background preview in every launch mode ([9da422fd7](https://github.com/heygen-com/hyperframes/commit/9da422fd7f75b0d5fe7f7f2defd889239bb82fe6), [#3310](https://github.com/heygen-com/hyperframes/pull/3310)).
* **CLI:** Give every preview lifecycle op one JSON document ([0e3c5f6be](https://github.com/heygen-com/hyperframes/commit/0e3c5f6bef4760d863309e997619bb1db99f5530), [#3309](https://github.com/heygen-com/hyperframes/pull/3309)).
## Fixes
* **CLI:** Zip the publish archive to the same bytes every time ([d464f60b9](https://github.com/heygen-com/hyperframes/commit/d464f60b9600485cd97c537338e25b7f77f9ca90), [#3358](https://github.com/heygen-com/hyperframes/pull/3358)).
* **Studio:** Make the volume fader tell the truth about the gain it writes ([228eabd43](https://github.com/heygen-com/hyperframes/commit/228eabd43fa6164dc1296e4615bae33dcca98696), [#3305](https://github.com/heygen-com/hyperframes/pull/3305)).
* **Producer:** Give inlined media a document-unique render id ([634df5a5a](https://github.com/heygen-com/hyperframes/commit/634df5a5af7aad3e529035d62d324aca1512df35), [#3342](https://github.com/heygen-com/hyperframes/pull/3342)).
* **Studio:** Make Delete remove the whole canvas selection ([ec0b23f3c](https://github.com/heygen-com/hyperframes/commit/ec0b23f3cec98ea9bb4b61d54ad18bb48ee1c721), [#3339](https://github.com/heygen-com/hyperframes/pull/3339)).
* **Audio:** Raise the authoring gain ceiling and carry it through the probes ([e282ff15c](https://github.com/heygen-com/hyperframes/commit/e282ff15cc8b8ef519d514c7741e6b27cfd92aae), [#3333](https://github.com/heygen-com/hyperframes/pull/3333)).
* **CLI:** Keep a live preview's ownership record and stop past a bad one ([74149e249](https://github.com/heygen-com/hyperframes/commit/74149e249ac5a2e7a88d15f241d12ec58db01283), [#3308](https://github.com/heygen-com/hyperframes/pull/3308)).
* **Producer:** Clamp embedded video/audio windows to the scene ([b31dde35b](https://github.com/heygen-com/hyperframes/commit/b31dde35b13a3c23c677ba3b648d01a7d735f5be), [#3332](https://github.com/heygen-com/hyperframes/pull/3332)).
* **CLI:** Signal only processes the OS says own the port ([c1c70f44b](https://github.com/heygen-com/hyperframes/commit/c1c70f44bd9d43e22e80449d1b084d6e4d8ae034), [#3307](https://github.com/heygen-com/hyperframes/pull/3307)).
## Internal
* Bound the ffmpeg apt fetch so a stalled mirror costs a retry, not the job ([7e96e60fe](https://github.com/heygen-com/hyperframes/commit/7e96e60fe228548fe4813aa5e9917bbde9a50feb), [#3356](https://github.com/heygen-com/hyperframes/pull/3356)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.3...v0.8.4).
Studio now keeps voices natural at every preview speed and applies authored track gain and user volume exactly once.
Creator skills also add copyable recipes for cuts, trims, zooms, masks, transitions, and placed audio.
## Features
* Make creator media edits render-safe ([afafca4b9](https://github.com/heygen-com/hyperframes/commit/afafca4b9670cad60afd66475207ef6a016a759b), [#3322](https://github.com/heygen-com/hyperframes/pull/3322)).
## Fixes
* Separate Studio author and user audio gain ([995c9e346](https://github.com/heygen-com/hyperframes/commit/995c9e346e5b1bfff015db3979896ec576cff12c), [#3328](https://github.com/heygen-com/hyperframes/pull/3328)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.2...v0.8.3).
The variables panel on a component's catalog page now changes its preview. Pick an accent or a size and the preview answers, so what you see is what the copied snippet installs.
## Fixes
* **Skills:** Count proxy-driver tweens in the animation map ([0d874adc6](https://github.com/heygen-com/hyperframes/commit/0d874adc685a94a519311cf9ed9e4107bb0347c9), [#3301](https://github.com/heygen-com/hyperframes/pull/3301)).
* **Skills:** Declare the caption brand font's style axis, not just its weight ([a41da8651](https://github.com/heygen-com/hyperframes/commit/a41da8651768942adf588a959d9dc062c90c6a13), [#3300](https://github.com/heygen-com/hyperframes/pull/3300)).
* **Skills:** Pin UTF-8 in Python scripts instead of the platform code page ([f8a1e2d31](https://github.com/heygen-com/hyperframes/commit/f8a1e2d315e51856491af003958914152371c29d), [#3298](https://github.com/heygen-com/hyperframes/pull/3298)).
## Catalog
* **Catalog:** Make component previews answer their variables panel ([406bf316a](https://github.com/heygen-com/hyperframes/commit/406bf316a38d8a6ff24c00696d9e537ee85997d4), [#3323](https://github.com/heygen-com/hyperframes/pull/3323)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.1...v0.8.2).
Variables you pass to `hyperframes add` now reach the file it installs, instead of being dropped without a word. Studio also asks for FFmpeg before an export starts, rather than after one fails.
## Features
* **Studio:** Prompt to install FFmpeg before Export, not after ([5058236ed](https://github.com/heygen-com/hyperframes/commit/5058236eda13cc31536e39bd37cf7eb4f9a99025), [#3314](https://github.com/heygen-com/hyperframes/pull/3314)).
## Fixes
* **Docs:** Load the player from latest, not a pinned minor ([d7688f994](https://github.com/heygen-com/hyperframes/commit/d7688f9943814b44ab20b7d4b079ab50f7ca36df), [#3320](https://github.com/heygen-com/hyperframes/pull/3320)).
* **Add:** Make chosen variables actually take effect, in the CLI and the preview ([ea7c48f37](https://github.com/heygen-com/hyperframes/commit/ea7c48f37249aff26211913562c74e29b85e8ddb), [#3316](https://github.com/heygen-com/hyperframes/pull/3316)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.0...v0.8.1).
HyperFrames 0.8 establishes the supported version boundary for Plan v2 as the default distributed cloud transport.
Version 0.7.111 already contained this behavior. Version 0.8.0 adds no further cloud runtime changes beyond that release.
## Migration
* Redeploy AWS Lambda, SAM, or CDK infrastructure from version 0.8.0 before upgrading SDK callers to 0.8.0.
* Redeploy GCP Cloud Run services and workflows from version 0.8.0 before upgrading SDK callers to 0.8.0.
* Omitting `planProtocol` selects Plan v2. Explicit `"v1"` remains available for compatibility while older work drains.
* Keep the producer, SDK, and cloud adapter packages on the same version during the upgrade.
## Catalog
* **Catalog:** Remove two AI UI items ([ed18f1ea9](https://github.com/heygen-com/hyperframes/commit/ed18f1ea9aae00c26fdb712b231ac123e9170086), [#3317](https://github.com/heygen-com/hyperframes/pull/3317)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.111...v0.8.0).
Distributed cloud renders now use the content-addressed Plan v2 transport by default, with explicit Plan v1 compatibility during upgrades.
Catalog search now ranks names and rarer words more accurately, while new text-measurement hooks give custom tools better layout data.
## Features
* **Cloud:** Default distributed plans to v2 ([17a2a00ed](https://github.com/heygen-com/hyperframes/commit/17a2a00ed5248bfc1b5f4efee1267610b0610727), [#3311](https://github.com/heygen-com/hyperframes/pull/3311)).
* **Core:** Expose pretext text measurement on window.\_\_hyperframes ([0285a711e](https://github.com/heygen-com/hyperframes/commit/0285a711e926a592bd189d647474b50de474581c), [#3302](https://github.com/heygen-com/hyperframes/pull/3302)).
## Catalog
* **Catalog:** Rank on where a word appears and how rare it is ([6b17c24f9](https://github.com/heygen-com/hyperframes/commit/6b17c24f980f9514345c8c882b00477328dbc3e6), [#3312](https://github.com/heygen-com/hyperframes/pull/3312)).
## Internal
* **Studio:** Split the two files over the 600-line cap ([35eb6d290](https://github.com/heygen-com/hyperframes/commit/35eb6d290698fd6aac90a63fd03b70a8cd2f2b07), [#3313](https://github.com/heygen-com/hyperframes/pull/3313)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.110...v0.7.111).
A registry the CLI cannot reach no longer empties the catalog. Search and browse now fall back to the last copy on disk, so one network timeout cannot send you off to hand-write a move you already have. When a search finds nothing that fits, the CLI hands you the command to report the gap.
Studio also gains a preview volume control.
## Features
* **Studio:** Add a preview volume control ([fecaf72d1](https://github.com/heygen-com/hyperframes/commit/fecaf72d1f6de66224b3857efb78a2f2c44c41bc), [#3282](https://github.com/heygen-com/hyperframes/pull/3282)).
## Fixes
* Create temp dirs with mkdtemp, not a name built from Date.now() ([de4062a93](https://github.com/heygen-com/hyperframes/commit/de4062a93300cbe1826edfbd8d71fbc44be25cb7), [#3241](https://github.com/heygen-com/hyperframes/pull/3241)).
## Docs & Examples
* **Skills:** Fix anime.js v3 syntax in v4 adapter guidance ([67edb01bf](https://github.com/heygen-com/hyperframes/commit/67edb01bf4aa2f5931e838e46e14e0f51a5809ee), [#3064](https://github.com/heygen-com/hyperframes/pull/3064)).
## Catalog
* **Catalog:** Survive an unreachable registry, and ask for the gap ([37f8c4844](https://github.com/heygen-com/hyperframes/commit/37f8c48449d6c846788a76edf055bf2a888b7be5), [#3299](https://github.com/heygen-com/hyperframes/pull/3299)).
* **Registry:** Add avatar promo and Slack notification templates ([b9a4dfcbe](https://github.com/heygen-com/hyperframes/commit/b9a4dfcbe56de5141b9a379ff30605cf23984d1e), [#3279](https://github.com/heygen-com/hyperframes/pull/3279)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.109...v0.7.110).
Audio and video clips now continue from the correct source position after a split. Renders also honor mixer settings and carry diagnostic metadata.
## Features
* **Engine:** Add invisible, unsigned renderer and version metadata to encoded files for diagnostics ([f7d2260f9](https://github.com/heygen-com/hyperframes/commit/f7d2260f9d8edb33e708138067a0eaf393c1f214), [#3264](https://github.com/heygen-com/hyperframes/pull/3264)).
## Fixes
* **Producer:** Honor configured FFmpeg timeouts and master gain during audio mixing ([c32b8041d](https://github.com/heygen-com/hyperframes/commit/c32b8041dbd157178220b7a364071fe8e3cb783a), [#3239](https://github.com/heygen-com/hyperframes/pull/3239)).
* **Studio:** Keep audio and video at the correct source position after splitting a clip ([b1b368d0f](https://github.com/heygen-com/hyperframes/commit/b1b368d0f0967506db02224ce1503f88b36b6487), [#3272](https://github.com/heygen-com/hyperframes/pull/3272)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.108...v0.7.109).
Studio can now automate any effect parameter with keyframed lanes, complete with copy, retime, and reshape tools. The full audio FX rack ships behind a staged rollout, so it isn't visible yet.
## Features
* **Studio:** Instrument the audio FX rack, including work an agent did ([d6c4774ef](https://github.com/heygen-com/hyperframes/commit/d6c4774ef41c54f66dc02c6dd433facee822a8f8), [#3229](https://github.com/heygen-com/hyperframes/pull/3229)).
* **Studio:** Fold a preset shut, and give each one its own title design ([e3ec48adc](https://github.com/heygen-com/hyperframes/commit/e3ec48adce494d40d787cd4cbca6464a3b53362f), [#3191](https://github.com/heygen-com/hyperframes/pull/3191)).
* Switch a preset off, or ramp it, as one thing ([acdb11250](https://github.com/heygen-com/hyperframes/commit/acdb11250ce3bb97a70cdd63d080968900a2f003), [#3189](https://github.com/heygen-com/hyperframes/pull/3189)).
* One knob for the five effects that cannot honestly have one ([29f516d49](https://github.com/heygen-com/hyperframes/commit/29f516d490c00697594f3b88a565d69115b7af12), [#3188](https://github.com/heygen-com/hyperframes/pull/3188)).
* **Studio:** Family lettering, tints, and the rack as a signal path ([2020b82c9](https://github.com/heygen-com/hyperframes/commit/2020b82c9b8f2d2050b5b11c76bdb27323d64e07), [#3187](https://github.com/heygen-com/hyperframes/pull/3187)).
* **Studio:** Two faces, and the shared frequency ruler ([96fd4d061](https://github.com/heygen-com/hyperframes/commit/96fd4d061ecddef59e3949b4fb3e30d51209bd76), [#3186](https://github.com/heygen-com/hyperframes/pull/3186)).
* Offer the job, not the machine — the range IS the module ([31fa523b7](https://github.com/heygen-com/hyperframes/commit/31fa523b7ed71c6fbbc0c4b2558fb83bf636fc88), [#3185](https://github.com/heygen-com/hyperframes/pull/3185)).
* **Studio:** Make the FX rack speak the author's language ([0e4da52c8](https://github.com/heygen-com/hyperframes/commit/0e4da52c8222b8d18a1211b34f2fb3bd0f7e79ee), [#3192](https://github.com/heygen-com/hyperframes/pull/3192)).
* **Core:** Land the plain-language layer, and test that it covers the rack ([27cdd4d5b](https://github.com/heygen-com/hyperframes/commit/27cdd4d5b1684afae16f96fe3e4af30c73178e1a), [#3184](https://github.com/heygen-com/hyperframes/pull/3184)).
* **Core:** The levelling script — "Even Out Levels" ([71066fc25](https://github.com/heygen-com/hyperframes/commit/71066fc25ba362a18d52ba0648b6b279e9ee3206), [#3180](https://github.com/heygen-com/hyperframes/pull/3180)).
* **Studio:** The Tone module — a multi-band EQ on faders ([818a7b281](https://github.com/heygen-com/hyperframes/commit/818a7b281b44182b6a4e47b7f30f92df332f62a2), [#3179](https://github.com/heygen-com/hyperframes/pull/3179)).
* **Core:** Name every preset node, and add a multi-band EQ over existing filters ([9f6762052](https://github.com/heygen-com/hyperframes/commit/9f676205239a4e1ce03498223ef9f6ce5448aeec), [#3178](https://github.com/heygen-com/hyperframes/pull/3178)).
* **Studio:** Give the clips on a track one automation lane row ([9b18fa7a2](https://github.com/heygen-com/hyperframes/commit/9b18fa7a26bd5e7b4f8b4b4e10c984585767620b), [#3214](https://github.com/heygen-com/hyperframes/pull/3214)).
* **Studio:** The carve is one module in the rack ([d18cbcb7f](https://github.com/heygen-com/hyperframes/commit/d18cbcb7f31862a37b9051b85ebb562f104a516c), [#3213](https://github.com/heygen-com/hyperframes/pull/3213)).
* **Studio:** Show every automated knob at the playhead ([7d38fed97](https://github.com/heygen-com/hyperframes/commit/7d38fed97fd50f70e5a67229250a186baac98d3c), [#3210](https://github.com/heygen-com/hyperframes/pull/3210)).
* **Studio:** Retime and edge-stretch an automation selection ([120ea37c2](https://github.com/heygen-com/hyperframes/commit/120ea37c2fbd7202a443b94c0ff21c1ee7a63996), [#3207](https://github.com/heygen-com/hyperframes/pull/3207)).
* **Studio:** Copy and paste automation ranges across lanes ([c7c95e2f0](https://github.com/heygen-com/hyperframes/commit/c7c95e2f018efa961b7a5e06fb142a98fd14ecc9), [#3056](https://github.com/heygen-com/hyperframes/pull/3056)).
* **Studio:** Shape and simplify an automation selection ([64a85e775](https://github.com/heygen-com/hyperframes/commit/64a85e775a2259938e24d2fc7dc279c402397761), [#3055](https://github.com/heygen-com/hyperframes/pull/3055)).
* **Studio:** Select a time range on an automation lane ([3670e9a92](https://github.com/heygen-com/hyperframes/commit/3670e9a921ddcbcd84e5d448faec5b08fca0ba40), [#3050](https://github.com/heygen-com/hyperframes/pull/3050)).
* **Studio:** Curve, snap and type a value in an automation lane ([e465a07a3](https://github.com/heygen-com/hyperframes/commit/e465a07a322db8a63fc757bda5a53a842a0c269f), [#3038](https://github.com/heygen-com/hyperframes/pull/3038)).
* **Engine:** Let an FX tail decay instead of cutting it at the clip ([6a0e409fc](https://github.com/heygen-com/hyperframes/commit/6a0e409fc2704683613b0a94cc734635dd9ded94), [#3036](https://github.com/heygen-com/hyperframes/pull/3036)).
* **Studio:** Automate and un-automate each effect parameter ([32f29721d](https://github.com/heygen-com/hyperframes/commit/32f29721d2fd9ab7e85c0cf87108aa2c1b9859a9), [#3026](https://github.com/heygen-com/hyperframes/pull/3026)).
* **Studio:** Automate a parameter without reloading the preview ([7203e0a73](https://github.com/heygen-com/hyperframes/commit/7203e0a73ca9f51cde74f0820bc31fed16454972), [#3025](https://github.com/heygen-com/hyperframes/pull/3025)).
* **Studio:** The automation lane itself ([0d3c0246d](https://github.com/heygen-com/hyperframes/commit/0d3c0246d00fe1cfb33492581fc06c5d0abf17ba), [#3024](https://github.com/heygen-com/hyperframes/pull/3024)).
* **Studio:** The geometry and plumbing behind automation lanes ([3cfacf440](https://github.com/heygen-com/hyperframes/commit/3cfacf440d4d0631618df48ed50cd06f42922db6), [#3023](https://github.com/heygen-com/hyperframes/pull/3023)).
* **Audio:** Play automation envelopes in preview and bake them at render ([23ba58cfd](https://github.com/heygen-com/hyperframes/commit/23ba58cfd33a5a5ec627e2e88d65da2cbc43a55c), [#3016](https://github.com/heygen-com/hyperframes/pull/3016)).
* **Audio:** Automation envelope model ([fd97926cf](https://github.com/heygen-com/hyperframes/commit/fd97926cf67e860330624072050043c2bc03ccfe), [#3015](https://github.com/heygen-com/hyperframes/pull/3015)).
* **Audio:** Hear the FX chain while previewing ([9b0c5e855](https://github.com/heygen-com/hyperframes/commit/9b0c5e85596efaf93823bf5f19b7f1d1216ca7d5), [#3014](https://github.com/heygen-com/hyperframes/pull/3014)).
* **Engine:** Render the FX chain offline, and the carve analysis behind it ([cc40e35aa](https://github.com/heygen-com/hyperframes/commit/cc40e35aa0995c2731c4d34a4502d45927997a2d), [#3021](https://github.com/heygen-com/hyperframes/pull/3021)).
## Fixes
* **Studio:** Audition from the playhead while paused, and let an author out of a menu ([6bcf73939](https://github.com/heygen-com/hyperframes/commit/6bcf739390842dc00f94ba1e99f2baea1b989717), [#3190](https://github.com/heygen-com/hyperframes/pull/3190)).
* **Core:** Give the chorus and phaser LFOs a phase, and unwire them on dispose ([b839dbd2c](https://github.com/heygen-com/hyperframes/commit/b839dbd2cc2c7e6e1da432fd8c000cf9e897375c), [#3183](https://github.com/heygen-com/hyperframes/pull/3183)).
* **Core:** Retire worklet processors, retry failed registration, reuse FFT scratch ([f6cf3b242](https://github.com/heygen-com/hyperframes/commit/f6cf3b242bf425b6149a42c9708f287ddc36d905), [#3175](https://github.com/heygen-com/hyperframes/pull/3175)).
* **Engine:** Duck before quantising, chunk the PCM, reschedule on rate change ([ea0344122](https://github.com/heygen-com/hyperframes/commit/ea0344122c22b6e82828216b8ce72e08afef3b46), [#3174](https://github.com/heygen-com/hyperframes/pull/3174)).
* **Audio:** Eleven small correctness fixes across engine, core and the panel ([95751d6b1](https://github.com/heygen-com/hyperframes/commit/95751d6b10c44c982ce1aeed97b4abb44a7bb7d7), [#3173](https://github.com/heygen-com/hyperframes/pull/3173)).
* **Studio:** The shared-row follow-ups ([df57ad4ba](https://github.com/heygen-com/hyperframes/commit/df57ad4bace78f97bef51d9b1dc32ec1f6ded431), [#3215](https://github.com/heygen-com/hyperframes/pull/3215)).
* **Core:** Make audio automation survive being rescheduled ([69face9dc](https://github.com/heygen-com/hyperframes/commit/69face9dc6a8faab5c728860cc7a3f7170d17e07), [#3208](https://github.com/heygen-com/hyperframes/pull/3208)).
* **Core:** Escape `\<` in compiler-emitted composition variable CSS ([f9a20692f](https://github.com/heygen-com/hyperframes/commit/f9a20692f8a0ee10330d0a95de1abd422e92d74a), [#3072](https://github.com/heygen-com/hyperframes/pull/3072)).
* **Core:** Escape `\<` in the compiler-emitted variables script ([91db93aa3](https://github.com/heygen-com/hyperframes/commit/91db93aa345a8dfc2b68ec0ac18c81065a805cd9), [#3071](https://github.com/heygen-com/hyperframes/pull/3071)).
* **Audio:** Two things the envelopes needed to be heard at all ([2c41a74ff](https://github.com/heygen-com/hyperframes/commit/2c41a74ff72bcfe21cbb9beb02c07de6fe247019), [#3017](https://github.com/heygen-com/hyperframes/pull/3017)).
* **Capture:** Bound scroll/evaluate timeouts so heavy pages keep capturing ([43dba2205](https://github.com/heygen-com/hyperframes/commit/43dba22057e1fc131f6a2758e5ae3481b81efdc5), [#3236](https://github.com/heygen-com/hyperframes/pull/3236)).
* **Fonts:** Supplement alias faces from the canonical family ([a16222d9a](https://github.com/heygen-com/hyperframes/commit/a16222d9a278e93b0eff8ebbc62fef04e3c979e9), [#3230](https://github.com/heygen-com/hyperframes/pull/3230)).
## Docs & Examples
* **Skills:** Add /hyperframes-audio, and key the waveform cache by file ([56d8df65c](https://github.com/heygen-com/hyperframes/commit/56d8df65ca0314f0089c366335c19cbf224546e2), [#3211](https://github.com/heygen-com/hyperframes/pull/3211)).
## Catalog
* **Core:** The audio FX preset catalogue, and applying one from the rack ([7d0d74dca](https://github.com/heygen-com/hyperframes/commit/7d0d74dcae1bd9110f64f6836101fc25e2146500), [#3177](https://github.com/heygen-com/hyperframes/pull/3177)).
* **Catalog:** Restore the caption texture preview ([cbd38b32f](https://github.com/heygen-com/hyperframes/commit/cbd38b32f7a1cc38964e898991b8767d3a05506c), [#3258](https://github.com/heygen-com/hyperframes/pull/3258)).
* **Catalog:** Center the menu morph preview ([c71fab322](https://github.com/heygen-com/hyperframes/commit/c71fab322e555463bde94953a006a1c46c0c2a12), [#3256](https://github.com/heygen-com/hyperframes/pull/3256)).
* **Catalog:** Keep the text stagger preview inside the frame ([a2109a863](https://github.com/heygen-com/hyperframes/commit/a2109a863319e6c603b3d5758bc4a180c7cff064), [#3255](https://github.com/heygen-com/hyperframes/pull/3255)).
* **Catalog:** Keep the animated bar chart preview in frame ([158f15e8f](https://github.com/heygen-com/hyperframes/commit/158f15e8f0739c08d72eca46b34904285dae09c5), [#3254](https://github.com/heygen-com/hyperframes/pull/3254)).
* **Catalog:** Keep the typewriter preview inside the frame ([dc01a12d7](https://github.com/heygen-com/hyperframes/commit/dc01a12d71022b60ee0d12cad74c46a2e8753f81), [#3249](https://github.com/heygen-com/hyperframes/pull/3249)).
* **Studio:** The FX panel, generated from the registry ([c2996c862](https://github.com/heygen-com/hyperframes/commit/c2996c8626135db5253519359d8a063d3bafad8d), [#3022](https://github.com/heygen-com/hyperframes/pull/3022)).
* **Registry:** Add ChatGPT and Claude exchange templates ([0474d4ae2](https://github.com/heygen-com/hyperframes/commit/0474d4ae266ccc4b482ed6631fc46fb2dd19b1af), [#3244](https://github.com/heygen-com/hyperframes/pull/3244)).
* Simplify the Catalog overview with a section tour ([9b1232965](https://github.com/heygen-com/hyperframes/commit/9b1232965201baae4764c470edd33878a0c1ceef), [#3240](https://github.com/heygen-com/hyperframes/pull/3240)).
* **Core:** Web Audio graphs for the FX registry ([2350f9b69](https://github.com/heygen-com/hyperframes/commit/2350f9b69b10c32ec12d0f84800133aa5173804e), [#3020](https://github.com/heygen-com/hyperframes/pull/3020)).
* **Core:** The audio FX registry ([5752d2249](https://github.com/heygen-com/hyperframes/commit/5752d224929f00ac2fa2757df02339f781cdd6fa), [#3019](https://github.com/heygen-com/hyperframes/pull/3019)).
* **Registry:** Normalize ai chat portrait canvas ([93fbb6d7f](https://github.com/heygen-com/hyperframes/commit/93fbb6d7fd3e4c925927df994bf7cbab8d223d92), [#3235](https://github.com/heygen-com/hyperframes/pull/3235)).
* **Registry:** Align notes reveal typing ([c69692464](https://github.com/heygen-com/hyperframes/commit/c69692464ea42d5d4c4ff878f60e0642f25e419e), [#3234](https://github.com/heygen-com/hyperframes/pull/3234)).
## Internal
* **Studio:** Lift the effect row out of the FX section file ([2f97fc2b8](https://github.com/heygen-com/hyperframes/commit/2f97fc2b89c67725a03b70f95e2510e0bc90b3a3), [#3182](https://github.com/heygen-com/hyperframes/pull/3182)).
* **Studio:** Lift the carve out of the FX section file ([c327740c7](https://github.com/heygen-com/hyperframes/commit/c327740c79e2cb448a26cc1b848c45d4b3ecd7ed), [#3181](https://github.com/heygen-com/hyperframes/pull/3181)).
* **Audio:** The review's cleanup list, and the design record behind the rack ([fd4d41153](https://github.com/heygen-com/hyperframes/commit/fd4d41153c76f25f50feb4f4c3b380787cbfb136), [#3176](https://github.com/heygen-com/hyperframes/pull/3176)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.107...v0.7.108).
Studio can now edit and style rich text directly in the preview, including mixed selections and partial character ranges. Feedback prompts now appear after renders, while playback, capture, and editing fixes improve reliability.
## Features
* **Studio:** Show every colour of a mixed selection in the swatch ([896bc336a](https://github.com/heygen-com/hyperframes/commit/896bc336a2eb058fa7cd21e6686b3c6a23879d28), [#3144](https://github.com/heygen-com/hyperframes/pull/3144)).
* **Studio:** Edit and style text in the preview ([4cc46f5f9](https://github.com/heygen-com/hyperframes/commit/4cc46f5f9f6ba063bcebcc663a9b04c008f119d4), [#3143](https://github.com/heygen-com/hyperframes/pull/3143)).
* **Studio:** Apply a style to a run of characters ([cb73c8dc2](https://github.com/heygen-com/hyperframes/commit/cb73c8dc2e0d9c6b911044de0e0d7fb5fbb49752), [#3142](https://github.com/heygen-com/hyperframes/pull/3142)).
* **Core:** Sanitize rich text on the way into a composition ([636dc042a](https://github.com/heygen-com/hyperframes/commit/636dc042a7b773d9038b6bea589b4118051764c5), [#3141](https://github.com/heygen-com/hyperframes/pull/3141)).
* **Studio:** Ask for feedback when a render ends, not on a session counter ([20d915938](https://github.com/heygen-com/hyperframes/commit/20d915938b33301d78402407d167841f8da3e9a5), [#3205](https://github.com/heygen-com/hyperframes/pull/3205)).
## Fixes
* **Skills:** Stop embedded-captions shipping author-only paths; dedupe slideshow ([d3a4e9037](https://github.com/heygen-com/hyperframes/commit/d3a4e9037096c0234c58b44fcbcc7df87ba8958b), [#3225](https://github.com/heygen-com/hyperframes/pull/3225)).
* **Capture:** Fall back from networkidle2 to domcontentloaded on nav timeout ([7860d1943](https://github.com/heygen-com/hyperframes/commit/7860d19433e45507c9544f6e6b542e7e572e47c9), [#3224](https://github.com/heygen-com/hyperframes/pull/3224)).
* **Studio:** Match the write receipt in dev, so an edit stops reloading the preview ([fceb37655](https://github.com/heygen-com/hyperframes/commit/fceb376551093be69e918786532d88eb63a2d07c), [#3206](https://github.com/heygen-com/hyperframes/pull/3206)).
* **Producer:** Mix audio into a container that can record encoder delay ([dc4383113](https://github.com/heygen-com/hyperframes/commit/dc4383113cfad3677d016b457cce8b4d41ff7b9c), [#3200](https://github.com/heygen-com/hyperframes/pull/3200)).
* **Core:** Key the preview volume envelope to the clip, not the timeline ([eee9b26fb](https://github.com/heygen-com/hyperframes/commit/eee9b26fb78a6bf3a80e81d6077f7fd93aeca150), [#3198](https://github.com/heygen-com/hyperframes/pull/3198)).
* **Core:** Stop a graded plate painting through an inactive clip ([91f14958c](https://github.com/heygen-com/hyperframes/commit/91f14958cc449f95a412993373077a6f53fabc1a), [#3196](https://github.com/heygen-com/hyperframes/pull/3196)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.106...v0.7.107).
Catalog pages now play the real composition in the player instead of a recorded video. The sidebar groups 358 items under eight sections you can open.
Every item with variables gets a panel you can change. The preview rebuilds with your values, a link keeps them, and the install command copies with them attached. Reinstalling an item no longer overwrites your edits.
## Fixes
* **Studio:** Read the rotate property when measuring an element's angle ([3e5be0e8c](https://github.com/heygen-com/hyperframes/commit/3e5be0e8c30812e45d302f24dc5aecd3d135ef04), [#3163](https://github.com/heygen-com/hyperframes/pull/3163)).
## Docs & Examples
* **Changelog:** Weekly digest 2026-08-03–2026-08-10 ([945988d61](https://github.com/heygen-com/hyperframes/commit/945988d61facb36ae1a7e27519db2acb3c84fced), [#3154](https://github.com/heygen-com/hyperframes/pull/3154)).
* **Studio:** Write down what Studio does not tell you about itself ([604f02b31](https://github.com/heygen-com/hyperframes/commit/604f02b31a4e5950262066cf39adbc01d65bbade), [#3165](https://github.com/heygen-com/hyperframes/pull/3165)).
## Catalog
* **Catalog:** Put the variables panel back, on payloads ([1ae2067b8](https://github.com/heygen-com/hyperframes/commit/1ae2067b8da54555889f09f05b826fc791c5ec4c), [#3199](https://github.com/heygen-com/hyperframes/pull/3199)).
* **Catalog:** Group the sidebar by what you came to make ([ce18acf07](https://github.com/heygen-com/hyperframes/commit/ce18acf075d56e44ebe6382edffc8f3baa96c2c8), [#3194](https://github.com/heygen-com/hyperframes/pull/3194)).
* **CLI:** Keep your edits when you reinstall a catalog item ([0c33b2dc7](https://github.com/heygen-com/hyperframes/commit/0c33b2dc7ab711ebd9c124ce44535d36d47da748), [#3193](https://github.com/heygen-com/hyperframes/pull/3193)).
* **Registry:** Bring back the video-primitive moves ([9734578e6](https://github.com/heygen-com/hyperframes/commit/9734578e6065d6dec8993c4e30a978263c3eaa8b), [#3169](https://github.com/heygen-com/hyperframes/pull/3169)).
* **Catalog:** Keep the recorded video for canvas drawElement previews ([0f7630519](https://github.com/heygen-com/hyperframes/commit/0f763051910f9b38ada67a0f3699a0a75f00b22a), [#3171](https://github.com/heygen-com/hyperframes/pull/3171)).
* **Catalog:** Resolve assets a script loads by name ([470f802d9](https://github.com/heygen-com/hyperframes/commit/470f802d9f387b0a6e77e25d0b199bf9c16e68f0), [#3170](https://github.com/heygen-com/hyperframes/pull/3170)).
* **Catalog:** Play the real composition on catalog pages ([536165b6e](https://github.com/heygen-com/hyperframes/commit/536165b6ef1ad2fbd5d799a4a43fe0f31495852f), [#3168](https://github.com/heygen-com/hyperframes/pull/3168)).
* **Media Use:** Derive provider cost tier from the registry ([6de29f5be](https://github.com/heygen-com/hyperframes/commit/6de29f5beabf29545c1c70e97530d4cf24542c5b), [#3155](https://github.com/heygen-com/hyperframes/pull/3155)).
## Internal
* Regenerate the skills manifest ([0156b5688](https://github.com/heygen-com/hyperframes/commit/0156b5688da70690770ec8dd5253482d0b82c7df), [#3203](https://github.com/heygen-com/hyperframes/pull/3203)).
## Other Changes
* **Studio:** Format AGENTS.md ([a58ebf610](https://github.com/heygen-com/hyperframes/commit/a58ebf610bc56dcced7505c706e031cc8fd36d3c), [#3167](https://github.com/heygen-com/hyperframes/pull/3167)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.105...v0.7.106).
Catalog search now understands meaning, not just keywords, and runs entirely on your machine. Finding the right block no longer depends on guessing its name.
## Features
* **Scripts:** Fail a branch that deletes files main still ships ([f28bc80a1](https://github.com/heygen-com/hyperframes/commit/f28bc80a1d9c238ecaf36d8a5fee13933a3824fb), [#3150](https://github.com/heygen-com/hyperframes/pull/3150)).
* **Scripts:** Typecheck the scripts directory ([79dff2051](https://github.com/heygen-com/hyperframes/commit/79dff2051699c9bae28088eb795c4cbebff6dde1), [#3149](https://github.com/heygen-com/hyperframes/pull/3149)).
## Fixes
* **Producer,engine:** Stop mislabelling capture mode, and name the silent drawElement refusals ([33ac86fd3](https://github.com/heygen-com/hyperframes/commit/33ac86fd3842f5f40cc66033fd8ad06d0c495c44), [#3151](https://github.com/heygen-com/hyperframes/pull/3151)).
* **CLI:** Follow every redirect a host may answer with ([db3de4c1b](https://github.com/heygen-com/hyperframes/commit/db3de4c1bf2fa8e093aeb26c67f79e352ef5af89), [#3148](https://github.com/heygen-com/hyperframes/pull/3148)).
## Catalog
* **CLI:** Search the catalog by meaning, on this machine ([68205dbbc](https://github.com/heygen-com/hyperframes/commit/68205dbbc159412209663ede7732629b4f50bcf1), [#3089](https://github.com/heygen-com/hyperframes/pull/3089)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.104...v0.7.105).
Selecting and moving elements in Studio's canvas now behaves the way it looks. Multi-selection sticks, a dragged group lands where you dropped it, a resized element keeps its size, and editing no longer flashes the preview.
## Fixes
* **Studio:** Canvas selection, drag and resize correctness ([17ac986bf](https://github.com/heygen-com/hyperframes/commit/17ac986bfe0fffbbc8aac2a68b9e9814f561b562), [#3146](https://github.com/heygen-com/hyperframes/pull/3146)).
* **Studio:** Stop a Studio edit from reloading the preview ([bea32b8aa](https://github.com/heygen-com/hyperframes/commit/bea32b8aae5bd9008c5fbe453a17a8a4588365ba), [#3137](https://github.com/heygen-com/hyperframes/pull/3137)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.103...v0.7.104).
Long renders use the faster parallel capture path again. A gate added in 0.7.101 had switched it off for most installs, making renders slower.
## Features
* **Core,cli:** Ship the DE parallel router fleet-wide — remove the canary gate ([19defeabf](https://github.com/heygen-com/hyperframes/commit/19defeabfe8fa47747d1d8bc087a84d69a09cb59)).
## Fixes
* **Core:** Retry bpm-detective import after transient failure ([b4bd67040](https://github.com/heygen-com/hyperframes/commit/b4bd670402b82f25c1f5e0343336e21455284f80), [#2736](https://github.com/heygen-com/hyperframes/pull/2736)).
## Docs & Examples
* Fix preview port in DOCS\_GUIDELINES example ([9ec9e3a71](https://github.com/heygen-com/hyperframes/commit/9ec9e3a711531b3d45c30a1e2c3006df97dbe5cb), [#2903](https://github.com/heygen-com/hyperframes/pull/2903)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.102...v0.7.103).
Text with spaces in it now reaches your composition intact. Before, a space could arrive as a plus sign, which garbled headlines and left some shapes drawing nothing at all.
Compositions can also read their own variables the moment they start, because the runtime now loads before your scripts do.
## Fixes
* Preserve the composition query and serve the runtime before author scripts ([b6ff3ab74](https://github.com/heygen-com/hyperframes/commit/b6ff3ab74556b844dd87b067cf850badc000bba7), [#3114](https://github.com/heygen-com/hyperframes/pull/3114)).
* **CLI:** Stop skills update deleting skills the manifest never covered ([ed3ff98ce](https://github.com/heygen-com/hyperframes/commit/ed3ff98ce0443a232fc740a5821c601e67fd09cc), [#3118](https://github.com/heygen-com/hyperframes/pull/3118)).
* **Core:** Draw the dim baseline only from tweens the guess still applies to ([cef0dde5f](https://github.com/heygen-com/hyperframes/commit/cef0dde5f2e9028349be0eef31e6ba2622405fe2)).
* **Core:** Let a composition declare its caption colour states ([1e7799bfb](https://github.com/heygen-com/hyperframes/commit/1e7799bfbb08c30a55b01a262653f40a2bbeda8a)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.101...v0.7.102).
Faster drawElement capture starts rolling out to a small slice of installs. Five in
a hundred now use the parallel capture path for long renders. If a render ever has
to fall back, that install turns it off and keeps it off.
Set HF\_DE\_PARALLEL\_ROUTER=false to opt out, or =true to opt in early. Studio also
stops three editor crashes.
## Features
* **Cli,core:** Ramp the default-on router through the canary ([4a2514232](https://github.com/heygen-com/hyperframes/commit/4a2514232b9f20ea4baa94510e79a42bae85e92f)).
* **Producer:** Enable the parallel-DE router by default, behind a per-install circuit breaker ([c6df112ac](https://github.com/heygen-com/hyperframes/commit/c6df112ac1843e228a9d40bbcb6bad1752f53de5)).
## Fixes
* **Studio:** Stop three crash-boundary trips in the editor ([d8a91fc34](https://github.com/heygen-com/hyperframes/commit/d8a91fc347df4def4a957609d1847ca3306eb867), [#3102](https://github.com/heygen-com/hyperframes/pull/3102)).
* **CLI:** Keep a set-but-empty router env var breaker-managed (review) ([af535080a](https://github.com/heygen-com/hyperframes/commit/af535080a250bb150c0a6448517a075cd8076818)).
## Docs & Examples
* **CLI:** Stop calling the router trial an opt-in in risk prose ([1033d0327](https://github.com/heygen-com/hyperframes/commit/1033d03271fb381be51fbc1103063cd8147a626b)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.100...v0.7.101).
Components that another composition mounts now keep their own styles in the live preview. Some of them rendered unstyled before, even though the video they produced was correct.
Screenshot captures on software rendering no longer accumulate earlier frames, and Studio keeps the preview alive in a tight window.
## Features
* **Producer:** Sniff HTML payload before ffprobe in resolveMediaDuration ([8a11e9776](https://github.com/heygen-com/hyperframes/commit/8a11e9776d3c65c2512c595bbde3dfc5bb194f39)).
## Fixes
* **Engine:** Stop SwiftShader ghosting in software screenshot captures ([b57dc13cb](https://github.com/heygen-com/hyperframes/commit/b57dc13cb6c8752c4f8f9426cfda2faf529136c2), [#3096](https://github.com/heygen-com/hyperframes/pull/3096)).
* **Studio:** Resize an element whose scale is an instant hold ([a850e97f3](https://github.com/heygen-com/hyperframes/commit/a850e97f3d5a2cfcf183aec2cc2620020e8e1bf4), [#3092](https://github.com/heygen-com/hyperframes/pull/3092)).
* **Core:** Stop dropping a mounted composition styles, and gate the divergence ([8d9db3df7](https://github.com/heygen-com/hyperframes/commit/8d9db3df731409d5aaed4ba0af70ea1c81ab40e4), [#3094](https://github.com/heygen-com/hyperframes/pull/3094)).
* **Compiler:** Split font-family only on top-level commas ([172311e95](https://github.com/heygen-com/hyperframes/commit/172311e95e99b04cd2d76d43de9bbadd69c630ab), [#3067](https://github.com/heygen-com/hyperframes/pull/3067)).
* **Studio:** Keep the preview alive when the window is tight ([d5cc1c9c6](https://github.com/heygen-com/hyperframes/commit/d5cc1c9c6249c27a63269288d8b7771656eb50db), [#3091](https://github.com/heygen-com/hyperframes/pull/3091)).
* **CLI:** Refresh identity persistence classification ([7640adc5f](https://github.com/heygen-com/hyperframes/commit/7640adc5f2c39bd5d330aca3d0180ea2f67a793d)).
* **Producer:** Classify JSON error bodies as non-media sources too ([349c066a8](https://github.com/heygen-com/hyperframes/commit/349c066a83c21046f888073776212348c2c5057b)).
* **Producer:** Scope and harden the markup-payload sniff ([f3689c148](https://github.com/heygen-com/hyperframes/commit/f3689c148190b0c72d1b5296b2a5b740d8dd97d8)).
## Catalog
* **Scripts:** Render template-only blocks in catalog previews ([218eff7d3](https://github.com/heygen-com/hyperframes/commit/218eff7d361487becf7e1d6fc0d85453ac199b5e), [#3098](https://github.com/heygen-com/hyperframes/pull/3098)).
## Internal
* **Core:** Settle the four remaining preview-vs-render divergences ([57ec008cb](https://github.com/heygen-com/hyperframes/commit/57ec008cb295efb0a817840a1eadac53fbbf355e), [#3097](https://github.com/heygen-com/hyperframes/pull/3097)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.99...v0.7.100).
Publishing now retries brief network failures during upload and tells you which step failed when it cannot recover.
Long timeouts are not retried, and signed upload secrets stay out of error messages.
## Fixes
* **CLI:** Harden publish retry behavior ([dd629697d](https://github.com/heygen-com/hyperframes/commit/dd629697d3356971e50132703b8a897c1a79bfdf)).
* **CLI:** Recover transient publish failures ([f2d6ce324](https://github.com/heygen-com/hyperframes/commit/f2d6ce32459fc4c6be604a152e8707df03ce96e2)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.98...v0.7.99).
Failed renders now record whether the parallel drawElement router was active.
That state was on almost every successful render and almost no failed one, so a
crash or hang looked the same as a render that never used the router. Nothing
changes about how renders run.
## Fixes
* **Producer:** Record routing state on the failure path ([a3d13e267](https://github.com/heygen-com/hyperframes/commit/a3d13e2673405dee68643003574d5b260c4d5d18)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.97...v0.7.98).
Studio resizes now keep animated elements exactly where they were dropped. The saved GSAP scale and position match the frame shown during the gesture, preventing post-drop jumps.
## Fixes
* **Studio:** Keep first, repeated, rotated, uniform, and per-axis animated resizes pinned to their drop point ([#3076](https://github.com/heygen-com/hyperframes/pull/3076)).
* **Studio:** Measure stylesheet-sized and legacy elements from their real box instead of a 200px fallback ([#3076](https://github.com/heygen-com/hyperframes/pull/3076)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.96...v0.7.97).
Canary rollouts now record why each install landed in or out of a cohort, on both
the CLI and Studio. Before this, a forced override and an ordinary cohort roll
looked identical, so cohort changes could not be explained. Telemetry events also
say whether an install's anonymous id will survive to the next run.
For everyday use the visible changes are a Studio fix for rooted timeline media in
preview, cancelable thumbnail generation, and a large pass over the docs examples.
## Features
* **Studio:** Emit the canary reason on Studio events too ([b3990ac78](https://github.com/heygen-com/hyperframes/commit/b3990ac789a40242b38eb740475811a03e701b2b)).
* **Core,cli:** Emit the canary decision reason alongside the assignment ([076657a63](https://github.com/heygen-com/hyperframes/commit/076657a63994a911deba65cd4d54131d5997e1d1)).
* **CLI:** Classify identity persistence on every telemetry event ([3b65321a2](https://github.com/heygen-com/hyperframes/commit/3b65321a204383582e3794ac19eca5d6f5eb3474), [#3065](https://github.com/heygen-com/hyperframes/pull/3065)).
## Fixes
* **Studio:** Route rooted timeline media through preview ([88853f170](https://github.com/heygen-com/hyperframes/commit/88853f170f9ab6c7bfa515d59694d1f995ac0e7d), [#3061](https://github.com/heygen-com/hyperframes/pull/3061)).
* **Scripts:** Import the changelog style note instead of duplicating it ([8cadefa5d](https://github.com/heygen-com/hyperframes/commit/8cadefa5d8d0f558863e35327b6059aeef76523c)).
* **Scripts:** Restore the texture instruction phrase a core test pins ([ddbd547fa](https://github.com/heygen-com/hyperframes/commit/ddbd547fad33042c10172b4e3607ed0b12fd7a06)).
* **Scripts:** The repo already knew which items have no poster ([74ba97b7e](https://github.com/heygen-com/hyperframes/commit/74ba97b7edcc6ed2166fe00ee280c8c05ff718fc)).
* **Scripts:** Actually commit the delivery encode ([4f1ace9f4](https://github.com/heygen-com/hyperframes/commit/4f1ace9f476fe10e9b6da2a9e9bae0332f5ead1a)).
* **Docs:** Stop claiming a poster image that was never generated ([a6217f5ed](https://github.com/heygen-com/hyperframes/commit/a6217f5ed145b28e80ecfb5744fd7d3537f1335e)).
## Performance
* **Studio Server:** Coordinate cancelable thumbnail generation ([96861cbaf](https://github.com/heygen-com/hyperframes/commit/96861cbafc33e9e7b853b31c56610d50599cb96b), [#2720](https://github.com/heygen-com/hyperframes/pull/2720)).
## Docs & Examples
* Add user interview booking links ([27d113e56](https://github.com/heygen-com/hyperframes/commit/27d113e56c8ebb52a805e73308ffbfe313f8cc32), [#3059](https://github.com/heygen-com/hyperframes/pull/3059)).
* Correct composition offset rationale; pin nav fix; label-in-name ([fed2baf27](https://github.com/heygen-com/hyperframes/commit/fed2baf27882cda0e19ae0e972f7335a162c36eb)).
* **Examples:** Stop the sound control from following the card's link ([83db94e75](https://github.com/heygen-com/hyperframes/commit/83db94e75e87271c86f8823e636b729c500cbac9)).
* **Examples:** Reset control state on offscreen release; precise a11y labels ([f3d1d531d](https://github.com/heygen-com/hyperframes/commit/f3d1d531d138d69e7d347391e5f7a4b35fb599a3)).
* Complete the media-start layer map + fix the third page ([c49fea2e0](https://github.com/heygen-com/hyperframes/commit/c49fea2e0c4caaa7c4329493cdd5112581addc06)).
* **Examples:** Reduced-motion play starts both films; precise media-start layers ([630c8900f](https://github.com/heygen-com/hyperframes/commit/630c8900f5866d5cd51eb3da96293981e41fc971)).
* **Studio:** Note the third arrow-key meaning after merging Timeline navigation ([b541245f1](https://github.com/heygen-com/hyperframes/commit/b541245f1a49b1c784797050c7ae81040115d946)).
* **Examples:** Allow voluntary playback under reduced motion; a11y parity ([c9fd7465c](https://github.com/heygen-com/hyperframes/commit/c9fd7465c9b9d516b53241fee1f8ca78d18ba905)).
* **Sdk:** Fix dispatch/can contract, second stale GSAP site, media-start layers ([8e658bd6c](https://github.com/heygen-com/hyperframes/commit/8e658bd6c932ee1b8c65f247f9767d75fbd56275)).
* **Examples:** Intersection-gate the recreate pair too ([aa077e000](https://github.com/heygen-com/hyperframes/commit/aa077e000df94db2348fa6d744909a67706b09e1)).
* **Examples:** Make hover-audio accessible, lazy-loaded, and guard-complete ([0467bc812](https://github.com/heygen-com/hyperframes/commit/0467bc812916259a53a3f08eb30fb8a35586ee19)).
* Correct three source-contradiction findings from review ([0f6259d46](https://github.com/heygen-com/hyperframes/commit/0f6259d461cfb678d60ae7926d343fbe44aee925)).
* **Theme:** Brand the Playground CTA + align the navbar logo ([b62c3fd65](https://github.com/heygen-com/hyperframes/commit/b62c3fd65617cb1d89c828e1f7460893d34a3216)).
* **Nav:** Lift 30 Days above the update feeds in Explore ([c53c7efd1](https://github.com/heygen-com/hyperframes/commit/c53c7efd1ec1070251ecf1a25643f96d5b96e7a7)).
* **Examples:** Fix silent recreate references (stale keys -> new audio keys) ([4b1a526fa](https://github.com/heygen-com/hyperframes/commit/4b1a526facb128b98a33a2c8878761320bfea529)).
* **Examples:** K3 promo now hover-to-hear with its audio version from X ([821189586](https://github.com/heygen-com/hyperframes/commit/821189586f19da6a67472ddfb952a63f0f1afc85)).
* **Examples:** Replace two padded launch films + wire figma audio ([630c6c880](https://github.com/heygen-com/hyperframes/commit/630c6c880ddf164ca3dbad0a6979b0d943ec2691)).
* **Examples:** More hover-audio + a 'Where HyperFrames plugs in' strip ([59a2ee31c](https://github.com/heygen-com/hyperframes/commit/59a2ee31c93818ce06c8575af4043948f0404a34)).
* **Examples:** Hover-audio on six more grid films from the X launch archive ([e6bc8f139](https://github.com/heygen-com/hyperframes/commit/e6bc8f139c032d202d94fe2b4837b2e1b0f45ff8)).
* **Examples:** Hover-to-hear on the four launch films that have audio masters ([fb6a82c50](https://github.com/heygen-com/hyperframes/commit/fb6a82c5052d5c801ecd6ec52d1ceadf4757e6a9)).
* **30 Days:** Hover a card to hear the film's audio ([5361b9e10](https://github.com/heygen-com/hyperframes/commit/5361b9e10c80c787527ffa25a0db01002ddebbf0)).
* **Examples:** Drop three dead source links (no such launch folder) ([8298bd439](https://github.com/heygen-com/hyperframes/commit/8298bd439092f67badef626987f385bb020a61dc)).
* **Examples:** Bind reference video muted to state so unmute sticks ([407a5fd51](https://github.com/heygen-com/hyperframes/commit/407a5fd5139cda1dc10aae21aa52f6bc69c1e502)).
* **Examples:** Sync the recreate pairs with a tap-to-unmute button ([bde03484a](https://github.com/heygen-com/hyperframes/commit/bde03484ae46345d4f10051a6db7155073e1eb76)).
* **Examples:** Add 1:1 recreate-any-video comparison block ([98ae45e06](https://github.com/heygen-com/hyperframes/commit/98ae45e0661f120cedb8bda2d6002224db146924)).
* 30 Days shows all thirty films, the real ones ([a46bc9d56](https://github.com/heygen-com/hyperframes/commit/a46bc9d565de76ad6e6dc5d35c6a9ff7d1e5cf76)).
* Remove the Reference Project — nobody wants to be sent to GitHub ([b5509602f](https://github.com/heygen-com/hyperframes/commit/b5509602fa9f8ad9944c79b9f73f3a440357ecbf)).
* 30 Days keeps its structure but borrows no videos ([06d2d6f24](https://github.com/heygen-com/hyperframes/commit/06d2d6f24c31b094198e4cd630d1f34c5df5dd2e)).
* Examples shows 19 launch films grouped by what they prove, and 30 Days moves into Explore ([8483b51d4](https://github.com/heygen-com/hyperframes/commit/8483b51d4b7111710b8ac98befbd3c9ca07432cd)).
* Light-theme videos on nine guides, plus two rewritten pages ([ad4c6a9b6](https://github.com/heygen-com/hyperframes/commit/ad4c6a9b6e0781e4253507ec4a179b83b3faee9b)).
* Put the ten workflows in one place, and connect the two tracks ([f742084fa](https://github.com/heygen-com/hyperframes/commit/f742084fa85c1e2be1c0711c4467c48d4cd6f214)).
* Name the two workflows the captions page covers ([c66961637](https://github.com/heygen-com/hyperframes/commit/c669616370db90f63ef4828e53db8a34e760406b)).
* The examples gallery now tells you what it is ([18c0b8319](https://github.com/heygen-com/hyperframes/commit/18c0b8319d657d6b7578c6a34b8c183b5ff1865e)).
* E\_NO\_GSAP\_TIMELINE is not a missing feature ([d3331aad2](https://github.com/heygen-com/hyperframes/commit/d3331aad28ccb1f3ace49227e06d844e0c4ee58d)).
* An Inspector map that matches the Inspector, and an example that can run ([9a659053d](https://github.com/heygen-com/hyperframes/commit/9a659053db3a3da95a4eece58f15e871ce9dc9d8)).
* Four more the source contradicts, one of them mine ([af5ebf09c](https://github.com/heygen-com/hyperframes/commit/af5ebf09ce8bd15991da51bf83a9fe852e8dca29)).
* Three things the source contradicts, found by reading the pages ([d01253771](https://github.com/heygen-com/hyperframes/commit/d01253771fa7f3eac4fa9126c7bedb9911e0be30)).
* A compare example that works, and prose instead of a semicolon list ([1a22d6542](https://github.com/heygen-com/hyperframes/commit/1a22d6542a9a1492882cd11943b68e4a29522407)).
* Three Studio shortcuts the page never mentioned ([f28b6d2bf](https://github.com/heygen-com/hyperframes/commit/f28b6d2bf73490cae7dd0403682064169951af5a)).
* Write down the house narrator, and stop the videos sounding like two products ([bb7b0c899](https://github.com/heygen-com/hyperframes/commit/bb7b0c899f91bcfd1b4f36378bc750aa74e95976)).
* Put the slideshow demo on the slideshow page ([199885b85](https://github.com/heygen-com/hyperframes/commit/199885b85edea981a3ce132fd09e3bcaac7ff316)).
* Six pages get a real film instead of a six-second clip ([b4648e0e5](https://github.com/heygen-com/hyperframes/commit/b4648e0e5a45734970e3e905efcac4cf76d51057)).
* Make the ten hardest-reading prompting pages readable ([8dba394d4](https://github.com/heygen-com/hyperframes/commit/8dba394d4dd52678cd49b68a3ec8fd8a921a1d6d)).
* Stop serving render masters as if they were deliverables ([158d0fea1](https://github.com/heygen-com/hyperframes/commit/158d0fea1fa8e267f9e77aafc1f359ae37781beb)).
* Draw the project model instead of describing it twice ([31366d724](https://github.com/heygen-com/hyperframes/commit/31366d724d83ff855c1a02edb2c37ff441a3648c)).
* The last five blind guides now show the thing ([f595a7d68](https://github.com/heygen-com/hyperframes/commit/f595a7d68388c2e8842d3b8f5346273d0f9450b7)).
* Move 19 anchor links onto the headings that now exist ([d16f6e69d](https://github.com/heygen-com/hyperframes/commit/d16f6e69d72c8582fac9577f57aaad158596b1e1)).
* Make the two hardest-reading pages readable, and draw the two core concepts ([eb199bd15](https://github.com/heygen-com/hyperframes/commit/eb199bd1595f7774a16fb7baea12510a8d8a02d6)).
* Four more guides show the thing instead of describing it ([8762887a5](https://github.com/heygen-com/hyperframes/commit/8762887a5b3773f460fa61e017d870f68f5d540a)).
* Point two prompting links at headings that exist ([951c6ea45](https://github.com/heygen-com/hyperframes/commit/951c6ea45c1eddc377a40542a84acd40d1f472ef)).
* Give every click-to-play video an audio track ([60f09dfcf](https://github.com/heygen-com/hyperframes/commit/60f09dfcfd3f8b18ac51e9d26f34e614969477e8)).
* Keep the audio on the Huly launch film ([61cd3f1da](https://github.com/heygen-com/hyperframes/commit/61cd3f1da2afd8b59ee1a729c6653513a70e73bf)).
* Show GSAP keyframes moving, and drop the weakest video on Examples ([ef9980948](https://github.com/heygen-com/hyperframes/commit/ef9980948206fa6c13f7c0c55e00f3f906c42a9f)).
* Rewrite four pages that told instead of showed ([72d4016f5](https://github.com/heygen-com/hyperframes/commit/72d4016f5f25fb71c856f0d6fd9e52e91686c83a)).
* Show the work on Media effects, Product launch, and Examples ([84b5160b6](https://github.com/heygen-com/hyperframes/commit/84b5160b663c8bf758c4134fdffceba4982ae374)).
## Catalog
* **Catalog:** Explicit section ownership, no body-sniffing heuristic ([d373c3f4a](https://github.com/heygen-com/hyperframes/commit/d373c3f4a09f59b349586c0885be47388844a658)).
* **Catalog:** Restore the required Related topics section on generated pages ([6ff6601dd](https://github.com/heygen-com/hyperframes/commit/6ff6601dd03026f55be3d974222ac5c4ff890a8e)).
* Quiet fallow complexity on the catalog generator's grown functions ([b33974cf7](https://github.com/heygen-com/hyperframes/commit/b33974cf72270fded5b9caf2244f26acf6b3c7e6)).
* **Scripts:** Drop the catalog poster instead of guarding it, and cut the encode pass down ([592301248](https://github.com/heygen-com/hyperframes/commit/592301248ea93336189aa723b0b24971f7173ae0)).
* **Docs:** The poster guard again, for the catalog index this time ([663f3e832](https://github.com/heygen-com/hyperframes/commit/663f3e8325c192324520113fa1819b3e1fcdd07a)).
* Rebuild the catalog generator, and show what background removal and HDR do ([2a7d9bd0a](https://github.com/heygen-com/hyperframes/commit/2a7d9bd0ad114a7aadf65f1f65b8556f8da6d61d)).
## Internal
* Regenerate skills manifest after the media-use voice rule ([00a4f454e](https://github.com/heygen-com/hyperframes/commit/00a4f454ee75d4c434ee034f6dc62e5e924783fb)).
## Other Changes
* **Scripts:** Oxfmt the nav-suppression assertion ([aa928f399](https://github.com/heygen-com/hyperframes/commit/aa928f399a571fa9b61c67a931db4a97dfb1875d)).
* Format the house-narrator note in tts.md, resync manifest ([08fadcef4](https://github.com/heygen-com/hyperframes/commit/08fadcef41d1128ed2493978ea665874306f60c6)).
* Format changelog-weekly.ts ([fffc56c33](https://github.com/heygen-com/hyperframes/commit/fffc56c33b96c0fa9e3db15cb0f4799d0cbd6e5b)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.94...v0.7.96).
Studio now previews rooted timeline media through the correct asset route,
preventing missing clips in nested project layouts. Thumbnail work is cancelable
under rapid edits, while refreshed docs make key workflows easier to learn.
## Fixes
* **Studio:** Route rooted timeline media through preview ([88853f170](https://github.com/heygen-com/hyperframes/commit/88853f170f9ab6c7bfa515d59694d1f995ac0e7d), [#3061](https://github.com/heygen-com/hyperframes/pull/3061)).
## Performance
* **Studio Server:** Coordinate cancelable thumbnail generation ([96861cbaf](https://github.com/heygen-com/hyperframes/commit/96861cbafc33e9e7b853b31c56610d50599cb96b), [#2720](https://github.com/heygen-com/hyperframes/pull/2720)).
## Docs & Examples
* Rebuild the docs and catalog with real films, accessible playback, clearer workflow maps, and source-checked SDK guidance ([b793e42ef](https://github.com/heygen-com/hyperframes/commit/b793e42efdf6d674f98da0a63fcc80947ba1751b), [#3010](https://github.com/heygen-com/hyperframes/pull/3010)).
* Add user interview booking links ([27d113e56](https://github.com/heygen-com/hyperframes/commit/27d113e56c8ebb52a805e73308ffbfe313f8cc32), [#3059](https://github.com/heygen-com/hyperframes/pull/3059)).
## Internal
* **CLI:** Classify identity persistence on every telemetry event ([3b65321a2](https://github.com/heygen-com/hyperframes/commit/3b65321a204383582e3794ac19eca5d6f5eb3474), [#3065](https://github.com/heygen-com/hyperframes/pull/3065)).
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.94...v0.7.95).
The CLI now supports explicit RFC 8628 device authorization for attended SSH
and remote-terminal sessions, so users can sign in without copying API keys or
exposing a loopback callback. The flow is fail-closed, validates minted tokens
before atomic persistence, and leaves the existing browser login unchanged.
## Features
* **CLI:** Add device authorization login ([b9233525b](https://github.com/heygen-com/hyperframes/commit/b9233525b2e02ec9329445ab2602ebd557033daf), [#2836](https://github.com/heygen-com/hyperframes/pull/2836))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.93...v0.7.94).
Studio now preserves and recovers external file edits instead of silently
overwriting them, while logical timeline navigation makes keyboard control more
predictable. The engine and producer also harden remote downloads, ffprobe
invocation, telemetry path redaction, GPU verification, and cross-frame-rate
BeginFrame timing.
## Features
* **Studio:** Model logical timeline navigation ([0f1333c80](https://github.com/heygen-com/hyperframes/commit/0f1333c80d3c18eddf8af69110168cc910d14fec), [#2712](https://github.com/heygen-com/hyperframes/pull/2712))
* **Studio:** Add external conflict recovery UI ([8a0dccfc7](https://github.com/heygen-com/hyperframes/commit/8a0dccfc72224d993efdb0ae8d95fc0e020327d4), [#2992](https://github.com/heygen-com/hyperframes/pull/2992))
* **Studio:** Coordinate external file changes ([a99caad58](https://github.com/heygen-com/hyperframes/commit/a99caad581496f2ad8e132b750ced73be8cf3e51), [#2991](https://github.com/heygen-com/hyperframes/pull/2991))
* **Studio:** Preserve external file conflicts ([b30a23402](https://github.com/heygen-com/hyperframes/commit/b30a23402e2db19b43cb0283e1553048746fb8bb), [#2990](https://github.com/heygen-com/hyperframes/pull/2990))
## Fixes
* **Engine:** Keep BeginFrame time monotonic across frame rates ([b390b71bd](https://github.com/heygen-com/hyperframes/commit/b390b71bde982ffbf55c9ec93f1491d99011bfc3), [#3011](https://github.com/heygen-com/hyperframes/pull/3011))
* **Engine:** Validate remote download integrity ([bbdfee116](https://github.com/heygen-com/hyperframes/commit/bbdfee1166c45e348ef76d2e384a0ad2243ac847), [#2938](https://github.com/heygen-com/hyperframes/pull/2938))
* **Studio:** Reconcile external edits before reload ([ebdd1893c](https://github.com/heygen-com/hyperframes/commit/ebdd1893c4a0d86b984fb627fed0283a981d2713), [#2993](https://github.com/heygen-com/hyperframes/pull/2993))
* **Studio:** Drain pending edits before reload ([471313854](https://github.com/heygen-com/hyperframes/commit/47131385445c0f8ee4203f8d6ff4f5600d8c8b2e), [#2989](https://github.com/heygen-com/hyperframes/pull/2989))
* **Studio:** Make inspector commits transactional ([552419c52](https://github.com/heygen-com/hyperframes/commit/552419c52d16fa5a5e8d15a9263bc5f41e596360), [#2987](https://github.com/heygen-com/hyperframes/pull/2987))
* **Engine:** Distinguish probe failure from a genuinely absent GPU ([f69c4a0e3](https://github.com/heygen-com/hyperframes/commit/f69c4a0e3aa8feb1110b52d538f8ca127481c95d))
* **Studio:** Respect GSAP transform ownership ([cf45c9845](https://github.com/heygen-com/hyperframes/commit/cf45c984549bc41ed4debc99d5283d2a60108cbb), [#2986](https://github.com/heygen-com/hyperframes/pull/2986))
* **Parsers:** Preserve safe GSAP helper defaults ([532f06158](https://github.com/heygen-com/hyperframes/commit/532f06158b3a930b85a289ab0608d720311cd5a1), [#2985](https://github.com/heygen-com/hyperframes/pull/2985))
* **Engine:** Warn once per process about unverified hardware GPU ([6703ea7e0](https://github.com/heygen-com/hyperframes/commit/6703ea7e04701b490c5fb563db4f532fbc8aec89))
* **Engine:** Verify explicit browserGpuMode=hardware instead of trusting it ([131780fe9](https://github.com/heygen-com/hyperframes/commit/131780fe9627ee7fb17cb871ef6a144a6ef02735))
* **Core,producer,skills:** Unicode paths, non-Error rejections, shell callers ([1664fe6ad](https://github.com/heygen-com/hyperframes/commit/1664fe6ad773c76e0dc7314e7f2eb439cd3687d6))
* **Producer:** Drop the ReDoS-prone literal-argv regex for a linear scan ([6c5403f7c](https://github.com/heygen-com/hyperframes/commit/6c5403f7cd5e5b21f301b88d6d9f84451751ba15))
* **Skills,producer:** Terminate ffprobe options in shipped skill scripts ([255cf9291](https://github.com/heygen-com/hyperframes/commit/255cf929150977fa57dc1cadde2e9cf626f5c20c))
* **Core,producer:** Redact bare relative paths and the known input path ([e79ab3ab3](https://github.com/heygen-com/hyperframes/commit/e79ab3ab31a5f789f8c998430f2b58cb95973f07))
* **Core:** Redact any path in telemetry, not an allowlist of roots ([d04569e37](https://github.com/heygen-com/hyperframes/commit/d04569e37f1c63967ce7373557ded4e4f150e7de))
* **Producer,studio Server:** Finish the ffprobe argv sweep, pin the contract ([d0dbf11ef](https://github.com/heygen-com/hyperframes/commit/d0dbf11ef53dd7ca535ed40a10e8f2dad4f12c4d))
* **Cli,core,lint,producer:** Terminate ffprobe options at every call site ([47564ab94](https://github.com/heygen-com/hyperframes/commit/47564ab94cc4bac5de6715169939353c211af689))
## Docs & Examples
* **Studio:** Document timeline keyboard navigation ([7bf425b7a](https://github.com/heygen-com/hyperframes/commit/7bf425b7a90c5a3c8154c66025261ff9e52c8c72), [#3031](https://github.com/heygen-com/hyperframes/pull/3031))
## Internal
* **Studio:** Relax large fixture timeout ([bce2140ff](https://github.com/heygen-com/hyperframes/commit/bce2140ff208e16f83ee0854bca8baf85ad7216e), [#3040](https://github.com/heygen-com/hyperframes/pull/3040))
* **Studio:** Extract live timeline clock ([19b8a1f3c](https://github.com/heygen-com/hyperframes/commit/19b8a1f3c5a55c30b5aa367c9054ca1b31552536), [#2711](https://github.com/heygen-com/hyperframes/pull/2711))
* **Studio:** Pin text-field Backspace routing ([cde5bae4c](https://github.com/heygen-com/hyperframes/commit/cde5bae4c5a6afa167faf827ab1073e66964cd35), [#2988](https://github.com/heygen-com/hyperframes/pull/2988))
* **Producer:** Treat an all-literal probe argv as taking no input ([c81f68b59](https://github.com/heygen-com/hyperframes/commit/c81f68b59225d0acd34acbc419e408125fa51e36))
* **Producer:** Discover ffprobe callers and pin terminator position ([91a7cb1f5](https://github.com/heygen-com/hyperframes/commit/91a7cb1f5b7f9a4bb539384fb50645a8feab3f29))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.92...v0.7.93).
Percentage-based canary rollouts land, so a change can ship to a stable slice of
installs instead of all-or-nothing — decided locally and offline, with two inert
calibration canaries validating the mechanism before anything depends on it. Also
29 new registry theme items across three families, a faster virtualized Studio
timeline, and sub-composition sibling asset paths now resolving everywhere.
## Features
* **Cli,studio:** Telemetry opt-out is canary opt-out ([4f464dc42](https://github.com/heygen-com/hyperframes/commit/4f464dc424c648c1210fbfd0675ff774ee0037d4))
* **CLI:** Bucket canaries on a machine-lineage seed, not the telemetry id ([8dd20ac2e](https://github.com/heygen-com/hyperframes/commit/8dd20ac2e8f8c082c69ac9a4be5f3df8b7690b2c))
* **Core:** Inert calibration canaries to validate the mechanism in the wild ([a7bb061af](https://github.com/heygen-com/hyperframes/commit/a7bb061afeaec9f39acc04314a673a2b2ded5fc2))
* **Core:** Emit canary assignments as PostHog flag properties ([a1682e122](https://github.com/heygen-com/hyperframes/commit/a1682e12282c537f7692a3d0b8541263cde7bd50))
* **Studio:** Browser canary binding + leaf subpath imports ([71ee156da](https://github.com/heygen-com/hyperframes/commit/71ee156dacd16e236590ccb5b1d936d0c414a771))
* **CLI:** Attach canary cohort to telemetry, harden canary tests, document ([df1521a0b](https://github.com/heygen-com/hyperframes/commit/df1521a0b6fd64885f1c16d5c075c005755a7dbd))
* **Core:** Percentage-based canary rollouts ([3aea78668](https://github.com/heygen-com/hyperframes/commit/3aea78668734772f9cc83bac81e2495cae2140b0))
## Fixes
* **Studio:** Scope timeline ease focus lifecycle ([0a70ba671](https://github.com/heygen-com/hyperframes/commit/0a70ba67179f00bd149aed42421ed77f56436199), [#2710](https://github.com/heygen-com/hyperframes/pull/2710))
* **Studio:** Scope timeline context targets ([423c5ffad](https://github.com/heygen-com/hyperframes/commit/423c5ffadb47d1a97a65c4ef0f7229097e14ad0e), [#2708](https://github.com/heygen-com/hyperframes/pull/2708))
* **Core:** Resolve sub-composition sibling asset paths everywhere ([4e7fcf7f2](https://github.com/heygen-com/hyperframes/commit/4e7fcf7f2a5af2922ecb6855f08ed879018b8521), [#2994](https://github.com/heygen-com/hyperframes/pull/2994))
* **Studio:** Resolve sibling asset paths in sub-composition previews ([cbd8a77d1](https://github.com/heygen-com/hyperframes/commit/cbd8a77d162be059126698f7e20680c5430dd3d5), [#2983](https://github.com/heygen-com/hyperframes/pull/2983))
* **CLI:** Stop bare --frame-check from swallowing the next flag ([70cc4f59a](https://github.com/heygen-com/hyperframes/commit/70cc4f59a1165f1a132a7bf96d2c8f98ceef2d1a), [#2966](https://github.com/heygen-com/hyperframes/pull/2966))
* **Producer:** Correct short VFR frame coverage ([127eb1937](https://github.com/heygen-com/hyperframes/commit/127eb193715a79252ac77969a95d431a89fee4fe), [#2936](https://github.com/heygen-com/hyperframes/pull/2936))
* **Producer:** Reject asset media type mismatches ([9792c3295](https://github.com/heygen-com/hyperframes/commit/9792c32950133cc7a6aa55361f682bb431db5439), [#2937](https://github.com/heygen-com/hyperframes/pull/2937))
* **CLI:** Stop dropping queued telemetry when process.exit races the final flush ([bc6dbc7e2](https://github.com/heygen-com/hyperframes/commit/bc6dbc7e216353a67700230164e81c3f6076f559), [#2970](https://github.com/heygen-com/hyperframes/pull/2970))
* **Cli,studio:** Adopt the CLI's canary decisions in a launched Studio ([98b23a885](https://github.com/heygen-com/hyperframes/commit/98b23a8850dfe01a9f12957eef25a240294cbe21))
* **CLI:** Keep the canary bucket seed inside the config dir ([9f2b892a7](https://github.com/heygen-com/hyperframes/commit/9f2b892a7137dc14b3e58a0773ba55384562d875))
## Performance
* **Studio:** Stabilize virtualized beat gestures ([677fd31e9](https://github.com/heygen-com/hyperframes/commit/677fd31e9a7bf52475236abbfb662f528862d795), [#2709](https://github.com/heygen-com/hyperframes/pull/2709))
* **Studio:** Virtualize timeline marquee selection ([91d14744a](https://github.com/heygen-com/hyperframes/commit/91d14744a09fefab92363af78065097327a092ce), [#2707](https://github.com/heygen-com/hyperframes/pull/2707))
* **Studio:** Stabilize virtualized timeline drops ([bb5c60387](https://github.com/heygen-com/hyperframes/commit/bb5c603870a0ef2b0defe485c57e4b7d084d5b90), [#2706](https://github.com/heygen-com/hyperframes/pull/2706))
* **Studio:** Stabilize virtualized keyframe retiming ([44bee4c3c](https://github.com/heygen-com/hyperframes/commit/44bee4c3cf208c1f2757beca2e2aa38e96aebc3c), [#2705](https://github.com/heygen-com/hyperframes/pull/2705))
* **Studio:** Stabilize virtualized clip gestures ([f52398cee](https://github.com/heygen-com/hyperframes/commit/f52398ceeff388bab66a8ce2fd8db96c786e8f69), [#2704](https://github.com/heygen-com/hyperframes/pull/2704))
## Docs & Examples
* Add the shared page components and the Reference Project ([edfe66a95](https://github.com/heygen-com/hyperframes/commit/edfe66a95375234f0d261a09a46a29424d040318), [#2977](https://github.com/heygen-com/hyperframes/pull/2977))
* **Changelog:** Weekly digest 2026-07-27–2026-08-03 ([1d0d4d893](https://github.com/heygen-com/hyperframes/commit/1d0d4d8939d358edb7cdb017733b7641d5eec42c), [#2969](https://github.com/heygen-com/hyperframes/pull/2969))
* **Canary:** Connect canary rollouts to the telemetry docs ([54534d53c](https://github.com/heygen-com/hyperframes/commit/54534d53c257fda8fa0f14d4d91fd58724f6b6a6))
* **Canary:** Calibration check 2 reflects the breaker rollover ([0d98de023](https://github.com/heygen-com/hyperframes/commit/0d98de023f5d38b0f7767c7f4defc6a85bff217a))
* **Canary:** Keep contributor docs vendor- and access-neutral ([18d6dd2d7](https://github.com/heygen-com/hyperframes/commit/18d6dd2d7ff44994d24d360edd0d7981967fd29d))
* **Canary:** Note override contamination as check 3's innocent explanation ([10536e847](https://github.com/heygen-com/hyperframes/commit/10536e8473b31eef5b35a2977673bcae35be83c5))
* **Canary:** Make calibration check 4 compare per-surface values ([c43b4e2d9](https://github.com/heygen-com/hyperframes/commit/c43b4e2d951c229935f65a4e224ef8a66c43dd12))
* **Canary:** Link the calibration dashboard from the checks section ([00b576297](https://github.com/heygen-com/hyperframes/commit/00b57629746d3006d8cf3d8fc760b7e0e84c4f77))
## Catalog
* **Registry:** Animate mk card offsets with transforms, not top/left ([ce7d75dba](https://github.com/heygen-com/hyperframes/commit/ce7d75dbaa29e3920216f6e848e68b4b6257602e))
* **Registry:** Add beat-freeze-cut ([d3d286a1a](https://github.com/heygen-com/hyperframes/commit/d3d286a1a53ed52d78ab3994195e83d2188ec163))
* **Registry:** Connector geometry, family accent, and demo legibility ([35231e964](https://github.com/heygen-com/hyperframes/commit/35231e964daab6d6b73d8dc3917f9f95f5944157))
* **Registry:** Mk / yt / hw theme families — 29 items ([f252ec6d9](https://github.com/heygen-com/hyperframes/commit/f252ec6d9942486b4bbdbbdae05f25e683c4ab26))
* **Registry:** Add hw-scribble-transition — scribble transition ([264f2f140](https://github.com/heygen-com/hyperframes/commit/264f2f14016f88bf4fcf6a450031e5975dabc97e))
* **Registry:** Add hw-frame — sketched frame ([4467a8d61](https://github.com/heygen-com/hyperframes/commit/4467a8d61cb591a798ad17fef0bb53cf8ebf76d6))
* **Registry:** Add hw-path-text — text along a path ([662402337](https://github.com/heygen-com/hyperframes/commit/66240233748e1e3c10958882565af656891456a5))
* **Registry:** Add hw-pipeline — hand-drawn flowchart ([b77a16384](https://github.com/heygen-com/hyperframes/commit/b77a163845c600741163b6541fcc64d07a0cb5e5))
* **Registry:** Add hw-underline — squiggle marks ([b0f6cc7b9](https://github.com/heygen-com/hyperframes/commit/b0f6cc7b9b528142890600760f508889939d828a))
* **Registry:** Add hw-box-label — hand-drawn box label ([0ba613e57](https://github.com/heygen-com/hyperframes/commit/0ba613e571f746a6fc65699f86fa8ede842f4d42))
* **Registry:** Add hw-title — handwritten title ([fae656076](https://github.com/heygen-com/hyperframes/commit/fae6560766193f8c894e39238bdbd16e10422dc1))
* **Registry:** Add hw-text-cloud — speech bubble ([3beed70e5](https://github.com/heygen-com/hyperframes/commit/3beed70e56fdbeaa4d2cd4cc96a06ac984a08b23))
* **Registry:** Add hw-callout-circle — scribble callout circle ([f1a506eb4](https://github.com/heygen-com/hyperframes/commit/f1a506eb4b8c03ceb751288d36c100654225e3ee))
* **Registry:** Add hw-arrow — hand-drawn arrow ([95a2ae0a4](https://github.com/heygen-com/hyperframes/commit/95a2ae0a498534ff48f6eac17a0b44eae2c907c6))
* **Registry:** Add hw-boil — hand-drawn boil ([d4f1ad0c3](https://github.com/heygen-com/hyperframes/commit/d4f1ad0c37e56e0aa6651b4d041598c2b438cdb7))
* **Registry:** Add yt-doc-lower-third — documentary lower third ([e9d279282](https://github.com/heygen-com/hyperframes/commit/e9d279282487e5c3a64013be3e08f590e7046ae2))
* **Registry:** Add mk-emphasis-type — background emphasis type ([cc98f5fd6](https://github.com/heygen-com/hyperframes/commit/cc98f5fd6d84101708134d58d10c25aa28c2841f))
* **Registry:** Add yt-screen-warp — on-screen display effect ([1ead7a768](https://github.com/heygen-com/hyperframes/commit/1ead7a768ae88edaa7ecacfda4f868e4e1073cbf))
* **Registry:** Add mk-logo-sting — outline logo sting ([44cd52025](https://github.com/heygen-com/hyperframes/commit/44cd5202533f176593b37404a85f51997877438f))
* **Registry:** Add yt-vertical-fill — vertical media filler ([ba774de05](https://github.com/heygen-com/hyperframes/commit/ba774de05ccb6bac895b96d6abace85a29caffcc))
* **Registry:** Add mk-line-graph — minimal line graph ([4ce35b7cb](https://github.com/heygen-com/hyperframes/commit/4ce35b7cba683d7f2ffe8ad4e3f03e853f6425c3))
* **Registry:** Add yt-circle-pointer — pointer circle + countdown ([c4425bfb4](https://github.com/heygen-com/hyperframes/commit/c4425bfb40e28caf4f4e1e42715331f0c8a50929))
* **Registry:** Add mk-progress-stat — count-up stat card ([2039bf5f4](https://github.com/heygen-com/hyperframes/commit/2039bf5f44285c26cfe4f1f46c62215dcf5d8337))
* **Registry:** Add yt-feather-highlight — feathered spotlight ([4e0a7dda8](https://github.com/heygen-com/hyperframes/commit/4e0a7dda8859aa9d89be05d364144a78dd96bbfa))
* **Registry:** Add mk-usage-arc — hairline arc gauge ([63c6cd02e](https://github.com/heygen-com/hyperframes/commit/63c6cd02ead1c8bd93cde2a354a84cd9ff3b6a1f))
* **Registry:** Add yt-logo-intro — logo intro sequence ([894861235](https://github.com/heygen-com/hyperframes/commit/8948612359947e5b721af764725ddae9cda3a020))
* **Registry:** Add mk-cta-button — pill cta button ([eed6adafb](https://github.com/heygen-com/hyperframes/commit/eed6adafb0a98705ba42a8b65802c8946d7028bc))
* **Registry:** Add yt-prism-title — chromatic fringe title ([9036e3c76](https://github.com/heygen-com/hyperframes/commit/9036e3c76caef82f582f53effe5b6888c07d8560))
* **Registry:** Add mk-clone-wall-transition — text clone wall transition ([fc40c882e](https://github.com/heygen-com/hyperframes/commit/fc40c882e1db9c8924f21b34335308bb875f76c2))
* **Registry:** Add yt-avatar-pip — circle pip window ([d924630f2](https://github.com/heygen-com/hyperframes/commit/d924630f23b0075bc69a3497426323c83c351969))
* **Registry:** Add mk-placeholder-grid — rounded media grid ([ac8d34fb9](https://github.com/heygen-com/hyperframes/commit/ac8d34fb9db1442e6d4ea1e7f0bbdf9c91df2b79))
* **Registry:** Add yt-comment-card — comment cards ([a4ef52fcb](https://github.com/heygen-com/hyperframes/commit/a4ef52fcb044b99c8547c336ccdfb7aa0d94b2bc))
* **Registry:** Add mk-callout-highlight — word-sweep highlight ([9be7a6415](https://github.com/heygen-com/hyperframes/commit/9be7a6415c7847690a3216f958ae834100ccfcbf))
* **Registry:** Add yt-lcd-background — scanline board background ([a7f83f6fc](https://github.com/heygen-com/hyperframes/commit/a7f83f6fc6f0767049b8308837c602cd179d7f7f))
* **Registry:** Add mk-specs-list — specs checklist ([3e4a4042e](https://github.com/heygen-com/hyperframes/commit/3e4a4042e550e176689233bc33c6db631c5daad5))
* **Registry:** Add yt-camera-move — camera punch-in ([ea5e5e5bb](https://github.com/heygen-com/hyperframes/commit/ea5e5e5bb5f755a3eb4bcded663d03d0cf858521))
* **Registry:** Add mk-pill-callout — capsule callout chip ([95125834e](https://github.com/heygen-com/hyperframes/commit/95125834e8b3bd810e9f16eb65f85455887384ec))
* **Registry:** Add mk-background — minimal procedural gradient background ([61c82135f](https://github.com/heygen-com/hyperframes/commit/61c82135f3677ae61a963d587b5aaec134d1656b))
## Internal
* **Release:** Fold the unpublished v0.7.91 artifacts into v0.7.92 ([e70ffad93](https://github.com/heygen-com/hyperframes/commit/e70ffad93987296ac8b351e85dd4872fdc2da285))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.90...v0.7.92).
Prevents short compositions from decoding entire long video sources and exhausting producer memory through HDR raw-frame scratch and filesystem page cache. Extraction now follows the playable timeline, reserves bounded scratch capacity across concurrent renders, and cleans resources on every exit path.
## Fixes
* **Producer:** Bound video extraction to the composition's playable interval instead of the source's full duration, including negative timeline starts, non-zero media offsets, loops, held tails, and distributed planning ([#2955](https://github.com/heygen-com/hyperframes/pull/2955))
* **Producer:** Limit concurrent HDR raw-frame scratch against the configured ceiling, cgroup memory, and free disk; release reservations and temporary resources after success, cancellation, and partial failure ([#2955](https://github.com/heygen-com/hyperframes/pull/2955))
* **Engine:** Resolve the true final playable frame for held-tail media, including streams with non-zero or negative timestamp bases, without sharing cancellation state across renders ([#2955](https://github.com/heygen-com/hyperframes/pull/2955))
* **Producer API:** Add `outputDynamicRange: auto | hdr | sdr` while temporarily accepting the legacy `hdrMode` field for rolling migrations ([#2955](https://github.com/heygen-com/hyperframes/pull/2955))
## Rollout
* Upgrade the HyperFrames producer fleet to v0.7.90 before deploying callers that send `outputDynamicRange`; the legacy `hdrMode` field remains accepted only to bridge the rolling deployment.
## Catalog
* **Contributing:** Refresh the catalog contribution guide ([#2954](https://github.com/heygen-com/hyperframes/pull/2954))
## Internal
* **Release:** Publish stable packages only from a reviewed release PR's exact merge commit, with fail-closed checkout/tag verification and safe same-commit retries ([#2959](https://github.com/heygen-com/hyperframes/pull/2959))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.89...v0.7.90).
Stops generated waveform, thumbnail, and transcode caches from retriggering Studio project reloads or appearing as project files. Real source edits still invalidate previews normally.
## Fixes
* **CLI:** Ignore generated cache directories in the recursive project watcher, preventing preview refresh loops during cache generation ([#2952](https://github.com/heygen-com/hyperframes/pull/2952))
* **Studio:** Keep generated caches out of Storyboard signatures and the project file tree while retaining invalidation for real source edits ([#2952](https://github.com/heygen-com/hyperframes/pull/2952))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.88...v0.7.89).
Hardens the media probe against malformed and hostile input — ffprobe invocation, AAC duration refinement, frame-rate parsing and PNG inspection — and adds a color grading chapter to the Prompt Guide.
## Fixes
* **Engine:** Harden the ffprobe invocation — reject stdin input, decode stdout correctly, and bound its size ([9e275423e](https://github.com/heygen-com/hyperframes/commit/9e275423e2f44e37d73d5b7372a3ead3ba95cf75))
* **Engine:** Make the AAC duration refinement safe, cancellable and LC-only, allowlisting AAC-LC rather than denying HE-AAC ([242a42f6c](https://github.com/heygen-com/hyperframes/commit/242a42f6c94d5cc780477ed94c7938448639f67f), [361fd4992](https://github.com/heygen-com/hyperframes/commit/361fd4992636188e484e719a149f452b87c98b2b))
* **Engine:** Reject non-finite, negative and malformed frame rates, and strict-parse rationals ([19dc83bc2](https://github.com/heygen-com/hyperframes/commit/19dc83bc2beebebc136da776b2718594f41a469d), [4d563fa75](https://github.com/heygen-com/hyperframes/commit/4d563fa7523f0ef2e630d0da214b3b667bf7c982))
* **Engine:** Fix PNG probing — merge color per field, detect alpha correctly, defer the parse, stop the chunk walk at cICP, and use native crc32 ([62b96c227](https://github.com/heygen-com/hyperframes/commit/62b96c227e7934ec8be4f7a806a99d7cd8decef0), [2af3f4d0e](https://github.com/heygen-com/hyperframes/commit/2af3f4d0ed9fac2fadc1266bcadde04e6513d800))
* **Engine:** Keep the PNG CRC working on Node 22.0 and 22.1 ([96a6e8bd9](https://github.com/heygen-com/hyperframes/commit/96a6e8bd95410695340b2671b1dc167f14f49999))
## Docs & Examples
* **Prompting:** New [Color grading and film effects](https://hyperframes.heygen.com/prompting/color-grading) chapter — ten A/B renders, each with the prompt that produced it and the payload it compiled to, covering tonal work, hue keys, print and analogue looks, and why the source matters more than the payload ([#2911](https://github.com/heygen-com/hyperframes/pull/2911))
* **Guides:** Two new sections in [Color Grading](https://hyperframes.heygen.com/guides/color-grading) — *Animating a Grade* (which properties tween, and which do not) and *Limiting a Grade to Part of the Frame* (the layer technique for region-limited grades, previously listed as unsupported with no workaround) ([#2911](https://github.com/heygen-com/hyperframes/pull/2911))
## Full changelog
[https://github.com/heygen-com/hyperframes/compare/v0.7.87...v0.7.88](https://github.com/heygen-com/hyperframes/compare/v0.7.87...v0.7.88)
Website capture now exits predictably: runtime stages share a live budget, blocked or degraded pages fail fast, and vision/Lottie failures retain accurate, sanitized diagnostics. This release also enables Studio timeline virtualization by default and includes dense-keyframe and preview-resource fixes.
## Features
* **Studio:** Enable timeline virtualization by default ([c6925e471](https://github.com/heygen-com/hyperframes/commit/c6925e471a1ab4df911f5b4aab08740084c5412c), [#2926](https://github.com/heygen-com/hyperframes/pull/2926))
## Fixes
* **CLI:** Preserve capture failure diagnostics ([9ae000726](https://github.com/heygen-com/hyperframes/commit/9ae00072614f35785e4a1d7bad48787451462a91))
* **CLI:** Omit skipped Lottie previews ([ac9458888](https://github.com/heygen-com/hyperframes/commit/ac9458888c7a6e05aa6b4d5d74063b5859782d02))
* **CLI:** Narrow blocked page titles ([b38e90740](https://github.com/heygen-com/hyperframes/commit/b38e90740407ac50fd83e124b8211d3efc7282be))
* **CLI:** Report bounded vision failures ([dfc60797a](https://github.com/heygen-com/hyperframes/commit/dfc60797a2adeddef120f4c800f06b30cc155117))
* **CLI:** Reject blocked website captures ([22e3cca96](https://github.com/heygen-com/hyperframes/commit/22e3cca966e4f3c5dfe0f8b716dec80259206300))
* **CLI:** Validate capture budget milliseconds ([d3607606e](https://github.com/heygen-com/hyperframes/commit/d3607606eeced5c826923f536d0d33d0cd799fb9))
* **CLI:** Propagate live capture budget ([49091e614](https://github.com/heygen-com/hyperframes/commit/49091e6142c98b9fcab967c88e210df601a118d9))
* **CLI:** Bound capture runtime stages ([765a5ae83](https://github.com/heygen-com/hyperframes/commit/765a5ae83f31b01b65426f34a3c80a47330456a0))
* **Studio:** Keep dense keyframes readable ([723d3381c](https://github.com/heygen-com/hyperframes/commit/723d3381c4cabb3c238d883adf4fca487ead9df6), [#2925](https://github.com/heygen-com/hyperframes/pull/2925))
* **Studio:** Release retained preview resources ([fbfffb1aa](https://github.com/heygen-com/hyperframes/commit/fbfffb1aa785fe48aa94a3570bd04c9128a80d18), [#2924](https://github.com/heygen-com/hyperframes/pull/2924))
* Align local WebGPU capture behavior ([3a6b7f061](https://github.com/heygen-com/hyperframes/commit/3a6b7f06127102be719aa4d91f1a8b40b299a0c6), [#2907](https://github.com/heygen-com/hyperframes/pull/2907))
* **CLI:** Move install-state into the config dir so deleting it is a full reset ([dae1b63d4](https://github.com/heygen-com/hyperframes/commit/dae1b63d4a59fc6dff7fe19861d90efce9dc6948))
## Docs & Examples
* **Skills:** Gate blocked website captures ([30f383074](https://github.com/heygen-com/hyperframes/commit/30f38307411908237201ed227f5350aa18ba156e))
* Add THU-MAIC as HyperFrames adopter ([1738b5a11](https://github.com/heygen-com/hyperframes/commit/1738b5a11f7eee1c130b29b3c489f79473e7aec2), [#2761](https://github.com/heygen-com/hyperframes/pull/2761))
* Unlist the Send-to guide from the docs nav (tool-served, not web-searched) ([a3c8f897f](https://github.com/heygen-com/hyperframes/commit/a3c8f897f2cdb4231521a752d6b320c8edb77a45), [#2918](https://github.com/heygen-com/hyperframes/pull/2918))
## Internal
* **CLI:** Cover bounded capture stages ([45aead84c](https://github.com/heygen-com/hyperframes/commit/45aead84c9467398cd18bc0878d6f4943daf65fd))
* **Producer:** Share plan execution builder ([1d636f603](https://github.com/heygen-com/hyperframes/commit/1d636f603c6502e1d1421b0d04e67e47765f835f), [#2906](https://github.com/heygen-com/hyperframes/pull/2906))
* **Lint:** Consolidate asset-src placeholder skip into a shared predicate ([5a6e4b1a8](https://github.com/heygen-com/hyperframes/commit/5a6e4b1a8f4176250b5c92b63845399fcfe7f256), [#2894](https://github.com/heygen-com/hyperframes/pull/2894))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.86...v0.7.87).
Ships the **Prompt Guide** — a novice-to-capstone arc across `/prompting`, where every prompt sits beside the unedited render it produced and each chapter cuts its own region out of one 62-second capstone film. The guide now opens with the intent interview the agent runs before building, and records its answers to `BRIEF.md` so a later session resumes without re-asking. Also lands fixes from running `product-launch-video` end to end, plus lint and transition-duration corrections.
## Features
* **Studio:** Track timeline performance ([10b517dab](https://github.com/heygen-com/hyperframes/commit/10b517dab9515988cb82100c3975b53a47da1f35), [#2898](https://github.com/heygen-com/hyperframes/pull/2898))
## Fixes
* **Docs:** Correct mediabunny GitHub link in CREDITS.md ([1481fe1ed](https://github.com/heygen-com/hyperframes/commit/1481fe1ed936ee2aac7220061f258155c274bfb8), [#2897](https://github.com/heygen-com/hyperframes/pull/2897))
* **Skills:** Extend transition roots without explicit duration ([14ced9051](https://github.com/heygen-com/hyperframes/commit/14ced9051795b32db75a479ac2580eef3c5df85c), [#2873](https://github.com/heygen-com/hyperframes/pull/2873))
* **Lint:** Don't flag unresolved templating-token asset srcs as missing ([6c185f252](https://github.com/heygen-com/hyperframes/commit/6c185f252f38a5a1f1dc9e23f17ef98f63ea18c7), [#2893](https://github.com/heygen-com/hyperframes/pull/2893))
* **Capture,audio,docs:** Defects found running product-launch-video end to end ([e0dc255e8](https://github.com/heygen-com/hyperframes/commit/e0dc255e8a4108833ac727d54f4b039cca397042), [#2892](https://github.com/heygen-com/hyperframes/pull/2892))
## Docs & Examples
* **Prompt Guide:** Restructured into a seven-level arc, novice to capstone, with the nav regrouped to match ([#2109](https://github.com/heygen-com/hyperframes/pull/2109))
* **Prompt Guide:** Every embedded render is now reproducible from the prompt printed beside it — 18 verified examples, plus validated renders across the chapters
* **Prompting:** The eight-rule motion grammar, each rule shown as an A/B render built twice from the same composition ([8fb1482e7](https://github.com/heygen-com/hyperframes/commit/8fb1482e7ff59a7007e5f6e40d38a7a02ede3adb), [cdac57c07](https://github.com/heygen-com/hyperframes/commit/cdac57c0757cee22db67e9595b29809cfabd056c), [dd4fd9cef](https://github.com/heygen-com/hyperframes/commit/dd4fd9cefaa1f5816a8a2ff404e2152af542b25d))
* **Prompting:** New capstone chapter dissecting *The Timeline* — one continuous camera across nine regions, rendered twice from one template ([a90e343e8](https://github.com/heygen-com/hyperframes/commit/a90e343e8e4f7c15424cb2b33030a2522509218d))
* **Prompting:** New chapters for storyboards, porting from Remotion, and recreating a reference from text alone ([630ad482c](https://github.com/heygen-com/hyperframes/commit/630ad482c627c850dcc4dade7b4aef5a189f3bb5), [ead4341c7](https://github.com/heygen-com/hyperframes/commit/ead4341c7c7d57a78c944d7e3fbac1ed545d9cfd))
* **Prompting:** "Avoiding the slideshow" — the continuity contract, framed as one method among several ([4f6fb8fc1](https://github.com/heygen-com/hyperframes/commit/4f6fb8fc16c566bd8f473820a559a16c15b1fbeb))
* **Prompting:** Documented the intent interview, run-shape questions, and `BRIEF.md` ([2efbfd475](https://github.com/heygen-com/hyperframes/commit/2efbfd47583f75534b194d90ec0f689278b370f5), [#2872](https://github.com/heygen-com/hyperframes/pull/2872))
* **Prompting:** Appendix of traps the validation runs exposed — layout waivers and the contrast-gate side effect, `fromTo` back-render, round-linecap dots ([4d89bd426](https://github.com/heygen-com/hyperframes/commit/4d89bd426150e054cf42e3c05d6bc75585bcffbb), [fda3d9a65](https://github.com/heygen-com/hyperframes/commit/fda3d9a65af9ef02c21bf4c632857ff0f801f925))
* **Prompting:** `frame.md` is the design spec; `design.md` references removed throughout ([4260f12b0](https://github.com/heygen-com/hyperframes/commit/4260f12b01a7bbcd9b5841e5f29cbba02fe0604f))
* **Skills:** Text corrections found while validating the guide's prompts ([e7a6cb0da](https://github.com/heygen-com/hyperframes/commit/e7a6cb0da622e2086afb27fe1ecb6144af2734c4))
Every prompt-guide commit is listed in the full changelog below.
## Catalog
* **Prompting:** Fix misquoted caption-color phrase in captions-catalog bridge ([16224fd2f](https://github.com/heygen-com/hyperframes/commit/16224fd2fbd1b591e88e4029352d682dcf8b734d))
## Internal
* Format prompt-guide-expansion plan (fixes Format CI) ([b71ce85c2](https://github.com/heygen-com/hyperframes/commit/b71ce85c2cd830d16af28299adf2df6938ab306a))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.84...v0.7.85).
Makes the composition element-count signal trustworthy fleet-wide: every render now reports its live DOM size (not just the \~17% that get a probe session), and the static fallback scan no longer inflates counts from markup written inside inline scripts. Observational only — no routing behaviour changes.
## Features
* **Engine:** Measure live DOM size on every render, not just probed ones ([d74afc7b7](https://github.com/heygen-com/hyperframes/commit/d74afc7b7dc620036439b398c6bca823fb3911b4))
## Fixes
* **Producer:** Strip script bodies to a fixed point, not one pass ([042d5aaba](https://github.com/heygen-com/hyperframes/commit/042d5aaba6d10c1f0497db9c86f6f71f9e69368c))
* **Producer:** Unbias the static element count and stop zeroing failures ([c61a24b51](https://github.com/heygen-com/hyperframes/commit/c61a24b510b022fb7956caa089ee093f87053f96))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.83...v0.7.84).
Lays the measurement groundwork for opening the drawElement fast path to short compositions: renders now report their live DOM element count and whether the short-comp routing band would apply, while routing itself stays unchanged behind a default-off flag. Also carries a batch of Windows and browser-resolution fixes, audio-mix corrections, and transparent GIF output.
## Features
* **Producer:** Surface init telemetry from parallel workers — the band's missing motion axis ([23854f7c6](https://github.com/heygen-com/hyperframes/commit/23854f7c6a328ef1f6913160af345c9fda70b036))
* **Producer:** Open the DE single-worker inversion to short comps under an element ceiling ([0749cd9ff](https://github.com/heygen-com/hyperframes/commit/0749cd9ff83ad41c72c7dc6be1b224e9bc27731b))
* **CLI:** Roll circuit-breaker state over across config wipes ([dfe92b2aa](https://github.com/heygen-com/hyperframes/commit/dfe92b2aabcea8d934e4696f9dfe063307fccdf7))
## Fixes
* **Studio:** Stop popovers and tooltips clipping at panel edges ([f81ac7457](https://github.com/heygen-com/hyperframes/commit/f81ac745726d3195d07b79d7de9c31357ce8ab43), [#2890](https://github.com/heygen-com/hyperframes/pull/2890))
* **Producer:** Fail closed when no live element count is available ([4dbf0d90b](https://github.com/heygen-com/hyperframes/commit/4dbf0d90b05de2c3db7c983641c8785fd9988148))
* **Producer:** Count live DOM, not source markup, for the short-band gate ([def98f79c](https://github.com/heygen-com/hyperframes/commit/def98f79c3fa746e805c6fbe9ee51392c267ea1e))
* **Producer:** Keep large local fonts file-backed ([87791fd01](https://github.com/heygen-com/hyperframes/commit/87791fd01d93ee82226bf09d98a4dfe339c42307), [#2864](https://github.com/heygen-com/hyperframes/pull/2864))
* Exclude hidden audio from render mix ([b7160f69b](https://github.com/heygen-com/hyperframes/commit/b7160f69bba87254f8d33853df21a8be862605e1), [#2870](https://github.com/heygen-com/hyperframes/pull/2870))
* **Parsers:** Validate Windows FFmpeg discovery candidates ([4ad1cf455](https://github.com/heygen-com/hyperframes/commit/4ad1cf4551b724e7d54f82f86b233ef734545250), [#2871](https://github.com/heygen-com/hyperframes/pull/2871))
* Preserve plateaus in sampled audio automation ([04e0ccce4](https://github.com/heygen-com/hyperframes/commit/04e0ccce429c0c7c579cd06db09e7bad8fb550f3), [#2863](https://github.com/heygen-com/hyperframes/pull/2863))
* **CLI:** Select host-compatible cached browser ([85f0c9d35](https://github.com/heygen-com/hyperframes/commit/85f0c9d3546b1973dfba884fe6d2a7a8188d4ad3), [#2861](https://github.com/heygen-com/hyperframes/pull/2861))
* **CLI:** Honor check navigation timeout ([fdc593289](https://github.com/heygen-com/hyperframes/commit/fdc5932897ea3ecf778d520da77e6f6d493017d5), [#2860](https://github.com/heygen-com/hyperframes/pull/2860))
* **CLI:** Simplify nextInstallState's dead hadFired branch (review nit) ([ec76985f4](https://github.com/heygen-com/hyperframes/commit/ec76985f4072469762388739f16b1c6904e84519))
* **Producer:** Address R2 review findings — element undercount and kill-switch attribution ([7bb9e3cbf](https://github.com/heygen-com/hyperframes/commit/7bb9e3cbf920e04d01854a839d01619cb3615ab4))
* **Render:** Preserve transparency in GIF output ([6cfb05e38](https://github.com/heygen-com/hyperframes/commit/6cfb05e38bcb0ad02fa848500b462f0193a639b1), [#2327](https://github.com/heygen-com/hyperframes/pull/2327))
* **Studio:** Resolve Chrome on Windows ([d8d626537](https://github.com/heygen-com/hyperframes/commit/d8d626537bf6a830711f38e24cc8756bc26f8d48), [#2878](https://github.com/heygen-com/hyperframes/pull/2878))
## Docs & Examples
* **Product Launch Video:** Use real screenshots for site showcases ([860954d71](https://github.com/heygen-com/hyperframes/commit/860954d71c15dcd7d47ce9d8bda55009010f08f7), [#2881](https://github.com/heygen-com/hyperframes/pull/2881))
* **Product Launch Video:** Catch motion jumps at frame cuts ([5466bcecc](https://github.com/heygen-com/hyperframes/commit/5466bceccef70a3663f5a92bc567455fd018f050), [#2880](https://github.com/heygen-com/hyperframes/pull/2880))
* **Audio:** Avoid weak music openings in short launch videos ([30900c346](https://github.com/heygen-com/hyperframes/commit/30900c3465f457bf65f07ed4b4b55c384286bd20), [#2882](https://github.com/heygen-com/hyperframes/pull/2882))
* **Skills:** Name the media-treatment policy targets instead of alluding to them ([6cab53a68](https://github.com/heygen-com/hyperframes/commit/6cab53a681bf159ffe34f66506a8004e38213fae), [#2879](https://github.com/heygen-com/hyperframes/pull/2879))
## Internal
* **Studio:** Split ease mode controls out of EaseCurveSection ([e0b190947](https://github.com/heygen-com/hyperframes/commit/e0b19094758044b6e6b9e57d8a13e19d738c6952))
* **Studio:** Remove fully rolled-out studio feature flags ([cef3b86c9](https://github.com/heygen-com/hyperframes/commit/cef3b86c95cb257be7c61ac3bdc4dd6dc9692e11), [#2889](https://github.com/heygen-com/hyperframes/pull/2889))
* **Producer:** Make the short-comp band baseline-first and its attribution decisive ([e9de2fa14](https://github.com/heygen-com/hyperframes/commit/e9de2fa14f61f503287c9d87ec0487c165ecbcba))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.82...v0.7.83).
Studio exports now preserve the selected orientation-aware resolution, including 4K, instead of
silently falling back to the composition's native canvas size. Browser startup also honors
explicit HyperFrames browser-path environment overrides and retries transient launch failures
without hanging preview requests.
## Fixes
* **Studio:** Honor selected render resolution ([f1655b930](https://github.com/heygen-com/hyperframes/commit/f1655b9302dc870c1e2ee24f19fd23897c767b42), [#2876](https://github.com/heygen-com/hyperframes/pull/2876))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.81...v0.7.82).
HyperFrames now retries transient Google Fonts CSS and font-file failures during distributed
planning without misclassifying them as deterministic project errors. Retries remain tightly
bounded, respect cancellation and `Retry-After` within a shared budget, and surface exhaustion
as `FONT_FETCH_UNAVAILABLE` for orchestration-level recovery.
## Fixes
* **Producer:** Retry transient deterministic font fetches ([20f4f8f49](https://github.com/heygen-com/hyperframes/commit/20f4f8f49c19181adfb4194f1965ee00845219f9), [#2865](https://github.com/heygen-com/hyperframes/pull/2865))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.80...v0.7.81).
HyperFrames now renders scene-local video timing correctly across sequential nested templates
and removes vulnerable runtime dependency paths. Studio also gains exact bulk easing for
merged keyframes, atomic keyframe-cache refreshes, and smoother optimistic ease-mode changes.
## Features
* **Studio:** Bulk-edit easing for merged keyframes ([10d45def0](https://github.com/heygen-com/hyperframes/commit/10d45def058248d0d59d1448beef6a6ee91ddeba))
## Fixes
* **Studio:** Keep hidden state on expanded sub-composition rows ([5dad52370](https://github.com/heygen-com/hyperframes/commit/5dad52370f77a9a0618827279b8a4dcd86868456))
* **Studio:** Open the path node menu on arc waypoints ([adb7de535](https://github.com/heygen-com/hyperframes/commit/adb7de5358d7ed6feeb41c55e6152ed7758bf1b5))
* **Studio:** Switch keyframe ease modes optimistically ([659e22656](https://github.com/heygen-com/hyperframes/commit/659e22656e51aef54d079b3822fa40086d93726b))
* **Studio:** Publish keyframe cache refresh atomically ([6b11d3743](https://github.com/heygen-com/hyperframes/commit/6b11d3743339c13424073fca63791d941d3fbbf6))
* **Studio:** Target colliding keyframes exactly ([7482c22d8](https://github.com/heygen-com/hyperframes/commit/7482c22d821c0a46b48cb17421c4df73014dbbd6), [#2692](https://github.com/heygen-com/hyperframes/pull/2692))
* **Core:** Preserve scene-local video timing across sequential nested templates ([9bbb6d50a](https://github.com/heygen-com/hyperframes/commit/9bbb6d50a02e128fcdab9ae20d33649b65406788), [#2859](https://github.com/heygen-com/hyperframes/pull/2859))
* **Security:** Remove vulnerable runtime dependency paths ([13ac9e390](https://github.com/heygen-com/hyperframes/commit/13ac9e390585e75b80f5efd46393531315f0be2c))
## Internal
* **Studio:** Split bulk easing helpers ([23ab104af](https://github.com/heygen-com/hyperframes/commit/23ab104aff7a90de6d41aa7af2fb425314015d1d))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.79...v0.7.80).
Studio editing is now more exact and predictable: timeline, motion-path, and playhead
keyframe operations stay scoped to the intended element; nested-composition timing
preserves its host rows; and color, shortcuts, ruler, and accessibility interactions
are more reliable. This release also adds a narrow caption-zone layout waiver, makes
CLI telemetry opt-out durable, and recognizes the renamed Codex image-generation
feature flag.
## Features
* **Check:** Add data-layout-allow-caption-zone waiver ([3a7950fd6](https://github.com/heygen-com/hyperframes/commit/3a7950fd63b501788f39f1fd44c12fc317139d79), [#2853](https://github.com/heygen-com/hyperframes/pull/2853))
## Fixes
* **Media Use:** Accept renamed codex image\_generation feature flag ([02c57609a](https://github.com/heygen-com/hyperframes/commit/02c57609ab2919792c5f4442b9eb08d729ddf544))
* **Studio:** Give the motion path and the fallbacks a one-element target ([1f3fd2800](https://github.com/heygen-com/hyperframes/commit/1f3fd2800cd2e4df9e8a2c2b81ea11ed5b799630))
* **Studio:** Author every new tween against one element ([3d9243606](https://github.com/heygen-com/hyperframes/commit/3d924360667a15745d85dc060689d913b5dcc5d7))
* **Studio:** Scope lane ids per timeline and stop inventing a track row ([ba0d6406d](https://github.com/heygen-com/hyperframes/commit/ba0d6406d23d11e12305ba79834a69ae672b8432))
* **Studio:** Never re-author a target the DOM proved is not unique ([f04cdb79c](https://github.com/heygen-com/hyperframes/commit/f04cdb79c5f1475fa7d6048036a4e0af354a60a2))
* **Studio:** Label undo history with the track display row ([477916cbe](https://github.com/heygen-com/hyperframes/commit/477916cbe25dd6dd1877c09df3d826cd60b609e5))
* **Studio:** Target one element when adding a keyframe at the playhead ([fd5555be7](https://github.com/heygen-com/hyperframes/commit/fd5555be758450d73335dd3f89c70329aac8ee35))
* **Studio:** Announce real track numbers and point aria-controls at the lanes ([1faa0cbda](https://github.com/heygen-com/hyperframes/commit/1faa0cbdadc71abdea220d8705682c0a18e499bb))
* **Studio:** Resolve a panel edit through the lane groups it can see ([be3451aae](https://github.com/heygen-com/hyperframes/commit/be3451aae43779d47cd593e12bdf8fb2f4da2889))
* **CLI:** Make telemetry opt-out durable ([880021411](https://github.com/heygen-com/hyperframes/commit/880021411d785e7470d3150868dee916245ffce8), [#2852](https://github.com/heygen-com/hyperframes/pull/2852))
* **Studio:** Lane every tween and attribute tweens to their real target ([59a818e80](https://github.com/heygen-com/hyperframes/commit/59a818e80a3ef561c5cb4a25ea30128cd18458b2))
* **Studio:** Keep every host row on the drill path, not just the top ([acad7b268](https://github.com/heygen-com/hyperframes/commit/acad7b268ea1e9e4b35e15265ac6c8a178e43865))
* **Studio:** Keep the host row when drilling into a sub-composition ([d48440a9b](https://github.com/heygen-com/hyperframes/commit/d48440a9bacb83aef8007b3667e78e02a2481d8f))
* **Studio:** Expand sub-comp children against their resolved parent host ([12546985f](https://github.com/heygen-com/hyperframes/commit/12546985f588df8cf984d241dd27e3417edb3320))
* **Studio:** Compute keyframe percentages in the tween's own time frame ([3f0c20f63](https://github.com/heygen-com/hyperframes/commit/3f0c20f633e9ac064e45df838e03d4412ddafda8))
* **Studio:** Accept 3-digit hex shorthand in the colour field ([86f633f98](https://github.com/heygen-com/hyperframes/commit/86f633f98573a79f88422c8a24a69bd55d718c3d))
* **Studio:** Drop aria-modal from the non-modal shortcuts popup ([7f0cadcbb](https://github.com/heygen-com/hyperframes/commit/7f0cadcbb1f24df12bee091d5156e3cbf67f51e4))
* **Studio:** Dismiss the shortcuts panel on escape and outside press ([aa2811642](https://github.com/heygen-com/hyperframes/commit/aa2811642fecabdef58ce45329b115993d1e43fb))
* **Studio:** Let the colour hex field be edited and commit it on outside press ([55614033e](https://github.com/heygen-com/hyperframes/commit/55614033e501b5e55bfd3a2099396b74443652cd))
* **Studio:** Grow the ease target only where the segment has room ([b82506363](https://github.com/heygen-com/hyperframes/commit/b82506363f08bf9b2efbd37dce94c0eaec71844e))
* **Studio:** Meet the 24x24 pointer target minimum on toolbar and lane controls ([4e74eefdd](https://github.com/heygen-com/hyperframes/commit/4e74eefddd4c1e38f7c97662cc52fae6d2a01698))
* **Studio:** Seek ruler clicks to the pressed position and round retime percentages ([69020699d](https://github.com/heygen-com/hyperframes/commit/69020699dfb595194c8bf85117525045439bcdb2))
## Internal
* Regenerate skills-manifest for media-use change ([b6da5bd6b](https://github.com/heygen-com/hyperframes/commit/b6da5bd6b3e95e391ad340c9e11e162f647b8a4b))
## Other Changes
* **Studio:** Keep StudioRightPanel under the 600 line cap ([bb24d0037](https://github.com/heygen-com/hyperframes/commit/bb24d0037a96d14a63eeb4c6e2a983f4971f331d))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.78...v0.7.79).
Windows renders on a hardware GPU now use drawElement fast capture, which was previously macOS-only — roughly 2× faster capture on the same safety net (per-frame self-verification with automatic screenshot fallback), covering about 78% of Windows renders. Render telemetry also gains GPU-backend and laptop power-state fields so performance can be diagnosed per machine rather than per platform.
## Features
* **Engine:** drawElement fast capture now runs on Windows with a hardware GPU (previously macOS-only); Linux/software-GPU hosts are unchanged ([cb30157eb](https://github.com/heygen-com/hyperframes/commit/cb30157ebbbcfedd3606b9d566d565f4412de45e))
* **Producer:** The parallel-drawElement router (still opt-in via `HF_DE_PARALLEL_ROUTER`) now engages from 700 frames instead of 2000, and renders report `on_battery` / `low_power_mode` ([3da31e399](https://github.com/heygen-com/hyperframes/commit/3da31e399b498d0ab6b1ce32b008b8b10cdcd2dc))
## Fixes
* **CLI:** Persist authoring skill in hyperframes.json for durable render attribution ([d287e5244](https://github.com/heygen-com/hyperframes/commit/d287e5244c1e6d9051642f94f368ef7a1e26bd34), [#2762](https://github.com/heygen-com/hyperframes/pull/2762))
* **Producer:** Installs with telemetry disabled no longer spawn `pmset` while building render events, and the parallel-drawElement router no longer pins a worker count on renders where its streaming path can't run (compositions over the streaming duration cap) ([b99c80389](https://github.com/heygen-com/hyperframes/commit/b99c8038983e2c0bb2545e8eaf5fcd7c4f9abe03))
* **Engine:** `gpu_renderer` telemetry reports a low-cardinality backend/vendor bucket rather than the raw driver string, and is attached to failed renders as well as successful ones ([4520cd240](https://github.com/heygen-com/hyperframes/commit/4520cd240b9a4ac20f77e6a2e8204866e549fd35))
* **Producer:** Validate distributed video metadata ([557d82b6a](https://github.com/heygen-com/hyperframes/commit/557d82b6a9547e403598713e2840c41736d35544), [#2839](https://github.com/heygen-com/hyperframes/pull/2839))
* **Studio:** Harden preview recovery ([c62bd4c45](https://github.com/heygen-com/hyperframes/commit/c62bd4c454d7a53aac39e03b10da8eeb2a93d77e))
* **Studio:** Improve preview loading reliability ([18b9acac1](https://github.com/heygen-com/hyperframes/commit/18b9acac12269899b0bfacb289d9bde3e1b065e4))
## Docs & Examples
* Clarify media treatment contracts ([12452a115](https://github.com/heygen-com/hyperframes/commit/12452a11569812003a067073c0497d69279b620d))
* Refine media treatment guides ([182862773](https://github.com/heygen-com/hyperframes/commit/182862773187dc01f08b2c29d2a3a5951afe5c5e))
* Document professional grading and media treatments ([1a2c30a79](https://github.com/heygen-com/hyperframes/commit/1a2c30a7994fc488685e9251a41e40eea2c3bcb2))
## Catalog
* **Registry:** Register device timeline synchronously ([2bb620517](https://github.com/heygen-com/hyperframes/commit/2bb620517749eefaa19e5fefbb2a85b9d6f538b8), [#2546](https://github.com/heygen-com/hyperframes/pull/2546))
## Internal
* **Studio:** Reuse player probe errors ([3af9a7df2](https://github.com/heygen-com/hyperframes/commit/3af9a7df2d687ec018f7d0705d25b5416c8dfa78))
* **Studio:** Mock composition thumbnails in smoke ([0faeb42f8](https://github.com/heygen-com/hyperframes/commit/0faeb42f86e20c5503e0827fa18b89050663bad7))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.77...v0.7.78).
Studio's timeline now exposes expandable property lanes, track headers, precise
keyframe retiming, and selection-safe editing across nested compositions. This
release also makes stalled CLI download cleanup reliable on Windows and adds an
opt-in prose-coverage floor to layout checks.
## Features
* **Studio:** Add expanded keyframe lanes, track headers, retiming interactions,
and nested-composition timeline support
([#2791](https://github.com/heygen-com/hyperframes/pull/2791))
* **Check:** Add the opt-in `proseCoverageFloor` layout rule
([#2834](https://github.com/heygen-com/hyperframes/pull/2834))
## Fixes
* **CLI:** Wait for stalled download pipelines to release temporary files before
cleanup, fixing the Windows locked-file failure
([#2835](https://github.com/heygen-com/hyperframes/pull/2835))
* **Telemetry:** Send CLI feedback through the plain-event path instead of the
PostHog survey API
([#2831](https://github.com/heygen-com/hyperframes/pull/2831))
## Performance
* **CI:** Distribute the two heaviest render fixtures and improve Docker layer
reuse for producer-only changes
([#2825](https://github.com/heygen-com/hyperframes/pull/2825),
[#2822](https://github.com/heygen-com/hyperframes/pull/2822))
## Docs & Examples
* **Send-to guide:** Clarify that enhance turns are free and rendering is the
paid step
([#2827](https://github.com/heygen-com/hyperframes/pull/2827))
## Internal
* **CLI:** Separate telemetry delivery from event policy while preserving the
queued flush and process-exit behavior
([#2344](https://github.com/heygen-com/hyperframes/pull/2344))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.76...v0.7.77).
Plan v2 chunk materialization now recreates declared video directory skeletons even
when a sparse chunk needs no frames, so inactive-video chunks render without
downloading unused artifacts. Layout checks also improve rotation-pivot drift
diagnostics.
## Fixes
* **Producer:** Materialize declared video directories for sparse Plan v2 chunks ([ddb59d356](https://github.com/heygen-com/hyperframes/commit/ddb59d3567fc70d808f86ef8b5b531078e3df2d6), [#2823](https://github.com/heygen-com/hyperframes/pull/2823))
* **Check:** Improve elongated rotation-pivot drift detection and detached-connector diagnostics ([75ed99e1d](https://github.com/heygen-com/hyperframes/commit/75ed99e1d4f45015812575ff26c07efb0b253f21), [#2819](https://github.com/heygen-com/hyperframes/pull/2819))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.75...v0.7.76).
Distributed capture now preflights `BeginFrame` support and falls back to screenshot
capture when the browser cannot provide a healthy `BeginFrame` session. A targeted
retry also recovers from `BeginFrame`-specific failures without masking unrelated errors.
## Fixes
* **Producer:** Fall back from unhealthy distributed `BeginFrame` capture safely ([96cafb47c](https://github.com/heygen-com/hyperframes/commit/96cafb47c6c9850939c85e2cc76e578d3b6dbd1b), [#2821](https://github.com/heygen-com/hyperframes/pull/2821))
* **Regression:** Schedule the Plan v2 color fixture in regression shards ([51cbbe6fc](https://github.com/heygen-com/hyperframes/commit/51cbbe6fc93e025ee94fc73ad2b65afce8a35d3b), [#2820](https://github.com/heygen-com/hyperframes/pull/2820))
## Internal
* **Regression:** Compute the shard matrix from recorded fixture timings ([f67012eb9](https://github.com/heygen-com/hyperframes/commit/f67012eb9f6a953de90a3d7828979b56a3c96006), [#2815](https://github.com/heygen-com/hyperframes/pull/2815))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.74...v0.7.75).
Distributed Plan v2 now handles extraction-cache sentinels and partial color metadata
without corrupting chunk dependencies. Distributed cold starts also preserve live GSAP
volume state, while GCP captures honor the effective `BeginFrame` boundary.
## Fixes
* **Producer:** Handle partial color metadata and extraction sentinels in Plan v2 ([58869f087](https://github.com/heygen-com/hyperframes/commit/58869f0878e304fd39d564b93cc4a8b18e885b4e), [#2814](https://github.com/heygen-com/hyperframes/pull/2814))
* **GCP Cloud Run:** Enforce effective `BeginFrame` capture ([2a284a8e3](https://github.com/heygen-com/hyperframes/commit/2a284a8e3aca62100ec037c23c98706e7146aa14), [#2817](https://github.com/heygen-com/hyperframes/pull/2817))
* **Core:** Avoid live volume probes during render ([477defc7e](https://github.com/heygen-com/hyperframes/commit/477defc7e7397684c2def4459b3981f62a06816d), [#2816](https://github.com/heygen-com/hyperframes/pull/2816))
## Performance
* **Producer:** Compute regression PSNR in one ffmpeg pass ([98a4cd70f](https://github.com/heygen-com/hyperframes/commit/98a4cd70fd2df38f300a2e19c86f75cd8dd93895), [#2813](https://github.com/heygen-com/hyperframes/pull/2813))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.73...v0.7.74).
Distributed Plan v2 publishers now stream content-addressed artifacts directly to
S3 and GCS, while oversized-plan diagnostics identify the dominant files and phases.
Rendering is more resilient through atomic media downloads, typed extraction retries,
and frame-coverage accounting aligned with FFmpeg's CFR rounding.
## Features
* **Studio:** Add professional grading controls ([20ef48abc](https://github.com/heygen-com/hyperframes/commit/20ef48abcb190e3e9ef132d1b1dd711201d3c58b))
* **CLI:** Expose agent-native color grading ([6d5961b80](https://github.com/heygen-com/hyperframes/commit/6d5961b8024fe70f87879f271dd91149717d41a8))
* **Gcp Cloud Run:** Publish plan v2 directly to GCS ([74d7bfde4](https://github.com/heygen-com/hyperframes/commit/74d7bfde4870bbc1c6c4471cfc004964807df3e7))
* **AWS Lambda:** Publish plan v2 directly to S3 ([09998789b](https://github.com/heygen-com/hyperframes/commit/09998789b5ff012adcd97e9fb33537e473f1cc52))
* **Core:** Add professional color grading controls ([f99fc4e56](https://github.com/heygen-com/hyperframes/commit/f99fc4e5686239f5ef56d4eb6083bee796ceeddc))
## Fixes
* **Producer:** Align frame coverage with extraction rounding ([f0c2c7d23](https://github.com/heygen-com/hyperframes/commit/f0c2c7d23384de589f54c11ff093f128c9a39e56))
* **Render:** Aggregate extraction launch failures ([33ca1de06](https://github.com/heygen-com/hyperframes/commit/33ca1de0631be66bfa5c591a231256c69667226e))
* **Producer:** Narrow extraction error shapes honestly ([c01e1a5f9](https://github.com/heygen-com/hyperframes/commit/c01e1a5f96839e1a2650516ceb3745ed7b28517f))
* **Producer:** Type video extraction failures ([9b63646c8](https://github.com/heygen-com/hyperframes/commit/9b63646c8aa036b786513137f2efcdf637ad432c))
* **Engine:** Block future-use IPv4 downloads ([2e84faeb2](https://github.com/heygen-com/hyperframes/commit/2e84faeb28ff8689da212a5b7db805f3b454d4d9))
* **Engine:** Close downloader trust-boundary gaps ([4b81f7858](https://github.com/heygen-com/hyperframes/commit/4b81f785868362fbb5c4bd7f1c5be24b2ccb7f94))
* **Engine:** Narrow network error shapes honestly ([5ce2eb879](https://github.com/heygen-com/hyperframes/commit/5ce2eb879db1bb2b3dd740bcd7e9abf8adaa3230))
* **Engine:** Make video downloads atomic and retry transient failures ([c01f6b446](https://github.com/heygen-com/hyperframes/commit/c01f6b446829f15c2c18dfd43da7013b412b2bf7))
* **Producer:** Reset distributed plan scratch state ([ebb02cafe](https://github.com/heygen-com/hyperframes/commit/ebb02cafe7e1d1e067bc37c00fd3613e20230ee5))
* **Producer:** Attribute and stop oversized plans early ([d699cbf01](https://github.com/heygen-com/hyperframes/commit/d699cbf014ac2232e3d2cec5c06c9d74103fa61f))
* **Studio:** Align professional grading contracts ([794930a07](https://github.com/heygen-com/hyperframes/commit/794930a07568deddd55ba0d891b68bec739641fa))
* **Studio:** Clear stale color scopes ([c1fcf7534](https://github.com/heygen-com/hyperframes/commit/c1fcf7534f730f5677b0d5201e6af6d17bd19cb0))
* **Core:** Register media analyzer subpath ([9b504045f](https://github.com/heygen-com/hyperframes/commit/9b504045f7cfd1a13e7b4d128cfdfe2e0631017f))
* **CLI:** Address media treatment review findings ([c1dde2898](https://github.com/heygen-com/hyperframes/commit/c1dde2898076b4d9b71b81d86cdf0f419350d93f))
* **Core:** Align secondary mask contracts ([e446de602](https://github.com/heygen-com/hyperframes/commit/e446de60234b837672100334fd169d2f2b547218))
* **Core:** Preserve curve compiler subpath exports ([9a515858c](https://github.com/heygen-com/hyperframes/commit/9a515858c9c65b749f1a976b3a72c5f4868a8256))
* **Core:** Address grading review findings ([1ffef9a26](https://github.com/heygen-com/hyperframes/commit/1ffef9a262ca13ada04d53d93d6f8bfbbfa83f26))
## Internal
* **CLI:** Harden media treatment parity ([20f4bde46](https://github.com/heygen-com/hyperframes/commit/20f4bde46a8862584470f895c8a6a4bf69716b2a))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.72...v0.7.73).
Distributed rendering now has a versioned Plan v2 contract with integrity-checked,
content-addressed artifacts and a remote publisher seam for object-storage-backed
workers, while retaining Plan v1 compatibility. This release also improves audio
duration accuracy, diagnostics, deterministic media treatments, and animation tooling.
## Features
* **AWS Lambda:** Support plan protocol v2 ([5bf61d6df](https://github.com/heygen-com/hyperframes/commit/5bf61d6df0694c3077ecc7e84cd9d72f2029a5e6), [#2789](https://github.com/heygen-com/hyperframes/pull/2789))
* **Producer:** Version distributed plan protocol ([f9f00b0ef](https://github.com/heygen-com/hyperframes/commit/f9f00b0efc2d1006967d5b2e0009ea3c3f6ed2e6), [#2777](https://github.com/heygen-com/hyperframes/pull/2777))
* **Lint:** Dense motion re-sampling for content\_overlap ([72e2f08f1](https://github.com/heygen-com/hyperframes/commit/72e2f08f15ceec105eb2bca6e9e35b8020e040be), [#2746](https://github.com/heygen-com/hyperframes/pull/2746))
* **Studio:** Add keyframe ease editor ([c253dec23](https://github.com/heygen-com/hyperframes/commit/c253dec23b0a6f1ccfe49c17371fdc9823f73b4c))
* **Core:** Add deterministic keyframe ease runtime ([5acbf240c](https://github.com/heygen-com/hyperframes/commit/5acbf240cbab38594d06b59b9ef7f2a4b37d31b7))
* **Studio:** Add media treatment inspector ([39c2341c4](https://github.com/heygen-com/hyperframes/commit/39c2341c4d1edf52a00fb8db4a49553c739860cc))
* **CLI:** Add agent-first media treatment tools ([4582881d0](https://github.com/heygen-com/hyperframes/commit/4582881d002c361afff59cc1c74ae072a50e17f7))
* **Lint:** Add off\_pivot\_rotation hub-referenced layout check ([e710a1686](https://github.com/heygen-com/hyperframes/commit/e710a1686f2442b460ea4973dca0be97c81ef184), [#2744](https://github.com/heygen-com/hyperframes/pull/2744))
* **Runtime:** Render media treatments deterministically ([944640c32](https://github.com/heygen-com/hyperframes/commit/944640c3283d604383fd437fcca8c63941d8e3d7))
## Fixes
* **Gcp Cloud Run:** Normalize v2 integrity codes ([0499a5cbc](https://github.com/heygen-com/hyperframes/commit/0499a5cbcb298c7dc4352a2d672b9e18c9db1d81), [#2790](https://github.com/heygen-com/hyperframes/pull/2790))
* **Producer:** Document read-only plan hashing ([c6fdd9c01](https://github.com/heygen-com/hyperframes/commit/c6fdd9c0154aacef9e16ab9c89d3249d0ef5d356), [#2788](https://github.com/heygen-com/hyperframes/pull/2788))
* **Producer:** Use portable audio padding filter ([3b9552ef9](https://github.com/heygen-com/hyperframes/commit/3b9552ef9db36b133485e4ce805892346e0b9006))
* **Producer:** Normalize padded audio on sample timeline ([4b116b988](https://github.com/heygen-com/hyperframes/commit/4b116b98802c05f0eeb541878806692eea975541))
* **Engine:** Stop mux at shortest normalized stream ([63bc525ca](https://github.com/heygen-com/hyperframes/commit/63bc525ca90b08356d50ebb41d4e15581c9d3470))
* **Producer:** Preserve normalized audio mux duration ([532461599](https://github.com/heygen-com/hyperframes/commit/532461599b7518f4609002cdb314ff2ce9f3a70f))
* **Render:** Cap final mux to video duration ([19258ea5b](https://github.com/heygen-com/hyperframes/commit/19258ea5ba47067e9d5756b122051c467ece0b04))
* **Render:** Cap trimmed audio container duration ([afc4e96bb](https://github.com/heygen-com/hyperframes/commit/afc4e96bbed21dbcd29544a6be95d35db7dd4eed))
* **Render:** Scope M4A priming preservation to trims ([9289551e9](https://github.com/heygen-com/hyperframes/commit/9289551e98958f006ec14af8ae9058096a4932fe))
* **Render:** Preserve normalized M4A edit timing ([59c56d325](https://github.com/heygen-com/hyperframes/commit/59c56d325723bbcb7c54315023aedeb72b376cd8))
* **Render:** Trim AAC packet padding exactly ([113a4985b](https://github.com/heygen-com/hyperframes/commit/113a4985b51bc1d77babe7113d6c96bbe46d41bf))
* **Engine:** Preserve bounded ffprobe diagnostics ([8c5077068](https://github.com/heygen-com/hyperframes/commit/8c50770684bc87ca67592c45d4101e3c029193d2), [#2772](https://github.com/heygen-com/hyperframes/pull/2772))
* **Audio:** Preserve causes and use portable padding ([37b88688e](https://github.com/heygen-com/hyperframes/commit/37b88688e7ae854e377c47fe3d9560ab0c930161), [#2769](https://github.com/heygen-com/hyperframes/pull/2769))
* **Parsers:** Preserve duration-authored keyframe timing ([4bfbd89d6](https://github.com/heygen-com/hyperframes/commit/4bfbd89d633d5fd227023643db62d2a566984edb))
* **Parsers:** Preserve authored keyframe intent ([d84e999f7](https://github.com/heygen-com/hyperframes/commit/d84e999f728e25cee15a71995805a52d0a7907c4))
* **Studio:** Preserve composed media treatments ([d5c7d3ee1](https://github.com/heygen-com/hyperframes/commit/d5c7d3ee16c2db53b91c66353d4f6387fe23e920))
* **Lint:** Drop false media\_in\_subcomposition rule ([e7f9918d2](https://github.com/heygen-com/hyperframes/commit/e7f9918d21f9fa57f1799c7b3ba38963cfcb52f1), [#2765](https://github.com/heygen-com/hyperframes/pull/2765))
## Catalog
* **Registry:** Add media treatment overlays ([b0d3164dd](https://github.com/heygen-com/hyperframes/commit/b0d3164ddb6177c6b31634f02a908fdae607850f))
## Internal
* **Producer:** Add remote-ready plan v2 publisher ([07f9a3de9](https://github.com/heygen-com/hyperframes/commit/07f9a3de954d663e61d0e7da233fe8d33a06a5f9), [#2792](https://github.com/heygen-com/hyperframes/pull/2792))
* **Producer:** Remove stale audio concat remnants ([3ef194234](https://github.com/heygen-com/hyperframes/commit/3ef194234e6104664b8b1902ae916dd7480c3617))
* **Render:** Cover duration-capped audio mux ([20188d637](https://github.com/heygen-com/hyperframes/commit/20188d637b51bed607593592469863ba189ea4ec))
* **CLI:** Move render module collection outside hooks ([3b3d4f559](https://github.com/heygen-com/hyperframes/commit/3b3d4f559ca0b97a4d48d5dbaef10c296407c9cb), [#2780](https://github.com/heygen-com/hyperframes/pull/2780))
* **Studio:** Simplify preview workspace layout ([bf47416e1](https://github.com/heygen-com/hyperframes/commit/bf47416e144bbd45c41375f357b229215aa11ccb))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.71...v0.7.72).
Finite compositions can now use GSAP `repeat: -1` loops when an explicit root
`data-duration` bounds the export, while unbounded infinite timelines remain
blocking. Preview also serves external symlink assets correctly, and this release
adds media-treatment capabilities plus performance and stability improvements
for data-driven caption templates.
## Features
* **Core:** Define media treatment capabilities ([70213c5a8](https://github.com/heygen-com/hyperframes/commit/70213c5a8526b12c8b26f01b8288d78bb9edc917))
## Fixes
* **Lint:** Allow bounded GSAP infinite repeats ([adb149b86](https://github.com/heygen-com/hyperframes/commit/adb149b86939e61bb3fce91cb8d0e5530f7bd29c), [#2763](https://github.com/heygen-com/hyperframes/pull/2763))
* **Preview:** Serve external symlink assets ([7778c093b](https://github.com/heygen-com/hyperframes/commit/7778c093b6288756cf5e27311828e6049e7c85c3), [#2764](https://github.com/heygen-com/hyperframes/pull/2764))
* **Caption Weight Shift:** Remove O(n^2) redundant hide-all-others loop ([5af6203ae](https://github.com/heygen-com/hyperframes/commit/5af6203ae7fcd506511ca5683a9097d666c4a63e))
* **Caption Editorial Emphasis / Emoji Pop:** Remove O(n²) redundant hide-all-others loop ([18de2b1f1](https://github.com/heygen-com/hyperframes/commit/18de2b1f1de8062a79ae7aa6fa4796e320fe6131))
## Catalog
* **Registry:** Liberal emoji-pop brand colors, weight-shift fit fixes, 8192 clamp ([8bf939043](https://github.com/heygen-com/hyperframes/commit/8bf939043fb44e05f6dd7caba81822ac5ef18334))
* **Registry:** Reject non-numeric caption-data versions; boot fetch never clobbers a manual attach ([5c2981d06](https://github.com/heygen-com/hyperframes/commit/5c2981d066480000d623e4d023e9cf918b2772e3))
* **Registry:** Encapsulate caption template runtimes in IIFEs ([e2846eb7c](https://github.com/heygen-com/hyperframes/commit/e2846eb7cc81821f7fc21a9c4dccdd85c7ef3429))
* **Registry:** Clear brand CSS custom properties on unbranded re-attach; remove dead italic path ([4f6994719](https://github.com/heygen-com/hyperframes/commit/4f6994719196e72dc01ebe8f60d869e064ec7685))
* **Registry:** Make caption-editorial-emphasis data-driven with emphasis heuristic ([ed8973952](https://github.com/heygen-com/hyperframes/commit/ed8973952dda2aa43931e0ffa05b3fc6ba0cb1cb))
* **Registry:** Make caption-highlight data-driven with automatic grouping ([7d4e71d10](https://github.com/heygen-com/hyperframes/commit/7d4e71d10b617b858fde2e764e15d530e9ffdf19))
* **Registry:** Make caption-emoji-pop data-driven with generic emoji lexicon ([392a9d251](https://github.com/heygen-com/hyperframes/commit/392a9d251a4feadbf7703ba4f9157c1857c7a59b))
* **Registry:** Force GSAP render at attach — seek(0) is a no-op on a fresh timeline ([020c8986f](https://github.com/heygen-com/hyperframes/commit/020c8986f46f795757203900cd251ad551ccc620))
* **Registry:** Make caption-pill-karaoke data-driven via caption-data runtime ([08620b75d](https://github.com/heygen-com/hyperframes/commit/08620b75df5275739fd9b0b8f480527fdc1d9a98))
* **Registry:** Make caption-weight-shift data-driven via caption-data runtime ([c67e9dc1f](https://github.com/heygen-com/hyperframes/commit/c67e9dc1f843122225468ce63a67c57f70c2bba2))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.70...v0.7.71).
Multi-worker renders using experimental fast capture (`--experimental-fast-capture`) now self-verify their frames on the disk path and automatically fall back to screenshot capture when GPU or memory pressure corrupts output — previously that corruption (e.g. a worker's frames displaced into vertical strips) could ship silently.
## Fixes
* **Engine/Producer:** Parallel and sequential disk-path drawElement capture now verify sampled frames against pre-injection ground truth and screenshot-retry on a breach — closing the gap where `--experimental-fast-capture --workers N` shipped compositor-damaged frames with no error (PRINFRA-352) ([060b6f8ae](https://github.com/heygen-com/hyperframes/commit/060b6f8ae53e8ae243d8e2c2c3afd690dbe7f99c), [ec791e91d](https://github.com/heygen-com/hyperframes/commit/ec791e91d97c0070502c4ad208923d4f98005846), [9fc1c2f15](https://github.com/heygen-com/hyperframes/commit/9fc1c2f15990fc44f50533362bec2f075aa1d53d), [c85cfae8f](https://github.com/heygen-com/hyperframes/commit/c85cfae8fa97229e9c4f4d7217cf08b4bc859f3d))
* **Producer:** Close the orphaned probe session before a verify-triggered retry so the probe Chrome process isn't leaked under the GPU/memory pressure the retry is recovering from ([b8e101547](https://github.com/heygen-com/hyperframes/commit/b8e10154762f5a0fe71fb4a6a9f3d472e9bf99ec))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.69...v0.7.70).
HyperFrames now catches rotation pivot drift during layout audits, helping surface off-center spinners before render. This release also preserves editable \ line breaks in SDK text edits, strengthens producer font, probe, and worker-memory handling, and improves preflight and pre-commit feedback.
## Features
* **Lint:** Add rotation\_pivot\_drift layout check ([222aec45a](https://github.com/heygen-com/hyperframes/commit/222aec45ab0553c014dddccd563e273affd9b71a), [#2741](https://github.com/heygen-com/hyperframes/pull/2741))
## Fixes
* **Sdk:** Keep \ line breaks editable and uncorrupted in setText ([dd7378bbd](https://github.com/heygen-com/hyperframes/commit/dd7378bbd934ecc0da85c1edfae7946ac7e2271a), [#2742](https://github.com/heygen-com/hyperframes/pull/2742))
* **Lint:** Address render preflight review feedback ([7a294f195](https://github.com/heygen-com/hyperframes/commit/7a294f19562928036dae20d5e73c2637d1e19060), [#2739](https://github.com/heygen-com/hyperframes/pull/2739))
* **Producer:** Resolve residual font and probe failures ([948264d6b](https://github.com/heygen-com/hyperframes/commit/948264d6b205cadd191e04f36af332ed4a6bb233), [#2738](https://github.com/heygen-com/hyperframes/pull/2738))
* **Hooks:** Pre-commit gate denies commit instead of ending the turn ([97ec7db5c](https://github.com/heygen-com/hyperframes/commit/97ec7db5cccd14a47fcfbe534d269dfea7a0d37d))
* **Producer:** Emit heap advisory at orchestrator, lock message + telemetry props with tests ([c6462a0a2](https://github.com/heygen-com/hyperframes/commit/c6462a0a225772c7a357afd5fe2f5c9a39bca238))
* **Engine:** Realistic worker memory budget + sizing/feedback telemetry ([12e599a6b](https://github.com/heygen-com/hyperframes/commit/12e599a6bac7dea5feec59c71dd0e5aeecab354e))
[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.7.68...v0.7.69).
Bug-fix release. The video coverage gate no longer aborts renders of looping short videos, and composition-level CSS with native CSS Nesting now applies to nested selectors instead of being silently ignored.
## Fixes
* **Producer:** Credit looping short videos in coverage gate (#2665). A short clip in a longer slot with `loop` set delivers all its source frames once and reuses them per repeat; the gate now measures against source-source instead of unique-source-vs-slot, so a 3s looping clip in a 10s slot no longer aborts at 30% coverage ([a637f394e](https://github.com/heygen-com/hyperframes/commit/a637f394ee900c64c8f2e1ee78cf1e0ce17b8739), [#2732](https://github.com/heygen-com/hyperframes/pull/2732))
* **Core:** Preserve nested-rule selectors in composition CSS scoping (#2721). Native CSS Nesting (Chrome 112+ / Firefox 117+ / Safari 16.5+) now works inside a composition's `
```
`data-playback-start` picks which moment of the child timeline shows first.
It defaults to `0`. Trimming or splitting from the left pushes this offset
forward by the time elapsed multiplied by `data-playback-rate`, so the
nested animation keeps going instead of jumping back to its beginning.
Write the nested composition straight into the parent. Simpler for
something you only use once.
```html index.html theme={null}
Welcome!
```
No `` tag and no `data-composition-src` here.
### Where the files live
## HTML sets the timing, scripts do the motion
Your HTML says what plays, when, and on which track, all through
[data attributes](/concepts/data-attributes). Your scripts handle the creative
part: effects, transitions, canvas, SVG, [GSAP](/guides/gsap-animation)
animation.
Never use a script to play, pause, or seek a media element, and never use one
to show or hide a clip based on time. The framework already does that from the
data attributes, and a script doing it too will fight the framework. See
[Common Mistakes](/guides/troubleshooting) for what that looks like.
## Reuse one composition with different content
One source file can appear several times in the same video, each copy carrying
its own text and colors. HyperFrames does not wire `data-var-*` attributes into
your DOM or CSS for you — you do it in three steps:
1. Declare each variable — id, type, default — on the sub-composition's root
with `data-composition-variables`. That root is the `` element in a
full-document composition, or the `[data-composition-id]` element in a
template or fragment.
2. Pass each copy's values on its host element with `data-variable-values`.
3. Read them inside the composition with
`window.__hyperframes.getVariables()`, which layers the host's values over
the declared defaults, one copy at a time.
```html index.html theme={null}
```
The second card's `data-start="card-pro"` means "start when that one ends".
And the source file both cards share:
```html compositions/card.html theme={null}
```
[Variables](/concepts/variables) covers the types, the bindings that need no
script, CLI overrides, and which value wins. If you are building tooling on
`@hyperframes/core`, `extractCompositionMetadata()` reads the same
`data-composition-variables` array — that is how Studio builds its editing UI.
## See every composition in a project
```bash theme={null}
npx hyperframes compositions
```
## Related topics
* [Data attributes](/concepts/data-attributes)
* [Deterministic rendering](/concepts/determinism)
* [Variables](/concepts/variables)
* [Animate with GSAP](/guides/gsap-animation)
* [HTML schema reference](/reference/html-schema)
* [Start from an example](/examples)
# Time elements with data attributes
Source: https://hyperframes.heygen.com/concepts/data-attributes
Place clips on the HyperFrames timeline without putting timing logic in JavaScript.
HyperFrames keeps timing in HTML. A timed element normally needs a stable ID,
a start, a duration, and a track:
```html theme={null}
Launch day
```
| Attribute | What it controls |
| ------------------ | ------------------------------------------------ |
| `data-start` | When the element enters the composition timeline |
| `data-duration` | How long its timeline slot lasts |
| `data-track-index` | Which timeline lane owns that slot |
Add `class="clip"` to timed DOM and image elements so the runtime can control
their visibility. Video visibility is managed by the media runtime; audio has
no visual lifecycle.
## Tracks are not layers
Tracks prevent time ranges from colliding. They do not decide which element is
in front. Use CSS `z-index` for paint order.
Two clips on one track cannot overlap. Put an intentional overlap, such as a
crossfade, on separate tracks:
```html theme={null}
The result
```
## Start relative to another clip
A numeric `data-start` is an absolute time in seconds. A clip ID means “start
when that clip ends.” Add or subtract seconds for a gap or overlap:
```html theme={null}
data-start="intro" data-start="intro + 0.5" data-start="intro - 0.5"
```
References resolve only inside the same composition. The referenced clip must
have a known duration, and reference chains cannot contain a cycle.
## Media and nested compositions
Media can also declare a source offset, playback rate, and volume. A nested
composition adds a source path and its own fixed timeline window. These are
exact contracts rather than new timing models.
Use the [HTML schema reference](/reference/html-schema) for every supported
attribute and element-specific rule. Use [Compositions](/concepts/compositions)
to decide when a scene should become a separate composition.
# Deterministic Rendering
Source: https://hyperframes.heygen.com/concepts/determinism
Same input, identical output. Every time.
The same [composition](/concepts/compositions) always produces the same video.
That is the guarantee everything else rests on — it is why automated pipelines,
CI tests, and AI-driven editing can be trusted.
## Why the same frame always comes out the same
Rendering never plays your video. It asks for one frame at a time, and the
answer to "what does frame 90 look like?" depends on exactly one thing that
changes: the number 90.
```mermaid theme={null}
flowchart TD
F["Frame 90"] --> T
L["Locked before frame 0: fps, width, height, variables"] --> T
T["t = 90 / fps integer math, never a clock"] --> S["Every animation seeked to exactly t"]
S --> P["The same pixels, every run"]
S -.-> X["Breaks if a frame reads: Date.now, unseeded Math.random, or a mid-render fetch"]
```
So the rules are short:
* **No wall clock.** No `Date.now()`, no `requestAnimationFrame`, no system
timers.
* **No unseeded randomness.** `Math.random()` without a seed gives a different
frame every run.
* **No fetching mid-render.** Every asset loads before the first frame.
* **Fixed output size.** `fps`, `width`, and `height` are locked before frame 0.
* **A finite length.** Every composition has a known end.
## What happens on each frame
The [engine](/packages/engine) works out the time with integer math:
`time = floor(frame) / fps`. Real time is never consulted.
The [frame adapter](/concepts/frame-adapters) gets `seekFrame(frame)` and
moves every animation, DOM change, and canvas draw to that exact moment. All
[GSAP](/guides/gsap-animation) timelines are paused and seeked, never played.
Chrome's `HeadlessExperimental.beginFrame` grabs the pixels in one atomic
operation. No half-painted frames.
FFmpeg turns the captured frames into the MP4 and mixes in the audio from
your `
Every [frame adapter](/concepts/frame-adapters) follows these same rules. If you
write your own, it must follow the
[determinism contract](/concepts/frame-adapters#contract):
`seekFrame(frame)` gives the same result for the same frame, seeks work in any
order, nothing resolves after the frame is committed, and the lifecycle stays
`init` → `seekFrame` (many times) → `destroy`.
## Rule out your machine as a variable
Fonts and Chrome versions differ between computers, so a local render can shift
by a pixel from one machine to the next. Render in Docker when you need exact
reproducibility:
```bash theme={null}
npx hyperframes render --docker --output output.mp4
```
Docker pins the Chromium version, the font set, and the FFmpeg encoder, so the
platform stops being an input. The [Rendering guide](/guides/rendering) covers
every other option.
## Will the preview match the render?
Every frame looks the same in both, because both run the same
`hyperframe.runtime`, the [producer's](/packages/producer) seek behavior is the
single source of truth, and the `__playerReady` and `__renderReady` gates hold
capture until the composition is fully loaded.
Speed is a different story. Preview plays in real time in your browser, so it is
limited by your hardware. Render is seek-driven and takes one frame at a time,
so it never drops a frame no matter how expensive that frame is. A composition
that stutters in preview still renders perfectly — see
[Performance](/guides/performance).
## Related topics
* [Frame adapters](/concepts/frame-adapters)
* [Render to MP4](/guides/rendering)
* [Compositions](/concepts/compositions)
* [@hyperframes/producer](/packages/producer)
* [Common mistakes that break determinism](/guides/troubleshooting)
# Frame adapters
Source: https://hyperframes.heygen.com/concepts/frame-adapters
Connect a seekable animation timeline to a custom HyperFrames host.
The exported `FrameAdapter` interface is experimental v0 API. Its signatures
may change before v1.
A frame adapter answers one question: what state should an animation have at frame N?
Most composition authors do not implement this interface. HyperFrames already seeks registered GSAP, CSS, Anime.js, Lottie, Three.js, Web Animations, and TypeGPU animation through its browser runtime. Use the [GSAP guide](/guides/gsap-animation) for the normal authoring path.
Use `FrameAdapter` when you are building a custom host around a seekable animation object.
Rendering never plays the animation. It asks for one frame, waits, captures it,
then asks for the next — so the same frame always comes out the same.
```mermaid theme={null}
sequenceDiagram
participant R as Renderer
participant A as Frame adapter
participant T as Your timeline
R->>A: getDurationFrames()
A-->>R: 120
loop every frame, in any order
R->>A: seekFrame(90)
A->>T: jump to 3.0s and settle
T-->>A: state at 3.0s
A-->>R: ready
R->>R: capture the pixels
end
R->>A: destroy()
```
## Interface
```ts theme={null}
import type { FrameAdapter, FrameAdapterContext } from "@hyperframes/core";
type FrameAdapter = {
id: string;
init?: (context: FrameAdapterContext) => Promise | void;
getDurationFrames: () => number;
seekFrame: (frame: number) => Promise | void;
destroy?: () => Promise | void;
};
```
The context contains the composition ID, frame rate, dimensions, and optional root element.
## Adapt a GSAP timeline
`@hyperframes/core` includes a helper for a GSAP-like timeline:
```ts theme={null}
import { createGSAPFrameAdapter } from "@hyperframes/core";
const adapter = createGSAPFrameAdapter({
id: "intro",
fps: 30,
timeline,
});
await adapter.init?.({
compositionId: "intro",
fps: 30,
width: 1920,
height: 1080,
});
await adapter.seekFrame(90); // three seconds
```
The helper pauses the timeline, derives its frame length, and converts each frame request to seconds.
## Contract
A custom adapter must:
* return a finite, non-negative frame count;
* support forward, backward, and random seeks;
* return the same state when the same frame is requested again;
* avoid wall-clock timers and unseeded randomness;
* finish asynchronous work before the frame is captured;
* release listeners and other resources in `destroy()`.
The host still owns the capture and encoding pipeline. The adapter owns only the animation state.
## Continue
Read [Deterministic rendering](/concepts/determinism) for the timing rules or [`@hyperframes/core`](/packages/core) for the package exports.
# How a HyperFrames project works
Source: https://hyperframes.heygen.com/concepts/index
Understand the editable files, compositions, timing, and tools behind a HyperFrames video.
A HyperFrames project is a folder your agent can create and you can keep
editing. Its HTML is the video: it describes the scenes, timing, motion, media,
and reusable parts that HyperFrames plays or renders.
One folder of HTML is the whole video. Every tool below reads and writes those
same files — there is no export step between them and no second version of the
project.
```mermaid theme={null}
flowchart TD
S["Your project folder HTML, CSS, media"]
A["Agent story and structure"] <--> S
T["Studio what you can point at"] <--> S
C["CLI check, preview, render"] <--> S
K["SDK and Player inside your own product"] <--> S
S --> R["renders/final.mp4"]
```
## The source is the project
The agent, Studio, CLI, SDK, and Player do not create separate versions of the
video. They work with the same project files.
| What you want to change | Best place to start |
| ---------------------------------------------------- | ------------------- |
| Story, structure, or several scenes | Ask the agent |
| Text, layout, timing, or animation you can see | Studio |
| Preview, checks, snapshots, rendering, or automation | CLI |
| A composition inside your own product | SDK or Player |
Studio writes supported edits back into the source. An agent can continue from
those files, Git can track them, and the renderer sees the same result.
## What the agent creates
A larger project often looks like this:
```text theme={null}
project/
├── BRIEF.md what the video must communicate
├── STORYBOARD.md the planned sequence and review state
├── SCRIPT.md locked narration, when the video has it
├── frame.md visual direction, when the project needs one
├── index.html the main composition
├── hyperframes.json project settings
├── compositions/ scenes and reusable visual parts
├── assets/ images, video, audio, and fonts
└── renders/ finished files
```
Only the project source is essential. Planning files exist to preserve decisions
across reviews and agent sessions. A simple title card may need only
`index.html` and an asset; a narrated launch film benefits from a brief,
storyboard, script, and separate scenes.
## Compositions hold the video together
A **composition** is a finite, seekable piece of the project. The main
composition is the complete sequence. Other compositions can be scenes,
captions, title systems, or visuals reused more than once.
```mermaid theme={null}
flowchart LR
M["index.html the main composition"]
M --> O["Opening 0s - 4s"]
M --> P["Product demo 4s - 10s compositions/product-demo.html"]
M --> C["Customer proof 10s - 15s"]
M --> Z["Closing 15s - 18s"]
```
Each part is still HTML. A larger project stays manageable because a scene can
be built and checked on its own, then placed on the main timeline.
```html theme={null}
```
Edit the nested composition when the scene itself should change everywhere it
is used. Edit its placement in the main composition when only this appearance
should start earlier, run longer, or move to another layer.
## Time is part of the source
Timed elements carry their start, duration, and track in HTML:
```html theme={null}
```
This image starts at two seconds, remains for three seconds, and appears on
track one. Animation timelines are paused and seekable, so Studio, the Player,
and the renderer can request an exact moment without playing from the
beginning.
## Variables keep approved parts changeable
A variable exposes something that is meant to change—such as a title, logo,
color, price, or customer name—without rebuilding the layout. One composition
can produce several approved versions while preserving its design and motion.
Use a variable when the structure should stay fixed. Use a normal edit when the
structure itself needs to change.
## How a project moves forward
There is no required seven-step ceremony. The project records only the
decisions its size and review process need.
| Decision | Where it usually lives |
| ------------------------------ | ----------------------------------------------------------- |
| What the video is for | Your request and, for a fuller project, `BRIEF.md` |
| What happens and in what order | `STORYBOARD.md` and optional `SCRIPT.md` |
| How it looks | `frame.md`, project assets, and the compositions themselves |
| The editable result | `index.html`, `compositions/`, and `assets/` |
| The approved delivery | checks plus the file in `renders/` |
Review the message and sequence before polishing individual frames. Once the
project looks right, run the checks, render it, and watch the exported file.
## Why rendering can repeat the same moment
HyperFrames seeks the composition to an exact time, captures the frame, and
advances. Media and audio follow the same timeline.
For the same source, media, and settings, an exact timestamp should resolve to
the same project state. Compositions therefore avoid the current clock,
unseeded randomness, and render-time network requests.
## Go deeper when you need it
Expose approved content without opening the layout.
Review, check, render, watch, and deliver the same project.
Use nested compositions and exact source attributes.
Look up the complete technical composition contract.
## Related topics
* [Take more control of an existing project](/go-further)
* [Look up the complete HTML schema](/reference/html-schema)
* [Choose a developer integration surface](/developers/overview)
# Reuse a design with variables
Source: https://hyperframes.heygen.com/concepts/variables
Change approved text, colors, media, and choices without rebuilding the composition.
Variables expose the parts of a composition that are meant to change. One
customer card can accept a different name, logo, color, and plan while keeping
the same layout and motion.
Use a variable when the design should remain stable across versions. Make a
normal source edit when the structure itself needs to change.
Default values
The same design with different values
## Use variables in Studio
Studio can create and bind variables, preview overrides, and copy the reviewed
values into a render command. Follow [Use variables and templates](/studio/variables)
for that complete workflow.
## Advanced: declare the approved inputs
Variables live on the composition declaration:
```html compositions/card.html theme={null}
```
Supported declared types are:
| Type | Good for |
| --------- | -------------------------------------- |
| `string` | Text or a media path |
| `number` | Counts, positions, sizes, or strengths |
| `color` | Approved color choices |
| `boolean` | On or off |
| `enum` | One value from an approved list |
| `font` | A font-family choice |
| `image` | An image path or image value |
The type lets Studio show the right control and lets rendering catch invalid
values.
## Bind common values without a script
Use direct bindings for the normal cases:
```html theme={null}
Pro
```
* `data-var-text` replaces the element’s own text.
* `data-var-src` replaces an image, video, audio, or source URL.
* Scalar variables are available as CSS custom properties such as
`var(--accent)`.
Use `window.__hyperframes.getVariables()` only when the result needs conditions,
loops, or derived values:
```js theme={null}
const { featured = false } = window.__hyperframes.getVariables();
document.querySelector(".badge").hidden = !featured;
```
## Give each nested composition different values
A parent can reuse the same composition several times:
```html index.html theme={null}
```
Both instances keep the same source and receive different content.
## Advanced: render a version from data
Override top-level values from the CLI:
```bash theme={null}
npx hyperframes render \
--variables '{"title":"Enterprise","accent":"#22c55e"}' \
--strict-variables \
--output enterprise.mp4
```
Use `--variables-file` for a JSON file and `--batch` when the same composition
must render once per data row. The [CLI reference](/packages/cli) covers batch
output, validation, and automation.
### Batch renders
Put one variable object per row in a JSON array, then use placeholders from the
row to name each output:
```json rows.json theme={null}
[
{ "name": "acme", "title": "Acme Pro" },
{ "name": "northstar", "title": "Northstar Pro" }
]
```
```bash theme={null}
npx hyperframes render \
--batch rows.json \
--strict-variables \
--output "renders/{name}.mp4"
```
Start with the default single-row concurrency. Increase `--batch-concurrency`
only after one real render is stable and the machine has enough memory for
several renders at once.
## What can't be a variable
Variables change content inside a composition. They do not change:
* the composition viewport;
* the root composition’s total render duration;
* frame rate;
* output format, codec, or quality;
* a parent or sibling composition unless values are passed to it explicitly.
Those choices are read from source or render settings before composition logic
runs.
## Check the contract
Run:
```bash theme={null}
npx hyperframes lint
```
The linter catches malformed declarations, missing fields, wrong default types,
and invalid enum choices. `--strict-variables` turns undeclared or mistyped
render values into errors.
Continue to [Compositions](/concepts/compositions) for nesting or the
[HTML schema](/reference/html-schema) for the complete attribute contract.
# Contribute to HyperFrames
Source: https://hyperframes.heygen.com/contributing
Set up the repository, make a focused change, and open a pull request.
## Set up the repository
```bash theme={null}
git clone https://github.com/YOUR_USERNAME/hyperframes.git
cd hyperframes
bun install
bun run build
```
HyperFrames uses Bun for workspace operations. Do not add a `pnpm-lock.yaml` or replace `bun.lock`.
Start Studio while working on UI or composition behavior:
```bash theme={null}
bun run dev
```
Studio listens on `http://localhost:5190` when run from the monorepo.
## Check your change
Run the smallest relevant test while iterating, then the repository gates before opening a pull request:
```bash theme={null}
bun run lint
bun run format:check
bun run --filter '*' typecheck
bun run test
```
For a composition, run the gates from the project directory, or pass it:
```bash theme={null}
npx hyperframes lint ./my-video
npx hyperframes check ./my-video
```
Registry items need a different command. They ship as `.html` or
`demo.html`, and the CLI resolves a project by looking for `index.html`, so
pointing it at an item directory fails with "No composition found" — which is
how two `gsap_non_transform_motion` errors once reached `main` unlinted. Use the
script that mounts each item into a throwaway project first, exactly where
`hyperframes add` would put it:
```bash theme={null}
bun run lint:registry-items # every item
bun run lint:registry-items my-block # just one
```
The pre-commit hooks format staged files and run checks for the files you changed.
## Work in the right package
| Surface | Package or directory |
| --------------------------------------- | -------------------------------------------------- |
| Composition parsing, runtime, types | `packages/core` and `packages/parsers` |
| Browser frame capture | `packages/engine` |
| Encoding and audio/render orchestration | `packages/producer` |
| Command line | `packages/cli` |
| Browser editor | `packages/studio` and `packages/studio-server` |
| Embeddable player | `packages/player` |
| Headless editing API | `packages/sdk` |
| AWS and GCP distributed rendering | `packages/aws-lambda` and `packages/gcp-cloud-run` |
| Reusable blocks and snippets | `registry` |
| Agent instructions | `skills` |
For Studio changes, verify the behavior in the browser and preserve the source-patching and capability-gate contracts described in the [Studio docs](/studio/index).
## Pull request requirements
* Keep the change focused and explain the user-visible reason for it.
* Add or update tests when behavior changes.
* Use a conventional PR title such as `fix: preserve audio after seeking`.
* Run formatting, lint, typecheck, and relevant tests.
* Include screenshots or a short capture for visual changes.
* Target prerelease-only work to the branch described in [Release channels](/contributing/release-channels).
Use [GitHub Issues](https://github.com/heygen-com/hyperframes/issues) for bugs and proposals. A useful bug report includes the smallest reproduction, the first exact error, `npx hyperframes info`, and the operating system.
By contributing, you agree that your work is licensed under the [Apache 2.0 License](https://github.com/heygen-com/hyperframes/blob/main/LICENSE) and follows the [Code of Conduct](https://github.com/heygen-com/hyperframes/blob/main/CODE_OF_CONDUCT.md).
## Related topics
* [Test local CLI changes](/contributing/testing-local-changes)
* [Contribute a Catalog item](/contributing/catalog)
* [Understand release channels](/contributing/release-channels)
# Canary rollouts
Source: https://hyperframes.heygen.com/contributing/canary-rollouts
Ship a change to a percentage of installs instead of all-or-nothing.
Most flags in this repo are binary: a change is off, or on for everyone. A
canary is the rung in between — the same change, enabled for a stable slice of
installs, ramped as the signal holds.
A canary is a *measured* rollout: a slice is enrolled so it can be compared
against everyone else. So **opting out of telemetry opts you out of
canaries** — an opted-out install is never bucketed at all. See the
[`telemetry` command](/packages/cli#telemetry) for the opt-out routes.
## Add one
**1. Register it at 0%** in `packages/core/src/canaryRegistry.ts`:
```ts theme={null}
{
name: "my-feature",
percentage: 0,
description: "One line on what turning this on actually changes.",
owner: "your-handle",
sunsetAfter: "2026-12-01",
}
```
At `0` it is inert, so this lands safely on its own.
**2. Read it at the decision point.**
```ts theme={null}
import { isCanaryEnabled } from "../telemetry/canary.js";
if (isCanaryEnabled("my-feature")) {
// new path
} else {
// existing path
}
```
That is the whole API. The percentage lives in the registry, never at the call
site.
**3. Ramp it** by editing `percentage` in a patch release: `0 → 5 → 25 → 100`.
Widening is inclusive — everyone already in the 10 stays in the 25, so a
before/after comparison survives the ramp. Do not rename a live canary: the
name is part of the bucket hash, so renaming reshuffles the cohort mid-rollout.
**4. Delete it** at 100 and holding — the registry entry *and* the branch it
guarded. The scheduled **Canary sunset** workflow enforces this: it runs weekly
and fails once `sunsetAfter` passes, naming the overdue rollout and its owner in
the run log. It notifies nobody, so watch it if you own a canary. Run it
yourself with `bun scripts/check-canary-sunset.ts`.
## Override one
```bash theme={null}
HF_CANARY_MY_FEATURE=on # or off / true / false / 1 / 0 / yes / no
```
Upper-snake-case the name. In Studio, use `?hf_canary_my_feature=on`. An
override always wins over the percentage, in both directions — escalations,
dogfooding, bisects, a panic-off. It is also the way to exercise a canary with
telemetry off.
Everything else fails closed below 100%: no bucket seed, an unregistered name,
or a CI machine all resolve to *not enrolled*. At exactly 100% those exclusions
stop applying, so nothing takes the new path for the first time at deletion.
## Remove one from your machine
Cohorts bucket on a seed in `install-state.json`, which sits beside
`config.json` in `~/.hyperframes` — not on the telemetry id. So a full reset is
one command:
```bash theme={null}
rm -rf ~/.hyperframes # clears telemetry id, canary cohorts, and breaker state
```
`hyperframes telemetry status` prints both paths if you want to inspect or
delete them individually. Nothing canary-related is stored anywhere else.
## Where it lives
| File | Role |
| ----------------------------------------- | ---------------------------------------------------- |
| `packages/core/src/canaryRegistry.ts` | Every rollout, with owner and sunset date |
| `packages/core/src/canary.ts` | Pure evaluator — no fs, no network, browser-safe |
| `packages/cli/src/telemetry/canary.ts` | CLI binding: bucket seed, env override, CI detection |
| `packages/studio/src/telemetry/canary.ts` | Studio binding: adopts the CLI's published decisions |
The evaluator is dependency-free so Studio and the embeddable player can use it
too; each surface supplies its own unit id through a thin binding. Studio
adopts the CLI's decisions rather than re-deriving them, so one render spanning
both surfaces never runs half-enrolled.
## Related topics
* [Testing local changes](/contributing/testing-local-changes) — exercise your
canary before anyone else gets it.
* [Release channels](/contributing/release-channels) — which branch a ramp belongs on.
* [`telemetry` command](/packages/cli#telemetry) — what is collected, and how a
user turns it off.
# Contribute to the Catalog
Source: https://hyperframes.heygen.com/contributing/catalog
Add a reusable block or component to the HyperFrames registry.
The Catalog is generated from the registry in the HyperFrames repository. You
can contribute a visual idea or build an item that anyone can install.
## Choose how to contribute
### Suggest an idea
Open a [GitHub issue](https://github.com/heygen-com/hyperframes/issues) with a
visual reference and explain where the effect would be useful. A screen
recording, Figma sketch, or example from another tool is enough to start.
### Build an item
Ask your agent to use the `/hyperframes-registry` skill, or follow the same
workflow below.
## Choose the item type
| Type | Use it for | Required files |
| --------- | ----------------------------------------------------------- | -------------------------------------------------------------------- |
| Block | A standalone composition with fixed dimensions and duration | `registry-item.json` and the composition HTML |
| Component | A snippet installed into another composition | `registry-item.json`, the snippet HTML, and a standalone `demo.html` |
Each item has its own directory under `registry/blocks/` or
`registry/components/`. Prefix every element ID with a short abbreviation of
the item name so it cannot collide when installed as a sub-composition.
```text theme={null}
registry/blocks/my-block/
my-block.html
registry-item.json
registry/components/my-effect/
my-effect.html
demo.html
registry-item.json
```
The Catalog preview generator skips a component without `demo.html`.
## Define the manifest
`registry-item.json` follows the
[registry item schema](https://github.com/heygen-com/hyperframes/blob/main/packages/core/schemas/registry-item.json).
Blocks declare `dimensions` and `duration`; components must not.
```json theme={null}
{
"$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,
"params": [
{
"key": "--accent",
"label": "Accent",
"type": "color",
"default": "#ff4d4d"
}
],
"files": [
{
"path": "my-block.html",
"target": "compositions/my-block.html",
"type": "hyperframes:composition"
}
]
}
```
Use `params` for the values someone should be able to change in Studio without
editing HTML. Supported controls are `color`, `text`, `number`, and `select`.
Other useful optional fields include `author`, `authorUrl`, `relatedSkill`,
`registryDependencies`, `license`, `sourcePrompt`, `minCliVersion`, and
`deprecated`. The TypeScript registry types and existing manifests are the
current authority. The published JSON schema validates the shared manifest
fields but does not yet describe the block-only `params` field.
## Build for reuse
Every registry item must:
* use a paused GSAP timeline registered on `window.__timelines`;
* match `data-composition-id` to the registered timeline ID;
* use prefixed element IDs;
* avoid `Date.now()`, unseeded `Math.random()`, and real-time animation loops;
* seek correctly at any frame;
* work after installation outside its source directory.
A one-off example belongs in [Examples](/examples), not the Catalog.
## Validate and preview
Lint the item the way a user receives it — mounted into a real project. A bare
`npx hyperframes lint` cannot validate a registry directory, because the CLI
looks for `index.html` and items ship as `.html` or `demo.html`:
```bash theme={null}
bun run lint:registry-items my-block
```
To exercise the full gate, install the item into a scratch project and run there:
```bash theme={null}
npx hyperframes init scratch && cd scratch
npx hyperframes add my-block
npx hyperframes check
```
Generate the Catalog page and preview assets:
```bash theme={null}
npx tsx scripts/generate-catalog-pages.ts
npx tsx scripts/generate-catalog-previews.ts --only my-block
```
These generators read the item directly from the working tree. The `add`
command cannot install an unpublished local item by name: it resolves items
from the registry URL in `hyperframes.json`. Test `npx hyperframes add my-block`
from a clean project after the item is present in that registry manifest.
Do not hand-edit the generated item page. Fix its registry manifest or the
generator and regenerate it.
Watch the preview at full speed. Passing `check` proves the composition is
valid; it does not prove that the motion is readable or useful.
| Review question | What good looks like |
| ------------------------------------ | ------------------------------------------------ |
| Is there one visual hero? | The eye knows where to look in the first second |
| Can the important text be read once? | Information lands, then holds before the cut |
| Does motion accelerate and settle? | It does not drift at constant speed like a slide |
| Can someone restyle it? | Brand-facing values are exposed as parameters |
| Is it meaningfully reusable? | It solves a repeated production problem |
## Open the pull request
Include:
* the item directory;
* the matching entry in `registry/registry.json`;
* regenerated Catalog output;
* a `hyperframes.dev` preview from `npx hyperframes publish`;
* when to use it, its useful duration range, and any known pitfalls.
External contributors should attach the preview MP4. A maintainer will publish
the final Catalog media. HeyGen contributors can use
`scripts/upload-docs-images.sh` after preview review.
# Changelog process
Source: https://hyperframes.heygen.com/contributing/changelog-process
How HyperFrames drafts, reviews, and publishes release notes.
HyperFrames changelogs have two audiences:
* Developers reading the docs changelog for user-facing changes, migration notes, and reasons to upgrade.
* Maintainers publishing GitHub Releases during the npm release process.
The release workflow keeps both audiences in sync while preserving a human editing step.
## Goals
* Make every stable release easy to scan from the docs site.
* Publish useful GitHub Release notes without relying only on raw commit logs.
* Keep release notes editable before publishing.
* Avoid over-documenting internal-only commits that do not change user behavior.
## Source of truth
Each reviewed release note lives in `releases/vX.Y.Z.md`.
The docs changelog lives in `docs/changelog.mdx` and uses Mintlify `` entries. The draft generator can prepend a docs entry, but maintainers should edit the generated copy before tagging the release. After any manual rewrite, keep `releases/vX.Y.Z.md` and the matching docs `` entry in sync.
## Stable release workflow
Run the stable release command from the repository root:
```bash theme={null}
bun run release:prepare 0.6.53
```
On the first run, this creates or updates the changelog draft and then exits before tagging:
* `releases/v0.6.53.md`
* `docs/changelog.mdx`
The checkpoint exits non-zero intentionally so chained release commands stop. Review the generated copy, remove the TODO summary marker, and rerun the same command. Once both changelog artifacts are reviewed, `release:prepare` runs `set-version` to create the release commit and tag.
Read the generated notes and rewrite them for users. Prioritize impact over implementation detail.
Call out:
* Breaking changes and required migration steps
* New capabilities
* Important bug fixes
* Performance or reliability improvements
* Security fixes
After review, run the same command again:
```bash theme={null}
bun run release:prepare 0.6.53
```
For stable releases, `release:prepare` checks that `releases/v0.6.53.md` exists, that `docs/changelog.mdx` has a matching `HyperFrames v0.6.53` entry, and that neither artifact still contains the generated TODO summary. The lower-level `set-version` command enforces the same reviewed-changelog checkpoint for maintainers who run it directly. Prereleases and `--no-tag` version bumps skip this check. Use `--skip-changelog-check` only for emergency stable releases.
The release commit can include the version bump, `releases/v0.6.53.md`, and the docs changelog update.
Push the `release/v0.6.53` branch without its local tag, open a PR to `main`, and merge it after approval and CI. The publish workflow pins its checkout to the exact merge SHA, verifies that SHA, creates `v0.6.53`, and uses `releases/v0.6.53.md` as the GitHub Release body. If no reviewed release file is present, it falls back to GitHub-generated notes.
To recover a failed publish, rerun the original merged-PR workflow. Do not push the stable tag or use a manual dispatch; those paths are intentionally disabled so recovery cannot publish a different commit.
The generated compare link points to the future `v0.6.53` tag. It may not resolve until the release PR merges and the publish workflow creates the tag.
## Draft regeneration
Use the lower-level draft command when you need to regenerate changelog copy before review:
```bash theme={null}
bun run changelog:draft 0.6.53 --write --force
```
Without `--force`, the draft command leaves an existing `releases/vX.Y.Z.md` file unchanged and still adds the docs changelog entry if it is missing. If the docs changelog already has that version, edit the existing docs entry manually.
## Weekly digest workflow
Weekly packets are editorial source material, not a public documentation page. Keep `docs/changelog.mdx` versioned. Only publish a human-readable product update when there is a real story, an owner, and enough context to help users act.
When `docs/product-updates.mdx` is public, the release owner reviews it during
the first stable release of each month. Update it only when several changes form
a useful user story; otherwise keep the latest dated edition and confirm that
its claims still describe the current product. Remove the page from navigation
if no one owns that review.
Generate an editable weekly packet from the repository root:
```bash theme={null}
bun run changelog:weekly --from 2026-06-01 --to 2026-06-07 --write
```
Run it from an up-to-date `main` branch so the selected range reflects public history, not a feature branch.
This writes three internal editorial drafts:
* `updates/weekly/2026-06-07.md`
* `updates/social/2026-06-07.discord.md`
* `updates/social/2026-06-07.x.md`
It also writes a fourth file, and that one is public. `--write` prepends the
generated entry straight into `docs/weekly-updates.mdx`, which ships in the
sidebar under **Explore**. Review that diff with the same care as the page it
is — it is not a draft. Re-running for a range already present is a no-op, so
the entry is safe to edit in place afterwards.
Review and rewrite all four before publishing anything. Social drafts are never posted automatically. Exact versioned release notes stay in the [Changelog](/changelog); [Weekly updates](/weekly-updates) carries the curated highlights and an RSS feed.
## Writing style
Use plain, user-facing language. Prefer "Fixed Studio render failures when FFmpeg is missing" over "Added pre-flight check in render activity." Link to relevant docs, migration guides, or pull requests when they help users act.
Group changes in this order when applicable:
1. Breaking Changes
2. Features
3. Fixes
4. Performance
5. Docs & Examples
6. Catalog
7. Internal
Avoid listing release commits, dependency-only updates, generated file churn, and changes labeled `skip-changelog`.
# Release channels
Source: https://hyperframes.heygen.com/contributing/release-channels
How HyperFrames keeps alpha-only work out of stable releases.
HyperFrames publishes two release channels:
* Stable releases use versions like `0.4.24` and publish to the npm `latest` dist-tag.
* Prereleases use versions like `0.4.24-alpha.1` and publish to the npm dist-tag named by the prerelease suffix, such as `alpha`.
## Branch policy
Use branch separation to decide what code is eligible for each release channel.
Dist-tags only control npm install defaults; they do not remove code from a package.
* `main` is stable/releasable. Anything merged to `main` is eligible for `latest`.
* `release/v*` branches are for stable patch releases and hotfixes.
* `next`, `alpha`, `beta`, `rc`, `canary`, and `prerelease/*` branches are for prerelease integration.
If a feature should ship in alpha only, merge or retarget that PR to a prerelease branch instead of `main`.
## Stable release
Stable releases publish only when a reviewed `release/vX.Y.Z` PR merges into protected `main`.
Prepare and review release notes before creating the release commit:
```bash theme={null}
bun run release:prepare
```
On the first run, `release:prepare` drafts missing changelog artifacts and exits non-zero for review so chained release commands stop before tagging. After the generated TODO summary is rewritten, rerun the same command to create the release commit and tag.
See [Changelog process](/contributing/changelog-process) for the full workflow. For stable releases, `bun run set-version ` still enforces this checkpoint when maintainers run the lower-level release command directly.
Push the release branch without its local tag, open a PR to `main`, and merge it after approval and CI. The publish workflow checks out the exact PR merge SHA, verifies it before publishing, creates the stable tag at that commit, publishes npm packages, and creates the GitHub release.
If that workflow needs recovery, rerun its original merged-PR event. Stable tag pushes and manual dispatches do not publish, so recovery cannot select a different commit.
For hotfixes, branch from the last stable tag, cherry-pick only the fix, publish the patch release, then merge or cherry-pick the same fix back into the prerelease branch.
## Alpha release
Alpha releases must be reachable from a prerelease branch such as `origin/next` or `origin/alpha`.
Use the same changelog draft workflow when the prerelease contains changes that users should know about.
```bash theme={null}
git checkout next
bun run set-version 0.4.25-alpha.1
git push origin next
git push origin v0.4.25-alpha.1
```
Consumers can install alpha builds explicitly:
```bash theme={null}
npm install hyperframes@alpha
npm install @hyperframes/core@alpha
```
## CI guardrails
The publish workflow validates release channel boundaries before publishing:
* Stable versions must publish with `latest`.
* Prerelease versions must publish with the prerelease dist-tag, such as `alpha`.
* Stable releases must come from a merged, reviewed `release/vX.Y.Z` PR.
* Prerelease tags must be reachable from a prerelease branch.
* Merged `release/vX.Y.Z` PRs publish stable releases only.
* Every publish job verifies that its checkout matches the immutable event SHA.
This prevents an alpha-only feature from being included in a stable hotfix by accident.
# Test local CLI changes
Source: https://hyperframes.heygen.com/contributing/testing-local-changes
Run an unreleased HyperFrames CLI build against a real project outside the monorepo.
Package tests do not prove that the CLI behaves correctly in an ordinary video project. After the focused tests pass, run the changed command against a project outside the HyperFrames repository.
## Build the workspace
From the repository root:
```bash theme={null}
bun install
bun run build
```
Rebuild after changing CLI code or a package bundled by the CLI.
## Run the local build
Choose one method.
### Link the CLI
Use this when you will test several commands or projects:
```bash theme={null}
cd packages/cli
bun link
hyperframes --version
which hyperframes
```
The resolved binary should point into the local HyperFrames checkout. Run it from a separate project:
```bash theme={null}
cd /path/to/a/video-project
hyperframes lint
hyperframes check
hyperframes preview
```
Remove the link when finished. `bun unlink` takes no package name — it
unregisters whichever directory you run it from, so go back to the CLI package in
your HyperFrames checkout first (an absolute path, since you are now inside the
video project):
```bash theme={null}
cd /path/to/hyperframes/packages/cli
bun unlink
```
### Call the built entry directly
Use this when you do not want to change your `PATH`:
```bash theme={null}
node /path/to/hyperframes/packages/cli/dist/cli.js preview /path/to/a/video-project
```
### Test the package archive
Use this before a release to check the files that would actually be published:
```bash theme={null}
cd packages/cli
npm pack
npx ./hyperframes-.tgz --help
```
Run the archive against an isolated project as well as the command you changed.
## What to verify
Test the user-visible outcome, not only the exit code:
* the command accepts the documented arguments;
* errors explain how to recover;
* `--json` remains machine-readable when the command supports it;
* Preview opens the correct project and reflects file changes;
* a render produces a playable file with the expected duration and media;
* temporary files and background processes are cleaned up after success and failure.
For Studio changes, exercise the exact interaction in Preview. For rendering changes, inspect the output with `ffprobe` or the repository's existing fixture tests rather than relying on visual playback alone.
## Common problems
If a globally installed CLI shadows the link, inspect `which hyperframes`, remove the global package, and link again. Preview starts at port `3002` and automatically tries a free port; pass `--port` only when a fixed port is required.
# AWS Lambda
Source: https://hyperframes.heygen.com/deploy/aws-lambda
Deploy distributed HyperFrames rendering to AWS Lambda and drive renders from a laptop or CI.
HyperFrames ships a first-class AWS Lambda deployment: one Lambda function fronts a Step Functions standard workflow that fans renders out across many parallel chunk workers, with intermediate artifacts in S3. End-to-end is three commands once your AWS credentials are configured.
```bash theme={null}
hyperframes lambda deploy
hyperframes lambda render ./my-project --width 1920 --height 1080 --wait
hyperframes lambda destroy
```
Templates with [variables](/concepts/variables) work on the same Lambda stack — declare `data-composition-variables` on the composition, then pass values per render with `--variables` or fan a whole batch out with `lambda render-batch`. See the [Templates on Lambda](/deploy/templates-on-lambda) guide for the personalised-render pipeline (single render, batch from JSONL, programmatic SDK) and the 256 KiB Step Functions execution-input cap.
## Architecture
```
┌──────────────────────────────────────────────────────────────────┐
│ Step Functions state machine │
│ Plan → Map(N) RenderChunk → Assemble │
└──────────────────────────────────────────────────────────────────┘
│ dispatches by event.Action
▼
┌──────────────────────────────────────────────────────────────────┐
│ One Lambda function (packages/aws-lambda/dist/handler.zip) │
│ handler.mjs │
│ ├─ Action="plan" → @hyperframes/producer/distributed │
│ ├─ Action="renderChunk" → @hyperframes/producer/distributed │
│ └─ Action="assemble" → @hyperframes/producer/distributed │
│ bin/ffmpeg — ffmpeg-static │
│ node_modules/@sparticuz/chromium/ — Lambda-optimised Chromium │
└──────────────────────────────────────────────────────────────────┘
│ pure functions over local paths
▼
┌──────────────────────────────────────────────────────────────────┐
│ S3 bucket — plan tarball + per-chunk outputs + final mp4 │
└──────────────────────────────────────────────────────────────────┘
```
The Lambda handler is a thin dispatch: parse the Step Functions event, download inputs from S3 into `/tmp`, call the OSS primitive from `@hyperframes/producer/distributed`, upload outputs back, return a small JSON result. Everything heavy — capture, encode, audio mix — happens inside the OSS primitives.
## Prerequisites
| Tool | Why | Install |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| AWS credentials | The CLI and the deploy step both call AWS APIs. | Env vars, `~/.aws/credentials`, SSO, or IMDS — any chain the AWS SDK for JavaScript v3 would resolve. |
| AWS SAM CLI | `hyperframes lambda deploy/destroy` shells out to `sam deploy`/`sam delete`. | [Install guide](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) |
| `bun` | Used to build `packages/aws-lambda/dist/handler.zip` at deploy time. | `npm install -g bun` or [bun.sh](https://bun.sh) |
| Lambda adapter | The published CLI loads the AWS adapter only for Lambda commands. | `npm install -g @hyperframes/aws-lambda` alongside the CLI |
| HyperFrames repo checkout | `lambda deploy` builds the Lambda handler ZIP from source. Adopters who deploy outside a checkout can set `HYPERFRAMES_REPO_ROOT` to point at one. | `git clone https://github.com/heygen-com/hyperframes` |
## Three deployment paths
### Path 1 — `hyperframes lambda` CLI (recommended)
The CLI is a thin wrapper around the SAM template + the `@hyperframes/aws-lambda` SDK. For most adopters this is the right starting point.
```bash theme={null}
hyperframes lambda deploy \
--stack-name=hyperframes-prod \
--region=us-east-1 \
--concurrency=8 \
--memory=10240
```
The default `--concurrency=8` is deliberately conservative for first-time
users. It limits how many Lambda workers the deployed stack can run at once.
Raise it only after you have measured a typical render and checked the account's
limits and budget.
After `deploy`, render anything with:
```bash theme={null}
hyperframes lambda render ./my-project --width 1920 --height 1080 --wait
```
The `--wait` flag blocks and streams per-chunk progress + accrued cost; drop it to fire-and-forget, then poll with `hyperframes lambda progress ` on your own cadence.
See the [CLI reference](/packages/cli#hyperframes-lambda) for full flag documentation.
#### Pre-staging a project with `sites create`
Re-rendering the same project tree on every `lambda render` call re-tars and re-uploads it each time. For tight inner loops (CI smoke jobs, prompt iteration in a demo flow), pre-stage the project once and reuse the upload:
```bash theme={null}
hyperframes lambda sites create ./my-project
# → Site ID: a1b2c3d4e5f6g7h8 (content-addressed)
hyperframes lambda render ./my-project --site-id=a1b2c3d4e5f6g7h8 \
--width 1920 --height 1080 --wait
```
The `siteId` is content-addressed via a SHA-256 of the project tree; re-running `sites create` on an unchanged tree skips the upload via a `HeadObject` short-circuit. Pass the same `--site-id` to as many `lambda render` calls as you like — they all reuse the one S3 PUT.
### Path 2 — Direct SAM deploy
If you want to read the CloudFormation before you deploy, or you need to customise the topology (extra alarms, SNS subscribers, KMS keys, …), invoke SAM directly against the template at `examples/aws-lambda/template.yaml`:
```bash theme={null}
cd packages/aws-lambda
bun run build:zip # produces dist/handler.zip
cd ../../examples/aws-lambda
sam deploy \
--stack-name=hyperframes-prod \
--region=us-east-1 \
--resolve-s3 \
--capabilities CAPABILITY_IAM \
--no-confirm-changeset \
--parameter-overrides ChromeSource=sparticuz ReservedConcurrency=8
```
The template emits three CloudFormation outputs you'll need to invoke renders:
* `RenderBucketName` — S3 bucket for plan tarballs + per-chunk outputs + final renders.
* `RenderStateMachineArn` — the Step Functions standard workflow that orchestrates Plan → Map → Assemble.
* `RenderFunctionArn` — the single Lambda function the state machine dispatches against.
The SAM template's own default for `ReservedConcurrency` is `-1` (unreserved, account-default). The Path 1 CLI overrides it to `8` to keep first-time spend bounded; if you drop `ReservedConcurrency` from `--parameter-overrides` here, you get the unreserved default. Set it explicitly unless you've already sized your typical render's fan-out.
### Path 3 — CDK construct
For users already running CDK, the `@hyperframes/aws-lambda` package exports a `HyperframesRenderStack` L2 construct that emits the same topology as the SAM template:
```ts theme={null}
import { App, CfnOutput, Stack } from "aws-cdk-lib";
import { HyperframesRenderStack } from "@hyperframes/aws-lambda/cdk";
const app = new App();
const stack = new Stack(app, "MyApp");
const render = new HyperframesRenderStack(stack, "Render", {
projectName: "hyperframes",
lambdaMemoryMb: 10240,
reservedConcurrency: 8,
chromeSource: "sparticuz",
});
new CfnOutput(stack, "RenderBucketName", { value: render.bucket.bucketName });
new CfnOutput(stack, "StateMachineArn", { value: render.stateMachine.stateMachineArn });
```
`aws-cdk-lib` and `constructs` are declared as **optional peer dependencies** of `@hyperframes/aws-lambda`, so consumers who only need the SDK don't pay the CDK import cost.
The construct exposes `.bucket`, `.renderFunction`, and `.stateMachine` so you can wire dashboards, SNS topics, or other AWS resources alongside it without re-deriving ARNs.
## IAM permissions
The CLI ships a built-in IAM bootstrap to avoid the "User is not authorized to perform iam:CreateRole" first-deploy trap:
```bash theme={null}
# Print an inline policy doc to attach to the IAM user that runs the CLI.
hyperframes lambda policies user
# Print { TrustRelationship, InlinePolicy } for a CloudFormation service role.
hyperframes lambda policies role
# Validate a checked-in policy still covers the CLI's needs (exit non-zero on missing).
hyperframes lambda policies validate ./infra/iam/hyperframes-deploy.json
```
The generated documents grant `Resource: "*"` for the CLI's required action set. After your first successful deploy you can narrow `Resource` to the deployed ARNs — predictable per the CloudFormation outputs above. Adopters running the CLI in CI typically check the policy doc into source control and run `policies validate` as a pre-deploy step to catch drift.
## Cost shape
Lambda renders are billed by GB-seconds (Lambda billed duration × configured memory) plus a tiny per-state-transition fee for Step Functions standard workflows. `hyperframes lambda progress` exposes the running tally:
```bash theme={null}
hyperframes lambda progress my-render-id
# Status: SUCCEEDED
# Progress: 100%
# Frames: 480 / 480
# Lambdas: 5
# Cost: $0.0214 (Lambda $0.0210 + SFN $0.0004)
# Output: s3://hyperframes-renders/.../output.mp4
```
The cost number is an estimate: Lambda duration comes from the handler result,
and S3 transfer is not included. Use AWS billing data for actual spend.
## Troubleshooting
### `sam deploy` fails with "Stack already exists"
Pass the same `--stack-name` you used the first time. SAM is idempotent — re-running on an existing stack resolves to a no-op or an in-place update.
### `User is not authorized to perform iam:CreateRole`
The IAM credential running `lambda deploy` doesn't have permission to create the service role CloudFormation needs. Run `hyperframes lambda policies user` and attach the printed policy to your IAM user (or take the `policies role` output and have your admin create a deploy role).
### `Lambda function failed: PLAN_HASH_MISMATCH`
Step Functions invoked a `renderChunk` with a plan hash that didn't match the planDir on S3. Almost always means the producer version differs between the local `plan()` build and the deployed Lambda ZIP. Re-run `hyperframes lambda deploy` (which rebuilds the ZIP) and re-render.
### `Lambda function failed: BROWSER_GPU_NOT_SOFTWARE`
The handler launched Chromium but the runtime probe found a non-SwiftShader GL backend. Hardware GL is non-deterministic across chunk boundaries, so distributed renders refuse it at the runtime-image / launch-flags layer (not at the composition layer). Rebuild the handler ZIP and redeploy:
```bash theme={null}
bun run --cwd packages/aws-lambda build:zip
hyperframes lambda deploy --stack-name=
```
The build pipeline pins `@sparticuz/chromium` + the Chrome flags (`--use-gl=swiftshader --use-angle=swiftshader`) so a fresh deploy almost always resolves this. If it persists, your stack's Lambda function is pointing at a stale handler ZIP from a previous deploy — `lambda deploy` always rebuilds, so re-running unsticks it.
### Render seems stuck at `RUNNING`
Most often a Lambda cold-start chain on a many-chunk render. The Map state's reserved concurrency caps how many chunks can run in parallel — if you set `--concurrency=4` and your render has 16 chunks, the state machine processes them in batches of 4. `hyperframes lambda progress ` shows how many invocations are in flight.
If progress doesn't advance for >10 minutes, check the Step Functions execution in the AWS console — failed Lambda invocations include the typed error name (`FONT_FETCH_FAILED`, `FFMPEG_VERSION_MISMATCH`, etc.) which short-circuits the state machine.
### Tearing down doesn't reclaim S3 storage
The render bucket is created with CloudFormation `Retain` on delete — `hyperframes lambda destroy` (or `sam delete`) tears the function + state machine down but the bucket survives. This is intentional: it protects final-rendered MP4s from being lost when you re-deploy. To fully reclaim storage, empty + delete the bucket via the AWS console / `aws s3 rb`.
## Current limits
* There is no completion webhook. Poll with `hyperframes lambda progress` or
watch the Step Functions execution.
* There is no Lambda-specific composition-discovery verb. Point
`lambda render` at the project directory containing `index.html`.
* Each `--region` is an independent stack. Cross-region failover is not built
in.
* The distributed AWS path is SDR-only.
## Related topics
* [Render variable-driven templates on Lambda](/deploy/templates-on-lambda)
* [Use the AWS Lambda package](/packages/aws-lambda)
* [Choose another rendering path](/deploy/overview)
# Cloud rendering
Source: https://hyperframes.heygen.com/deploy/cloud
Render on HeyGen's managed cloud without deploying your own infrastructure.
Use managed cloud rendering when you want a finished file without installing Chrome or FFmpeg or maintaining AWS or Google Cloud infrastructure.
## Render a project
Sign in once, then render the current project:
```bash theme={null}
hyperframes auth login
hyperframes cloud render
```
The command packages the project, uploads it, waits for the render, and downloads the finished file to `renders/`.
Choose a composition or output path when the defaults are not right:
```bash theme={null}
hyperframes cloud render . \
--composition compositions/intro.html \
--output renders/intro.mp4
```
From an attended SSH or headless terminal, use the device flow. Open the displayed URL in any browser and enter the one-time code:
```bash theme={null}
hyperframes auth login --device
```
Device login requires a TTY and is refused in CI. For unattended agents and CI, save a long-lived API key instead:
```bash theme={null}
echo "$HEYGEN_API_KEY" | hyperframes auth login --api-key
```
See [Authentication and API keys](/guides/authentication) for credential precedence and local alternatives.
## Choose the output
| Option | Values | Default |
| ---------------- | --------------------------- | ----------------------------------------------- |
| `--fps` | 1–240 | `30` |
| `--quality` | `draft`, `standard`, `high` | `standard` |
| `--format` | `mp4`, `webm`, `mov` | `mp4` |
| `--resolution` | `1080p`, `4k` | `1080p` |
| `--aspect-ratio` | `16:9`, `9:16`, `1:1` | detected from a local composition when possible |
```bash theme={null}
hyperframes cloud render --quality high --fps 60
hyperframes cloud render --resolution 4k
```
4K is billed at 1.5× and supports MP4 only. WebM and MOV use the alpha-capable path, which does not support 4K supersampling.
## Check what will upload
Cloud project archives have a 200 MB limit. Inspect the archive before starting a render:
```bash theme={null}
hyperframes cloud render --dry-run
```
Add generated or unnecessary files to `.hyperframesignore` when needed:
```gitignore theme={null}
/exports/
/source-masters/
```
Do not exclude media that the composition needs at render time. HyperFrames already omits common development and generated paths, including `.git`, `node_modules`, root-level `renders/`, and root-level `snapshots/`.
## Fill template variables
Use the variables declared by the composition:
```bash theme={null}
hyperframes cloud render \
--variables '{"title":"Q4 recap","theme":"dark"}' \
--strict-variables
```
For larger payloads, pass a JSON file with `--variables-file`.
The first `hyperframes cloud render` that uploads a local project prints an `asset_id`. Reuse it to
render the same uploaded project with different values:
```bash theme={null}
hyperframes cloud render \
--asset-id asst_abc123 \
--variables '{"title":"Customer update"}'
```
## Run asynchronously
Submit without waiting and receive a webhook when the render finishes:
```bash theme={null}
hyperframes cloud render \
--callback-url https://example.com/hyperframes-hook \
--no-wait
```
Then inspect or manage renders by ID:
```bash theme={null}
hyperframes cloud list
hyperframes cloud get hfr_abc123
hyperframes cloud delete hfr_abc123
```
For automated retries, pass a stable `--idempotency-key` so an interrupted request can be replayed safely.
## Choose another renderer
* Use [`hyperframes render`](/guides/rendering) while authoring or when the machine running the command should do the work.
* Use [AWS Lambda](/deploy/aws-lambda) or [Google Cloud Run](/deploy/gcp-cloud-run) when you need to own the rendering infrastructure.
* Use a [deployment template](/guides/deploy) when you need a working hosted starting point rather than the full distributed-rendering stack.
See the [CLI reference](/packages/cli#hyperframes-cloud) for every flag and JSON output shape.
## Related topics
* [Compare every rendering path](/deploy/overview)
* [Render locally from the CLI](/guides/rendering)
* [Operate rendering in your own cloud account](/deploy/aws-lambda)
# Google Cloud Run
Source: https://hyperframes.heygen.com/deploy/gcp-cloud-run
Deploy distributed HyperFrames rendering to Cloud Run, Cloud Workflows, and Google Cloud Storage.
Use this path when renders must run in your Google Cloud account. A Cloud
Workflow plans the render, sends chunks to Cloud Run in parallel, and assembles
the result in Google Cloud Storage.
```text theme={null}
Cloud Workflow: Plan → Render chunks in parallel → Assemble
↓
Cloud Run service
↓
GCS
```
For a hosted render without infrastructure ownership, use
[HyperFrames Cloud](/deploy/cloud). For a small preview application and render
endpoint, use a [hosted template](/guides/deploy).
## Prerequisites
* A Google Cloud project with billing enabled
* `gcloud` authenticated for that project
* Terraform 1.5 or newer
* Cloud Build access, or an existing compatible container image
* `@hyperframes/gcp-cloud-run` installed alongside the CLI
The CLI can build the renderer automatically when it runs from a HyperFrames
repository checkout. Outside the repository, pass an image built from
`packages/gcp-cloud-run/Dockerfile` with `--image`.
## Deploy
```bash theme={null}
hyperframes cloudrun deploy --project my-gcp-project
```
The command enables the required Google Cloud APIs, builds and pushes the
renderer when needed, applies the bundled Terraform module, and stores the
resulting bucket, service URL, and workflow name in `~/.hyperframes/`.
The default region is `us-central1`. Machine and scaling controls include
`--region`, `--cpu`, `--memory`, `--max-instances`, and `--timeout`.
## Render
Width and height describe the authored canvas. Use `--output-resolution` when
the encoded result should be supersampled without changing the layout.
```bash theme={null}
hyperframes cloudrun render ./my-project \
--width 1920 \
--height 1080 \
--wait
```
The command accepts the same template variables used by local and AWS renders:
```bash theme={null}
hyperframes cloudrun render ./card-template \
--width 1920 \
--height 1080 \
--variables '{"name":"Ada"}' \
--wait
```
Supported distributed outputs are MP4, MOV, WebM, and PNG sequences. MP4 can
use H.264 or H.265. Distributed rendering is currently SDR-only.
## Reuse an upload
Projects are content-addressed. Upload an unchanged project once, then reuse
its site ID for later renders:
```bash theme={null}
hyperframes cloudrun sites create ./my-project
```
Use `render-batch` with a JSONL file when one template needs many sets of
variables:
```bash theme={null}
hyperframes cloudrun render-batch ./card-template \
--batch ./recipients.jsonl \
--width 1920 \
--height 1080 \
--max-concurrent 10
```
Each JSONL row contains an output key and optional variables:
```json theme={null}
{"outputKey":"renders/ada.mp4","variables":{"name":"Ada"}}
```
## Progress and teardown
Without `--wait`, a render returns its workflow execution name immediately.
```bash theme={null}
hyperframes cloudrun progress
hyperframes cloudrun destroy --project my-gcp-project
```
`destroy` removes the Terraform-managed stack and its render bucket. Download
anything that must be retained before running it.
## Programmatic use
`@hyperframes/gcp-cloud-run/sdk` exposes `deploySite`, `renderToCloudRun`, and
`getRenderProgress` for Node backends. The package also exports the Terraform
module and HTTP handler used by the deployed service.
See the [GCP package reference](/packages/gcp-cloud-run) for the SDK contract
and the complete infrastructure shape.
## Related topics
* [Use the Google Cloud Run package](/packages/gcp-cloud-run)
* [Choose another rendering path](/deploy/overview)
* [Compare with AWS Lambda](/deploy/aws-lambda)
# Migrating to HyperFrames Lambda
Source: https://hyperframes.heygen.com/deploy/migrating-to-hyperframes-lambda
Side-by-side mapping for adopters coming to HyperFrames from another one-command-deploy video renderer.
If you're already running a different framework that deploys a serverless video renderer with one command, the muscle memory translates cleanly: a single `deploy` provisions the stack, a single `render` starts a render, a single `progress` polls it, and a single `destroy` tears the stack down. This page maps your existing concepts onto HyperFrames' equivalents so you can spend the migration on the parts that actually differ instead of relearning the workflow.
## Concept mapping
| In your current framework you call... | In HyperFrames you call... | Notes |
| ------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| One-shot deploy command | `hyperframes lambda deploy` | Builds `packages/aws-lambda/dist/handler.zip` and runs `sam deploy`. Idempotent. |
| One-shot site upload | `hyperframes lambda sites create ./project` | Content-addressed S3 key — re-uploads of an unchanged tree are skipped via a HeadObject 200. |
| Trigger a render | `hyperframes lambda render ./project --width 1920 --height 1080` | Returns immediately with a `renderId`; add `--wait` to stream per-chunk progress. |
| Poll render progress | `hyperframes lambda progress ` | Includes accrued cost in the same response. |
| Tear down | `hyperframes lambda destroy` | The S3 bucket is `Retain`'d — documented in the deploy guide. |
| Print/validate IAM policy | `hyperframes lambda policies user`/`role`/`validate` | Wire `validate` into CI to catch policy drift before the next deploy fails. |
## Composition format
If your current framework is **React-based**, you write JSX components, register them in a `Composition`, and the renderer compiles them at render time.
In HyperFrames, **compositions are plain HTML files**. A composition element
declares its ID and canvas, while clips declare their own timing. There is no
JSX compilation step.
```html theme={null}
Hello
```
For framework-agnostic animation, HyperFrames supports first-party adapters for GSAP, Anime.js, CSS keyframes, Lottie, Three.js, and the Web Animations API — covered in the [Concepts](/concepts) and per-skill docs.
## Render config
Most adopters' render config maps directly:
| Concept | HyperFrames equivalent | Where it lives |
| ------------------------ | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fps` | `--fps=30` (CLI) or `config.fps` (SDK) | 24, 30, 60 only — non-integer NTSC rationals are an in-process-only feature. |
| `width` / `height` | `--width` / `--height` flags, or `config.width` / `config.height` | Even integers ≤ 7680 (yuv420p parity). |
| `codec: 'h264' / 'h265'` | `--codec=h264` or `--codec=h265` (mp4 only) | h265 uses libx265 with closed-GOP keyint params so chunked concat-copy round-trips losslessly. |
| Output format | `--format=mp4 / mov / webm / png-sequence` | webm uses libvpx-vp9 + closed-GOP concat-copy. Distributed mode still refuses HDR mp4 at plan time. |
| Quality preset | `--quality=draft / standard / high` | Maps onto ffmpeg encoder presets. |
| Chunk size in frames | `--chunk-size=240` (default 240) | \~8s at 30 fps; sized to fit Lambda's 15-min cap with headroom. |
| Max parallel chunks | `--max-parallel-chunks=16` (default 16) | Caps the Map state's fan-out. |
| Per-chunk frame ceiling | `--target-chunk-frames=N` (optional) | Caps frames per chunk so one chunk can't run past Lambda's 15-min cap on a long video: the planner adds chunks (up to `--max-parallel-chunks`) to keep each at or below `N`, and short videos still collapse to fewer chunks. A ceiling, not a fixed size; ignored when `--chunk-size` is set. |
| Bitrate / CRF | `config.bitrate` or `config.crf` in the SDK | Mutually exclusive; the current Lambda CLI does not expose these two fields. |
## Variables (inputProps)
Render-time payloads — `inputProps` in some frameworks, `variables` in HyperFrames — are isomorphic. Declare the composition's variable shape on its root `[data-composition-id]` element via `data-composition-variables`, then pass per-render values with `hyperframes render --variables '{...}'` locally or `hyperframes lambda render --variables` on the Lambda surface. The Lambda execution input is capped at 256 KiB, so reference large assets by URL instead of embedding base64 data.
The full mapping — `defaultProps` → declarations, `useCurrentFrame()` + `props.` → `__hyperframes.getVariables().`, `renderMediaOnLambda({ inputProps })` → `renderToLambda({ config: { variables } })` — lives in [Templates on Lambda](/deploy/templates-on-lambda#migrating-from-remotion-lambda-inputprops).
## What HyperFrames does differently
A few areas where the contract is intentionally different from comparable frameworks. Surface them up front so the migration doesn't surprise you mid-deploy.
### Deterministic Chrome path is mandatory
HyperFrames refuses `data-gpu-mode="hardware"` in distributed mode — hardware GL is non-deterministic across chunk boundaries, and the per-chunk concat-copy assumes byte-level reproducibility. Compositions that opt into hardware GL in-process must drop it for Lambda renders. The Lambda handler trips a typed `BROWSER_GPU_NOT_SOFTWARE` non-retryable error on plan that's easy to catch in the progress output.
### Font fetching fails closed
`failClosedFontFetch` is default-on in distributed mode. A composition that references a `font-family` HyperFrames can't fetch will fail at plan time (`FONT_FETCH_FAILED`) rather than silently falling back to the OS default. If you currently lean on system-font fallbacks, list the fonts you need explicitly via `` or `@fontsource/*` imports.
### HDR is not supported
`hdrMode: 'force-hdr'` is rejected at plan time. Use the in-process renderer
outside Lambda for HDR output.
### webm uses closed-GOP VP9
webm distributed renders go through libvpx-vp9 with `-g `, `-keyint_min `, `-auto-alt-ref 0`, and `-cpu-used 4` by default. The alt-ref disable is the load-bearing bit: libvpx-vp9's default non-displayable alt-ref frames can land anywhere in a GOP, which breaks concat-copy at chunk seams. Closed-GOP forces a keyframe at every chunk boundary so `ffmpeg -f concat -c copy` round-trips losslessly. Output is `yuva420p` to preserve alpha. Audio is muxed as Opus.
Distributed WebM can be larger than the same composition rendered in one pass
because closed-GOP encoding forces more keyframes. VP9 encode speed is
controlled by `PRODUCER_VP9_CPU_USED` (`-8` to `8`); use lower values for
quality-sensitive or long-form WebM, and higher values when wall-clock encode
time matters more than compression efficiency. Benchmark local and distributed
rendering with the actual composition before choosing a path.
### State files are local by default
`hyperframes lambda deploy` writes `/.hyperframes/lambda-stack-.json` so subsequent verbs don't re-derive the bucket / state-machine ARN. Two worktrees produce two distinct state files. If you need a shared default location across CI workers, symlink the directory or pass `--stack-name` explicitly on every call.
### IAM policy is print-then-narrow
The default policy doc emitted by `hyperframes lambda policies user/role` uses `Resource: "*"` because the CloudFormation stack creates new ARNs on every adopter's first deploy. After your first successful deploy, narrow the `Resource` to the deployed ARNs — they're predictable from the CFN outputs. CI users typically check the narrowed policy into source and run `hyperframes lambda policies validate ./infra/policy.json` as a pre-deploy gate.
## Migration checklist
1. **Inventory** the compositions you want to migrate. Filter out anything that needs HDR — that stays on your current framework for now. webm renders distributed via closed-GOP VP9 + concat-copy (see the webm section above).
2. **Translate** each composition to plain HTML. The `[Concepts](/concepts)` page covers the data-attribute conventions; installing the skills (`npx hyperframes skills update`) makes Claude / Cursor / Codex aware of them too — start at `/hyperframes`, which routes to `/hyperframes-core` for the composition contract.
3. **Wire** the new composition into your build pipeline alongside the old one. HyperFrames doesn't need an external bundler — you can `npx hyperframes preview` against the HTML directly.
4. **Deploy** in a separate AWS account or with a `--stack-name=hyperframes-staging` first. Run a real render with `--wait`; verify the output bytes.
5. **Add the policy** to your CI. `hyperframes lambda policies user > infra/iam/hyperframes.json` then `hyperframes lambda policies validate infra/iam/hyperframes.json` on every PR.
6. **Cut over** by pointing your existing automation at the new render endpoint. Keep the old deployment alive until you've verified rolling renders for a release cycle, then `hyperframes lambda destroy` the staging stack and decommission the previous one.
## Non-Lambda runtimes
If you don't want Lambda specifically, the same `@hyperframes/producer/distributed` primitives run anywhere Node + Chrome + ffmpeg + S3 are available. A reference Dockerfile lives at `examples/k8s-jobs/Dockerfile.example` for adopters running on:
* Google Cloud Run Jobs
* Azure Container Apps Jobs
* AWS ECS Fargate
* Kubernetes Jobs / Argo Workflows
* Plain Docker on a beefy VM
Build it yourself — we don't publish a Docker image to a registry. The Dockerfile is documented inline and bakes Node 22 + chrome-headless-shell + ffmpeg + the producer at the version your checkout is on.
## Related topics
* [Deploy HyperFrames on AWS Lambda](/deploy/aws-lambda)
* [Render templates on Lambda](/deploy/templates-on-lambda)
* [Use the lower-level Producer pipeline](/packages/producer)
# Choose a rendering path
Source: https://hyperframes.heygen.com/deploy/overview
Choose the smallest HyperFrames rendering surface for local work, an application backend, managed cloud, or infrastructure you operate.
Every rendering path starts with the same HyperFrames project. The difference is
who operates Chrome and FFmpeg, how the request is submitted, and how much of the
pipeline your application needs to control.
| Need | Start with | You operate |
| ---------------------------------------------------- | --------------------- | ------------------------------------- |
| Render while creating or in CI | **CLI** | The machine running the command |
| Render from a Node application | **Producer** | The Node service and its runtime |
| Control exact frame capture | **Engine** | Capture, encoding, and orchestration |
| Submit a render without managing infrastructure | **HyperFrames Cloud** | Nothing beyond the request and result |
| Run distributed renders in your AWS account | **AWS Lambda** | The deployed AWS stack |
| Run distributed renders in your Google Cloud account | **Cloud Run** | The deployed GCP resources |
| Deploy a preview and render API from a template | **Hosted templates** | The selected hosting account |
## Local or CI: use the CLI
The CLI owns the complete normal pipeline: project loading, checks, browser
capture, audio mixing, and encoding.
```bash theme={null}
npx hyperframes check
npx hyperframes render --output video.mp4
```
Start here unless an application—not a person or CI job—must initiate the
render. See [Rendering](/guides/rendering) for the normal workflow and the
[complete CLI reference](/packages/cli) for automation flags.
## A Node application: use Producer
`@hyperframes/producer` is the complete programmable render pipeline. It is the
right layer for a backend that needs to provide project input, receive progress,
cancel work, or control encoding without spawning the CLI.
```ts theme={null}
import { createRenderJob, executeRenderJob } from "@hyperframes/producer";
const job = createRenderJob({ fps: 30, quality: "standard" });
await executeRenderJob(job, "./project", "./video.mp4");
```
Use [Producer](/packages/producer) for its current configuration and exported
API. Use Engine only when Producer performs work your application must replace.
## Exact frame capture: use Engine
`@hyperframes/engine` opens a seekable composition and captures exact frames.
It does not replace the complete Producer pipeline.
Use it when building specialized capture, inspection, or rendering
infrastructure. For an ordinary encoded video, stay with CLI or Producer. See
[Engine](/packages/engine).
## No infrastructure: use HyperFrames Cloud
Managed cloud rendering accepts a project, runs the render, and returns the
finished file without requiring local Chrome or FFmpeg.
```bash theme={null}
npx hyperframes cloud render ./project --output video.mp4
```
Authentication, variables, webhooks, and job management are covered in
[Cloud rendering](/deploy/cloud).
## Infrastructure you control
Use [AWS Lambda](/deploy/aws-lambda) or [Google Cloud Run](/deploy/gcp-cloud-run)
when renders must run inside your own cloud account. Both paths distribute work
across workers and store intermediate and final media in the corresponding
cloud storage.
Use the [hosted templates](/guides/deploy) when the desired result is a small
preview application plus a render API on Vercel, Cloudflare, or Modal—not a
general distributed-rendering platform.
## The decision
Choose the highest-level surface that completes the job:
```text theme={null}
CLI → Producer → Engine
```
Moving right gives an application more control and more pipeline responsibility.
Managed Cloud, AWS Lambda, Cloud Run, and hosted templates decide where that
pipeline runs.
## Related topics
* [Render with the CLI](/guides/rendering)
* [Render with HyperFrames Cloud](/deploy/cloud)
* [Use Producer from a Node application](/packages/producer)
# Render templates on Lambda
Source: https://hyperframes.heygen.com/deploy/templates-on-lambda
Render one HyperFrames composition with different variable values, individually or from a JSONL batch.
A HyperFrames template is a composition with declared variables. The same
project can produce many videos without rewriting its HTML.
Use this guide after deploying the [AWS Lambda render stack](/deploy/aws-lambda).
## Declare the inputs
Declare variables on the document, then bind them in the composition. This
example exposes a headline and accent color:
```html theme={null}
Welcome
```
See [Variables](/concepts/variables) for every type and binding method.
## Test locally
Render one realistic payload before using cloud infrastructure:
```bash theme={null}
hyperframes render ./my-template \
--variables '{"title":"Hello Ada","accent":"#ff4d67"}' \
--strict-variables \
--output renders/ada-preview.mp4
```
`--strict-variables` rejects undeclared keys and values with the wrong type.
## Render one version on Lambda
```bash theme={null}
hyperframes lambda render ./my-template \
--width 1920 \
--height 1080 \
--variables '{"title":"Hello Ada","accent":"#ff4d67"}' \
--output-key renders/ada.mp4 \
--wait
```
Without `--wait`, the command returns a render ID. Check it later with:
```bash theme={null}
hyperframes lambda progress
```
## Reuse the project upload
`lambda render` can upload the project for each call. For repeated renders,
create a content-addressed site once:
```bash theme={null}
hyperframes lambda sites create ./my-template
```
Pass the returned ID with later renders:
```bash theme={null}
hyperframes lambda render ./my-template \
--site-id \
--width 1920 \
--height 1080 \
--variables '{"title":"Hello Lin"}'
```
An unchanged project keeps the same site ID and skips another S3 upload.
## Render a batch
Create one JSON object per line. `outputKey` is required; `variables` and
`executionName` are optional.
```jsonl theme={null}
{"outputKey":"renders/ada.mp4","variables":{"title":"Hello Ada","accent":"#ff4d67"}}
{"outputKey":"renders/lin.mp4","variables":{"title":"Hello Lin","accent":"#36b37e"}}
```
Start the batch:
```bash theme={null}
hyperframes lambda render-batch ./my-template \
--batch ./recipients.jsonl \
--width 1920 \
--height 1080 \
--max-concurrent 10
```
The command uploads the project once and returns one manifest row per input
line. A failure to start one row does not discard the other started renders.
Validate the file without starting AWS executions:
```bash theme={null}
hyperframes lambda render-batch ./my-template \
--batch ./recipients.jsonl \
--width 1920 \
--height 1080 \
--strict-variables \
--dry-run \
--json
```
## Keep variables small
The complete Step Functions Standard execution input is limited to 256 KiB.
HyperFrames checks this before starting the execution.
Use variables for JSON data. Store images, audio, and video separately and
pass their URLs instead of base64 content.
```json theme={null}
{
"title": "Hello Ada",
"avatarUrl": "https://cdn.example.com/avatars/ada.png"
}
```
## Migrating from Remotion Lambda inputProps
HyperFrames variables fill the role that `inputProps` serves in a Remotion
Lambda render:
| Remotion pattern | HyperFrames equivalent |
| ----------------------- | ------------------------------------------------------------------ |
| `defaultProps` | A `default` value in `data-composition-variables` |
| `inputProps` | `--variables` or the SDK render config's `variables` |
| `props.title` | `data-var-text="title"`, a CSS variable, or `getVariables().title` |
| `renderMediaOnLambda()` | `renderToLambda()` |
Declare the allowed values in the composition, pass only the per-render data,
and keep large media outside the execution payload. Use `--strict-variables`
while migrating so an old or misspelled input fails before the render begins.
## Control concurrency
Three settings control different layers:
| Setting | Controls |
| -------------------------------------- | ------------------------------------------------------------------- |
| `lambda deploy --concurrency` | Maximum concurrent invocations for the deployed Lambda function |
| `lambda render --max-parallel-chunks` | Maximum chunk workers used by one render |
| `lambda render-batch --max-concurrent` | Maximum render executions started concurrently by the batch command |
Start conservatively and measure a real composition before increasing them.
## Use the SDK
For a backend service, `@hyperframes/aws-lambda/sdk` exposes `deploySite`,
`renderToLambda`, and `getRenderProgress`. See the
[AWS package reference](/packages/aws-lambda) for the current types and a
working example.
## Related topics
* [Deploy the AWS Lambda stack](/deploy/aws-lambda)
* [Use the AWS Lambda package](/packages/aws-lambda)
* [Understand composition variables](/concepts/variables)
# CLI guide
Source: https://hyperframes.heygen.com/developers/cli
Find the HyperFrames command for creating, checking, rendering, publishing, and automating projects.
Use this page to choose a command. The [CLI reference](/packages/cli) contains
detailed flags, examples, and environment settings. The installed version
remains authoritative: run `npx hyperframes --help`.
## Everyday project loop
| Task | Command |
| ------------------------------------------------ | -------------------------------------------- |
| Create a project | `npx hyperframes init my-video` |
| Open Studio | `npx hyperframes preview` |
| Check HTML structure | `npx hyperframes lint` |
| Run browser, layout, motion, and contrast checks | `npx hyperframes check` |
| Capture review frames | `npx hyperframes snapshot --at 0,2,5` |
| Render a video | `npx hyperframes render --output output.mp4` |
| Publish a browser link | `npx hyperframes publish` |
| Diagnose the machine | `npx hyperframes doctor` |
## Work with media
| Task | Command |
| ------------------------ | ----------------------------------- |
| Inspect project metadata | `npx hyperframes info` |
| Transcribe speech | `npx hyperframes transcribe ` |
| Generate narration | `npx hyperframes tts
```
Use its JavaScript API to play, pause, seek, change playback rate, and listen for timeline events. It does not edit or render the composition.
See the [Player reference](/packages/player).
## Rendering: choose the layer you need
* **CLI** — complete local and automated rendering.
* **Producer** — the Node rendering pipeline: capture, encode, and audio mix.
* **Engine** — lower-level seekable page capture and exact-frame control.
* **Managed cloud** — hosted rendering without operating Chrome or FFmpeg.
* **AWS Lambda or Google Cloud Run** — infrastructure you deploy and control.
Most applications should begin with the CLI or Producer. Reach for Engine only when building a specialized capture or rendering system.
Use [rendering infrastructure](/deploy/overview) to compare hosted, local, and self-managed paths.
## The complete mental model
```text theme={null}
composition → inspect or edit → play or render
```
Every surface works on the same source. Choose the smallest layer that produces the result your application needs, then move lower only when the higher-level layer removes control you genuinely require.
## Related topics
* [Run complete projects from the CLI](/developers/cli)
* [Edit composition HTML with the SDK](/sdk/quickstart)
* [Embed a composition with the Player](/packages/player)
# Examples
Source: https://hyperframes.heygen.com/examples
Watch finished HyperFrames videos, inspect real production projects, or start from a working template.
## What HyperFrames can make
Every film below is 100% HyperFrames — HTML rendered frame by frame, no other tool. They are grouped by what they show off. Where a source project is public, the card links to it.
### Product & launch films
A whole product cut into a launch film — its own screens, type and colour.
Open models (Ollama)Build with local models · 100% HyperFrames
Community · hyperframes.devPublish and remix · 100% HyperFrames
## Recreate any video, 1:1
Point HyperFrames at a finished video and it rebuilds the same film in editable HTML —
gestures, type, timing and all. Below, each **reference** (the original, on the left) sits
next to its **HyperFrames replica** (on the right), matched frame for frame.
## Start from a template
Create a project with a working example:
```bash theme={null}
npx hyperframes init my-video --example
```
| Example | Good starting point for |
| --------------- | -------------------------------------------- |
| `warm-grain` | Branding, lifestyle, and editorial work |
| `play-mode` | Energetic social videos and product launches |
| `swiss-grid` | Technical, structured, and corporate stories |
| `kinetic-type` | Type-led promos, intros, and title cards |
| `decision-tree` | Explainable diagrams and tutorials |
| `product-promo` | Multi-scene product showcases |
| `nyt-graph` | Editorial charts and data stories |
| `vignelli` | Bold portrait announcements |
| `blank` | Agent-generated or fully custom work |
Choose a template for its structure and tone, then replace the sample content. If none fits, start
with `blank` and let the agent build from the brief.
## Related topics
* [Make your first video](/quickstart)
* [Choose a creation workflow](/workflows)
* [Take more control of an existing project](/go-further)
# Go further with HyperFrames
Source: https://hyperframes.heygen.com/go-further
Take more control of an existing project through your agent, Studio, richer composition tools, and a reliable finish.
The project does not change format as you gain control. Your agent, Studio, the
SDK, the Player, and the renderer all work from the same HTML project.
## Choose by the size of the change
Use the agent for changes to the story or several scenes. Use Studio for the
specific visual or timing detail you can point at.
For reusable content and nested structure, continue with [Variables](/concepts/variables) and
[Compositions](/concepts/compositions).
## Related topics
* [Edit the project visually in Studio](/studio)
* [Understand how a HyperFrames project works](/concepts)
* [Build on HyperFrames as a developer](/developers)
# Render in 4K
Source: https://hyperframes.heygen.com/guides/4k-rendering
Author at 4K or supersample an existing composition at render time.
## Render an existing project in 4K
```bash theme={null}
npx hyperframes render --resolution 4k --output final-4k.mp4
```
HyperFrames keeps the composition's layout unchanged and captures it at a higher device-pixel ratio. A 1920×1080 composition becomes a 3840×2160 file.
Use the matching preset for portrait or square work:
| Preset | Output |
| ---------------------- | --------- |
| `4k` or `landscape-4k` | 3840×2160 |
| `portrait-4k` | 2160×3840 |
| `square-4k` | 2160×2160 |
## Author a project at 4K
If the project should use a 4K canvas from the start:
```bash theme={null}
npx hyperframes init my-video --resolution 4k
```
Choose this when canvas or WebGL code, fixed-resolution media, or layout decisions need to know the final pixel dimensions while you author.
## What gets sharper
| Content | Result when supersampled |
| ------------------------------------- | -------------------------------------------- |
| HTML text, SVG, CSS shapes, gradients | Re-rasterized at 4K |
| High-resolution images | Use their available source detail |
| 1080p images and video | Scaled up; no new source detail |
| `