5 min read

HyperFrames: Write HTML, Render Video, Let an Agent Do Both (GitHub, Scanned)

HeyGen's open-source engine turns HTML, CSS and media into MP4s, with skills that let Claude Code or Codex make the video.

HyperFrames logo
✅
Scan: safe. Nothing malicious. The two secret hits are a fake AWS key in a deploy check script and a PEM header in a test, and the two curl-to-shell hits install Bun inside a Dockerfile and a test script. Scanned Nov 1, 2026; the full report is below.

HyperFrames turns a web page into a video. You write HTML and CSS, add media and seekable animations, and it renders the result frame by frame into a deterministic MP4. A CLI scaffolds a project, previews it in the browser with live reload and renders locally or in the cloud; a desktop app does the same for macOS, Windows and Linux; and a registry of about 450 blocks covers transitions, kinetic captions, charts, maps, 3D and camera moves so a named effect is an install rather than a rebuild.

The reason it is on this list is the agent side. HyperFrames ships seven skills that teach Claude Code, Codex, Cursor or Gemini CLI its production loop: plan the video, write valid HTML, wire the animations, add media, lint, preview and render. Ask for a ten-second product intro with a fade-in title, background video and music and the agent builds it. A media-use skill finds or makes music, voiceover, avatars and footage with HeyGen or free local tools, and a remotion-to-hyperframes skill migrates existing Remotion projects.

It is built by HeyGen, Apache-2.0 licensed, and grew from a March 2026 start to about 77,000 stars by November with releases most days and 125 contributors. Think of it as the agent-first answer to Remotion, which is also on this list: plain HTML instead of React, and a licence with no company tier.

Who it is for

Creators and marketers who would rather describe a video than keyframe it, developers building automated video pipelines from data or docs, and teams with Remotion projects they want an agent to maintain.

Getting started

1. Claude Code: add the plugin marketplace, inside Claude Code

claude plugin marketplace add heygen-com/hyperframes

2. Then install the plugin and use /hyperframes

claude plugin install hyperframes@hyperframes

3. Any other agent: install the core skills

npx hyperframes skills update

4. Or work by hand: scaffold, preview and render (Node 22+ and FFmpeg)

npx hyperframes init my-video && cd my-video && npx hyperframes preview

Rendering drives a headless browser, so the first render pulls one down. The HeyGen-powered parts of the media skill need a HeyGen account; everything else runs on your machine.

Safety scan

We cloned heygen-com/hyperframes at commit a2c5a8a on Nov 1, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.

  • Two secret hits in 9,555 files and 1.95 million lines: an AWS access key in examples/aws-lambda/scripts/check-sam-deploy.sh that is the AKIAFAKE placeholder the script checks against, and a private-key header inside a content extractor unit test. Neither is a credential.
  • Four pattern hits. Two very long lines are generated inline bundles (position-edits-render-inline.ts and hf-early-stub-inline.ts). Two download-piped-to-shell hits are both curl bun.sh/install | bash: one in the Cloud Run Dockerfile, pinned to bun 1.4.4, and one in scripts/test-skills-fresh.sh that only prints the command as advice.
  • The npm prepare hook installs lefthook git hooks, and only when a .git folder exists, so an npm install of the package does nothing. 28 committed binaries are .bin files: the registry's local vector index and the catalog fetch mirror, data rather than executables.
  • Twenty workflows, none using pull_request_target, and all 54 third-party action uses pinned to commits. Security policy, CodeQL, Renovate, a contributing guide and a code of conduct are all present, which is the strongest hygiene on this list.
  • Dependencies: the one lockfile the scanner reads is a registry block's package-lock.json, 32 packages with no advisories. The main workspace locks in bun.lock, which this scan does not parse, so the JavaScript packages you install were not checked. Network hosts are cdn.jsdelivr.net, Google Fonts, static.heygen.ai and example hosts in docs and tests.

What the scanner counted

