Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "hyperframes",
"description": "HyperFrames by HeyGen. Write HTML, render video. Compositions, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website-to-video capture for HyperFrames.",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"author": {
"name": "HeyGen",
"email": "hyperframes@heygen.com",
Expand Down
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hyperframes",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Write HTML, render video. Compositions, Tailwind v4 styles, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website-to-video capture for HyperFrames.",
"author": {
"name": "HeyGen",
Expand Down
2 changes: 1 addition & 1 deletion .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://cursor.com/schemas/cursor-plugin/plugin.json",
"name": "hyperframes",
"displayName": "HyperFrames by HeyGen",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Write HTML, render video. Compositions, Tailwind v4 styles, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website-to-video capture for HyperFrames.",
"author": {
"name": "HeyGen",
Expand Down
2 changes: 1 addition & 1 deletion packages/aws-lambda/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/aws-lambda",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "AWS Lambda adapter for HyperFrames distributed rendering — handler, client-side SDK, and CDK construct.",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/cli",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "HyperFrames CLI — create, preview, and render HTML video compositions",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/core",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/engine/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/engine",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Seekable web page to video rendering engine (Puppeteer + FFmpeg)",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/gcp-cloud-run/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/gcp-cloud-run",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Google Cloud Run + Workflows adapter for HyperFrames distributed rendering — request handler, client-side SDK, and Terraform module.",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/player/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/player",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Embeddable web component for HyperFrames compositions",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/producer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/producer",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "HTML-to-video rendering engine using Chrome's BeginFrame API",
"repository": {
"type": "git",
Expand Down
39 changes: 31 additions & 8 deletions packages/producer/src/services/renderOrchestrator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,7 @@ import {
VIRTUAL_TIME_SHIM,
} from "./fileServer.js";
import { defaultLogger, type ProducerLogger } from "../logger.js";
import {
createCompiledFrameSrcResolver,
createMemorySampler,
type MemorySampler,
updateJobStatus,
} from "./render/shared.js";
import { createMemorySampler, type MemorySampler, updateJobStatus } from "./render/shared.js";
import { buildRenderErrorDetails, cleanupRenderResources, safeCleanup } from "./render/cleanup.js";
import { normalizeErrorMessage } from "../utils/errorMessage.js";
import { formatCaptureFrameName } from "../utils/paths.js";
Expand Down Expand Up @@ -1210,12 +1205,40 @@ export async function executeRenderJob(
videoMetadataHints,
skipReadinessVideoIds: videoReadinessSkipIds,
});
const frameSrcResolver = createCompiledFrameSrcResolver(compiledDir);
// The URL-served frame path (PR #596) hands each injected `<img>` a
// fileServer URL instead of a base64 data URI, on the theory that
// shipping a short URL through `page.evaluate` beats shipping a
// multi-MB base64 string per frame. That holds when the fileServer
// is otherwise idle — but on video-heavy compositions, the same
// fileServer also serves every `<video>.src`. The runtime's
// drift-recovery branch (`runtime/media.ts:294-302`) issues
// `el.load()` on the underlying `<video>` during seeks, kicking off
// full-file downloads that occupy the fileServer's single Node
// event loop (it uses `readFileSync` and offers no `Accept-Ranges`).
// The injector's `<img>.decode()` then queues behind those video
// fetches and is never serviced before puppeteer's protocol timeout
// fires (`Runtime.callFunctionOn timed out`).
//
// Repro: synth 30 × 32 MB videos / 90 s comp on an 8-core / 30 GB
// host = 537 s wall (broken corpus) / 428 s (corpus-fixed), every
// render fails. Disabling the resolver (force base64-inline) gives
// 1:59 (119 s) wall and a clean MP4 on the same comp, with no
// regression on the 30 × 1.6 MB control corpus (137 s vs 135 s
// baseline).
//
// Until this is properly gated (e.g. only enable URL-served when the
// page has zero fileServer-bound `<video>.src` traffic), the inline
// path is the safe default. The cache memory ceiling
// (`frameDataUriCacheBytesLimitMb`, default 1500 MB above 8 GB
// hosts) already bounds the cost. `createCompiledFrameSrcResolver`
// and the `frameSrcResolver` option remain in their respective
// modules (`packages/producer/src/services/render/shared.ts`,
// `packages/engine/src/services/videoFrameInjector.ts`); the gating
// PR will re-import the builder here.
const createRenderVideoFrameInjector = (): BeforeCaptureHook | null =>
createVideoFrameInjector(frameLookup, {
frameDataUriCacheLimit: cfg.frameDataUriCacheLimit,
frameDataUriCacheBytesLimitMb: cfg.frameDataUriCacheBytesLimitMb,
frameSrcResolver,
});

let captureCalibration:
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/sdk",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "Headless, framework-neutral HyperFrames composition editing engine",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/shader-transitions/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/shader-transitions",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "WebGL shader transitions for HyperFrames compositions",
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/studio/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperframes/studio",
"version": "0.6.121",
"version": "0.6.122-alpha.0",
"description": "",
"repository": {
"type": "git",
Expand Down