Skip to main content
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:
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:
From an attended SSH or headless terminal, use the device flow. Open the displayed URL in any browser and enter the one-time code:
Device login requires a TTY and is refused in CI. For unattended agents and CI, save a long-lived API key instead:
See Authentication and API keys for credential precedence and local alternatives.

Choose the output

4K is billed at 1.5×.

Check what will upload

Media files of 5 MB or more that the project names by path upload as HeyGen assets and are referenced by public, unsigned URL, so large footage and audio do not count against the 200 MB project archive limit. Uploads are cached, so re-rendering uploads only new or changed media. Media is streamed from disk as it uploads, so a large file never has to fit in memory; editing one while the command is preparing it stops the run. Inspect what will upload before starting a render:
Add generated or unnecessary files to .hyperframesignore when needed:
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:
For larger payloads, pass a JSON file with --variables-file. For a local project, variable validation uses the entry selected by --composition, or index.html when omitted. --strict-variables stops before upload when a value does not match that entry’s declarations. 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:

Run asynchronously

Submit without waiting and receive a webhook when the render finishes:
Then inspect or manage renders by ID:
For automated retries, pass a stable --idempotency-key so an interrupted request can be replayed safely.

Choose another renderer

See the CLI reference for every flag and JSON output shape.