From 581b048a7ceb00e7942da46524f92825fdb2f9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Wed, 16 Sep 2026 21:19:35 -0400 Subject: [PATCH] chore: release v0.8.45 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Producer: motionBlur on a render configuration turns on sub-frame multi-sample blur, with the After Effects defaults and up to 64 samples. It forces PNG frame capture, and whether a render captures lossless frames now has one owner (#4020) - Engine: each output frame can be the average of several sub-frame captures across the shutter window, which blurs rotation, scale and opacity rather than translation alone. Off unless asked for (#4019) - Producer and CLI: a render can output an HLS VOD package (#4014, #4022) - Registry: the motion-blur component follows the After Effects shutter model, improving the measured match from 24.19 dB to 32.51 dB (#4008) The two blur mechanisms are alternatives, never stacked. The engine path costs roughly 600 ms per 1080p frame at 16 samples on top of the captures, and a video's own motion does not blur on it. Co-authored-by: Miguel Ángel --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- .cursor-plugin/plugin.json | 2 +- docs/changelog.mdx | 30 ++++++++++++++++++++++++ packages/aws-lambda/package.json | 2 +- packages/cli/package.json | 2 +- packages/core/package.json | 2 +- packages/engine/package.json | 2 +- packages/gcp-cloud-run/package.json | 2 +- packages/lint/package.json | 2 +- packages/parsers/package.json | 2 +- packages/player/package.json | 2 +- packages/producer/package.json | 2 +- packages/sdk/package.json | 2 +- packages/shader-transitions/package.json | 2 +- packages/studio-server/package.json | 2 +- packages/studio/package.json | 2 +- releases/v0.8.45.md | 29 +++++++++++++++++++++++ 18 files changed, 75 insertions(+), 16 deletions(-) create mode 100644 releases/v0.8.45.md diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 21cfe857f0..09735b67c4 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -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 capture for HyperFrames.", - "version": "0.8.44", + "version": "0.8.45", "author": { "name": "HeyGen", "email": "hyperframes@heygen.com", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 4033cc94ec..7fbcd8fa0a 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "hyperframes", "description": "Write HTML, render video. Compositions, Tailwind v4 styles, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website capture for HyperFrames.", - "version": "0.8.44", + "version": "0.8.45", "author": { "name": "HeyGen", "email": "hyperframes@heygen.com", diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 2c9c2e2580..f96b87b13f 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -3,7 +3,7 @@ "name": "hyperframes", "displayName": "HyperFrames by HeyGen", "description": "Write HTML, render video. Compositions, Tailwind v4 styles, GSAP and runtime adapter animations, captions, voiceovers, audio-reactive visuals, and website capture for HyperFrames.", - "version": "0.8.44", + "version": "0.8.45", "author": { "name": "HeyGen", "email": "hyperframes@heygen.com" diff --git a/docs/changelog.mdx b/docs/changelog.mdx index 8e29f75261..cc546cc0a3 100644 --- a/docs/changelog.mdx +++ b/docs/changelog.mdx @@ -8,6 +8,36 @@ Recent HyperFrames releases, including user-facing features, fixes, and migratio {/* New release entries are prepended by `bun run changelog:draft --write`. */} + +Motion blur arrives twice in this release, as two separate mechanisms for two different jobs. The catalog component now matches After Effects, and the render engine can average several sub-frame captures per output frame. Renders can also be written as an HLS package. + +## Features + +- **Producer:** `motionBlur` on a render configuration turns on sub-frame multi-sample blur. An empty object takes the After Effects defaults, which are 16 samples per frame, a 180 degree shutter angle and a shutter phase of -90. `samplesPerFrame` accepts up to 64. Setting it forces PNG frame capture, because the samples are averaged pixel by pixel and JPEG samples would be averaged after a lossy step. Whether a render captures lossless frames now has one owner instead of being decided in three places from a different fact ([b64a7a3a6](https://github.com/heygen-com/hyperframes/commit/b64a7a3a67ae1f5c22915a88938853169eb3cea2), [#4020](https://github.com/heygen-com/hyperframes/pull/4020)). +- **Engine:** Each output frame can be the average of several captures taken across the shutter window. Unlike an SVG ghost filter this blurs rotation, scale and opacity, not translation alone. It is off unless asked for, and a static frame still costs one capture. Capture modes other than screenshot throw a named error rather than quietly rendering unblurred ([0a1c6f5a4](https://github.com/heygen-com/hyperframes/commit/0a1c6f5a457ca1345d6b8ccede04769a0e009719), [#4019](https://github.com/heygen-com/hyperframes/pull/4019)). +- **CLI:** Add hls output format ([e4b1832fa](https://github.com/heygen-com/hyperframes/commit/e4b1832fadd4c063bcf9a19cd351684815fbc23e), [#4022](https://github.com/heygen-com/hyperframes/pull/4022)). +- **Producer:** A render can output an HLS VOD package. It is the same H.264 and AAC encode as MP4, copied into MPEG-TS segments with playlists, and every segment starts on a keyframe ([462f9db73](https://github.com/heygen-com/hyperframes/commit/462f9db73dc0951a112a057416d03effb2fcf1a0), [#4014](https://github.com/heygen-com/hyperframes/pull/4014)). + +## Catalog + +- **Registry:** The `motion-blur` component now follows the After Effects shutter model instead of a row of hard copies. Measured against a real After Effects export over 72 frames, the match improved from 24.19 dB to 32.51 dB on average, and the worst frame from 17.07 dB to 27.57 dB ([9aa60a844](https://github.com/heygen-com/hyperframes/commit/9aa60a844fa645ef92949cf6025ddbb634a97e63), [#4008](https://github.com/heygen-com/hyperframes/pull/4008)). + +## Choosing a motion blur, and what each one costs + +The two mechanisms are alternatives. Applying both blurs the same motion twice. + +- The catalog component is cheap and looks like After Effects, and it blurs translation only. +- The engine path blurs any animated property, and it costs one capture per sample. At 16 samples a 1080p frame spends roughly 600 ms in the blend on top of the 16 captures, so a slow render is expected rather than stuck. +- A video's own motion does not blur on the engine path. Injected video frames are extracted once per output frame, so a sub-frame seek does not move them. +- The engine path is a plain average across the shutter window, which is what a real shutter does. After Effects keeps a sharp copy on top of the smear, so the engine result reads softer on fast motion even though the averaging is correct. + +[View the full commit range](https://github.com/heygen-com/hyperframes/compare/v0.8.44...v0.8.45). + +