CheckResult
Secrets2 candidates found and read; see the notes above.
Suspicious code4 pattern hits found and read; every one is listed under the raw findings.
Install-time code1 npm lifecycle script. 4 installer scripts
Committed binaries28 executable or compiled objects committed; listed under the raw findings.
CI workflows20 workflows. None use pull_request_target. 0 of 54 third-party actions pinned to a tag rather than a commit.
Network hosts40 distinct hosts referenced from source; most often cdn.example.com, cdn.jsdelivr.net, cdn.example, fonts.googleapis.com. 16 URLs to a bare IP address, listed under the raw findings.
Known vulnerabilities0 advisories across 32 pinned packages: 0 critical, 0 high, 0 moderate, 0 low. registry/blocks/godrays/source/package-lock.json: 32 packages, 0 advisories.
Project hygieneHas security policy, automated dependency updates, CodeQL, licence file, contributing guide.
OpenSSF ScorecardNot scored: the project is not in Scorecard's weekly index.

The raw findings

Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.

Secret candidates (2, redacted)
WhereRuleMatch
examples/aws-lambda/scripts/check-sam-deploy.sh:18aws-access-keyAKIAFA…AKE (20 chars)
packages/cli/src/capture/contentExtractor.test.ts:478private-key-----B…--- (27 chars)
Pattern hits (4)
WhereRuleMatch
packages/core/src/generated/position-edits-render-inline.ts:3very-long-line3829 chars
packages/gcp-cloud-run/Dockerfile:103download-piped-to-shellRUN curl -fsSL https://bun.sh/install | bash -s "bun-v1.4.4"
packages/producer/src/generated/hf-early-stub-inline.ts:3very-long-line3362 chars
scripts/test-skills-fresh.sh:109download-piped-to-shellcommand -v bun >/dev/null 2>&1 || fail "bun not installed. Install: curl -fsSL https://bun.sh/install | bash"
URLs to bare IP addresses (16)
WhereRuleMatch
packages/cli/src/capture/assetDownloader.test.ts:47ip-literal-url"http://100.64.0.1/",
packages/cli/src/capture/assetDownloader.test.ts:48ip-literal-url"http://192.0.0.1/",
packages/cli/src/capture/assetDownloader.test.ts:49ip-literal-url"http://198.18.0.1/",
packages/cli/src/capture/assetDownloader.test.ts:50ip-literal-url"http://224.0.0.1/",
packages/cli/src/capture/assetDownloader.test.ts:51ip-literal-url"http://240.0.0.1/",
packages/cli/src/capture/assetDownloader.test.ts:59ip-literal-urlexpect(isPrivateUrl("http://0.1.2.3/")).toBe(true);
packages/cli/src/media-use/lib/freeze.test.mjs:52ip-literal-urlassert.equal(isDirectMediaUrl("https://172.40.0.1/a.mp4"), true, "172.40 is public");
packages/cli/src/media-use/lib/media-fetch.test.mjs:41ip-literal-url"https://8.8.8.8/a",
packages/engine/src/utils/urlDownloader.test.ts:221ip-literal-urlexpect(() => assertPublicHttpsUrl("https://172.15.0.1/font.ttf")).not.toThrow();
packages/engine/src/utils/urlDownloader.test.ts:222ip-literal-urlexpect(() => assertPublicHttpsUrl("https://172.32.0.1/font.ttf")).not.toThrow();
packages/engine/src/utils/urlDownloader.test.ts:251ip-literal-url"https://100.64.0.1/secret",
packages/engine/src/utils/urlDownloader.test.ts:252ip-literal-url"https://198.18.0.1/secret",
packages/engine/src/utils/urlDownloader.test.ts:253ip-literal-url"https://192.0.2.1/secret",
packages/engine/src/utils/urlDownloader.test.ts:254ip-literal-url"https://224.0.0.1/secret",
packages/engine/src/utils/urlDownloader.test.ts:255ip-literal-url"https://240.0.0.1/secret",
packages/engine/src/utils/urlDownloader.test.ts:256ip-literal-url"https://255.255.255.255/secret",
npm lifecycle scripts (1)
  • package.json prepare: test -e .git && lefthook install || true
