Skip to content

Multi-worker render still differs from -w 1 on 0.9.15 with a set and a tween inside a running tween (#6707 pattern) #7223

Closed

Description

@AryaJayadi

Describe the bug

A multi-worker local render still differs from a -w 1 render on 0.9.15 when a set and a second tween land while a tween on the same property is running. This is the pattern #6707 describes. The output is identical to 0.8.214's, so the replay from #6707 doesn't seem to apply here. The render does pass fps: with HYPERFRAMES_DEBUG=1 each worker logs render runtime fps {"canonicalFps":30,"source":"render-options",...}.

Minimal reproduction

index.html, with gsap.min.js 3.15.0 beside it:

<!doctype html>
<html><head><meta charset="utf-8">
<style>html,body{margin:0;background:#010101} #root{position:relative;width:1080px;height:1920px;overflow:hidden}
#box{position:absolute;left:340px;top:760px;width:400px;height:400px;background:#AFE607;transform-origin:50% 50%}</style></head>
<body><div id="root" data-composition-id="root" data-start="0" data-duration="3" data-width="1080" data-height="1920"><div id="box"></div></div>
<script src="gsap.min.js"></script>
<script>
  const tl = gsap.timeline({ paused: true });
  tl.to('#box', { scale: 1.6, duration: 1, ease: 'none' }, 0);   // zoom punch, 0–1 s
  tl.set('#box', { scale: 1.0 }, 0.5);                            // a cut sets the zoom while it runs
  tl.to('#box', { scale: 2, duration: 2, ease: 'none' }, 0.55);   // a slow move from wherever the zoom is
  window.__timelines = { root: tl };
</script></body></html>

Steps to reproduce

  1. hyperframes render . -q delivery -w 1 -o w1.mp4
  2. hyperframes render . -q delivery -w 8 -o w8.mp4
  3. Measure the box width on row y = 960 in each frame (lime pixels ÷ 400 = scale).

Expected behavior

w8.mp4 matches w1.mp4 on every frame.

Actual behavior

59 of 90 frames differ (frames 18–77). With 8 workers the box jumps back and forth with period 8:

t (s) -w 1 -w 8
0.6 1.355 1.025
0.7 1.390 1.075
0.8 1.420 1.545
0.9 1.455 1.175
1.3 1.590 1.660
1.6 1.685 1.755
2.1 1.850 1.880

0.8.214 gives the same numbers in both columns. The -w 1 renders from 0.8.214 and 0.9.15 match each other (≥ 63 dB PSNR).

Environment

  • hyperframes 0.9.15 (CLI, local render), also 0.8.214 for comparison
  • Linux x64, Node v24.20.0, 8 cores
  • GSAP 3.15.0, 30 fps

Additional context

hyperframes lint 0.9.15 flags this composition with two overlapping_gsap_tweens warnings: the set at 0.50 s fires inside the 0–1 s tween, and the tweens overlap on scale between 0.55 s and 1.00 s. So the lint sees the overlap, but the multi-worker render doesn't replay it.

Activity

  1. added a commit that references this issue on Nov 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions