v0.8.45
heygen-com/hyperframesv0.8.45Sep 17, 2026by github-actions[bot]
Upgrading?
AI Summary
This release introduces two distinct motion blur mechanisms to simulate different camera behaviors, along with HLS VOD output support and enhanced render telemetry. It also fixes a frame reuse logic issue and improves catalog accuracy.
Key Highlights
- Dual motion blur mechanisms: The catalog component replicates After Effects look, while the engine computes real shutter integrals.
- New HLS VOD package output support for Producer and CLI.
- Enhanced telemetry includes detailed render stats like output shapes, adapter usage, and browser versions.
- Improved catalog motion blur accuracy matching After Effects exports.
Breaking Changes
- Asking for motion blur on the layered compositor route now fails with a named error instead of silently producing unblurred frames.
New Features
- Producer: `motionBlur` configuration with customizable `samplesPerFrame` (up to 64) and default shutter settings.
- Engine: Sub-frame multi-sample blur that integrates all animation properties (rotation, scale, opacity) within the shutter window.
- Producer and CLI: New HLS VOD package output using MPEG-TS segments.
- Telemetry: Expanded `render_complete` and `render_error` events with detailed composition and environment metadata.
Full Release Notes
# HyperFrames v0.8.45 Released on 2026-09-17. Motion blur arrives twice in this release, as two separate mechanisms for two different jobs. The catalog component reproduces the After Effects look, while the render engine computes the real shutter integral. ## Features - **Producer:** `motionBlur` on a render configuration turns on sub-frame multi-sample blur. An empty object takes the defaults: 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. Because each sample re-renders the page, this integrates whatever the composition actually does inside the window: rotation, scale, opacity, filters and child animation, not translation alone. It is off unless asked for, and a static frame still costs one capture ([0a1c6f5a4](https://github.com/heygen-com/hyperframes/commit/0a1c6f5a457ca1345d6b8ccede04769a0e009719), [#4019](https://github.com/heygen-com/hyperframes/pull/4019)). - **Producer and CLI:** 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), [e4b1832fa](https://github.com/heygen-com/hyperframes/commit/e4b1832fadd4c063bcf9a19cd351684815fbc23e), [#4022](https://github.com/heygen-com/hyperframes/pull/4022)). - **Telemetry:** `render_complete` and `render_error` carry more about the render they describe: the requested output shape, which deterministic adapters the composition exercised, counts of audio, image, sub-composition, audio group and color grading elements, whether a LUT is present, and the browser and FFmpeg major versions. Every value comes from work the render already did, so nothing new runs. A Docker render reports no tool versions, because its preflight happens inside the container ([71bb88719](https://github.com/heygen-com/hyperframes/commit/71bb88719e10ab7002dafd61478d2c84c255ba42), [#4017](https://github.com/heygen-com/hyperframes/pull/4017)). ## Fixes - **Engine:** A frame that repeats its predecessor is reused instead of re-rendered, and with motion blur on that check ignored the shutter window. A still frame next to a moving one reused a buffer carrying none of that motion. The reuse now requires the whole window to be still. The guard's contract comes from [#4013](https://github.com/heygen-com/hyperframes/pull/4013) by Dante-dan ([9117b3647](https://github.com/heygen-com/hyperframes/commit/9117b364710444432504b98bfbb5543e381d956d), [#4025](https://github.com/heygen-com/hyperframes/pull/4025)). - **Producer:** Asking for motion blur on the layered compositor route returned frames with no blur and no error. It now fails with a named error that says which route refused and why, instead of a render that looks finished and is not. The route is taken for HDR content and for shader transitions, and the message names both rather than blaming HDR for a composition that has none. "Does this capture route support motion blur" has one owner, keyed to the capture plan's own kind, so a new route cannot inherit silence. The explicit unsupported-mode error is the design in [#4013](https://github.com/heygen-com/hyperframes/pull/4013) by Dante-dan ([77a45f608](https://github.com/heygen-com/hyperframes/commit/77a45f6080daedd12ab67a3d1c9d165b8ae003b3), [#4026](https://github.com/heygen-com/hyperframes/pull/4026)). ## 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 catalog component and the engine path do different things. Applying both blurs the same motion twice. - The catalog component is cheap, blurs translation only, and deliberately reproduces the After Effects look, which composites a sharp copy over the smear. - The engine path blurs any animated property and computes the shutter integral, which is what a real camera shutter does. Peak opacity therefore drops during fast motion rather than staying anchored to a sharp core. That is the correct answer for a shutter and a different picture from the component. - The engine path 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. ## Known limits of the engine path - A video's own motion does not blur. Injected video frames are extracted once per output frame, so a sub-frame seek does not move them. A render that injects video frames refuses rather than pretending. - Capture modes other than screenshot are refused with a named error, as is the layered compositor route. - Frames are captured as PNG for the whole render. - A shutter that is both wide and not centered, meaning `shutterPhase + shutterAngle` above 360, seeks past the end of the composition on the last frames. No default or documented configuration reaches it and the behaviour there is unproven. ## Full changelog https://github.com/heygen-com/hyperframes/compare/v0.8.44...v0.8.45
Related Repositories
openclaw/openclaw★ 392,689
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
nilbuild/developer-roadmap★ 370,064
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
morluto/rea★ 357,471
Reverse engineer anything with agents, from app behavior down to native binaries.
anomalyco/opencode★ 219,652
The open source coding agent.
n8n-io/n8n★ 208,248
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.