Installer scripts (4)
Committed binaries (28)
  • registry/catalog-artifact/local-vectors.bin: .bin, 688 KB
  • scripts/catalog-fetch-mirror/6ea12fa77b5d9e7cef868d13.bin: .bin, 34 KB
  • scripts/catalog-fetch-mirror/9fca1e9095ed294968aa18f7.bin: .bin, 33 KB
  • scripts/catalog-fetch-mirror/68c23b7290680c2b6ef37032.bin: .bin, 33 KB
  • scripts/catalog-fetch-mirror/d3b6c159f462183ba7796270.bin: .bin, 33 KB
  • scripts/catalog-fetch-mirror/ae40a5f8f9f604f443e21213.bin: .bin, 33 KB
  • scripts/catalog-fetch-mirror/2427868cae6e8cf32d2e8d8b.bin: .bin, 32 KB
  • scripts/catalog-fetch-mirror/f664c5b9216de5d0d4ece5a0.bin: .bin, 32 KB
  • scripts/catalog-fetch-mirror/b13fa08305318ea628453cec.bin: .bin, 32 KB
  • scripts/catalog-fetch-mirror/c356c27cca02fa3bfd0c2bef.bin: .bin, 32 KB
  • scripts/catalog-fetch-mirror/57dacd2ef96ca543d3e0e6a3.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/e3292e3f83690316b015865b.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/42e5ad0b3cee71d5f01953d8.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/8bfba0d6e85d9f059d9b5982.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/e59d60b150022666efbc6da6.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/47d5160342b9998840916131.bin: .bin, 31 KB
  • scripts/catalog-fetch-mirror/5905d90fd449470dac1b291d.bin: .bin, 31 KB
  • registry/catalog-artifact/media-vectors.bin: .bin, 29 KB
  • scripts/catalog-fetch-mirror/d446a78da686ab7e4cd84394.bin: .bin, 27 KB
  • scripts/catalog-fetch-mirror/33e36a8542f94c359351e55c.bin: .bin, 26 KB
  • scripts/catalog-fetch-mirror/728492d30bf60f21ae04abd1.bin: .bin, 26 KB
  • scripts/catalog-fetch-mirror/fa10510792f83e658fd729ad.bin: .bin, 26 KB
  • scripts/catalog-fetch-mirror/95061b23401efc9ba7409666.bin: .bin, 25 KB
  • scripts/catalog-fetch-mirror/36535127950d69fb03da1a51.bin: .bin, 25 KB
  • and 4 more

By the numbers

Stars76.6K
Forks7,003
Contributors125
Commits6,568
Open issues74
Open pull requests133
Releases574
Latest releasev0.8.225
LicenceApache-2.0
Main languageTypeScript
Project age7 months
Last pushNov 1, 2026
Tracked files9,555
Lines of code2M
Checkout size328 MB

Lines by language: TypeScript 1.1M, HTML 321K, Markdown 306.3K, JavaScript 181.2K, JSON 58K, YAML 6,135.

Questions

Is HyperFrames free?

Yes. The framework, CLI, desktop app, skills and registry are Apache-2.0, free for commercial use. Cloud rendering and HeyGen's avatars, voices and generated video are paid services you can leave out.

HyperFrames or Remotion?

Remotion builds videos as React components under a licence that charges companies with more than three employees. HyperFrames uses plain HTML and CSS, is Apache-2.0 and was designed for agents from the start, with a skill that converts Remotion projects frame by frame.

Do I need to know how to code?

Not to get a video: with the plugin installed you describe it and the agent writes the HTML. Knowing a little HTML and CSS helps when you want to tweak the result by hand, and the desktop app lets you preview and scrub without touching a terminal.


This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.