Describe the bug
HyperFrames beginFrame renders still frames with no movement — early timestamps produce blank/white frames, only late timestamps have content
Issue Description
When rendering a HyperFrames composition with 10+ scenes using hyperframes render (beginFrame capture), the output MP4 has no movement — all frames from t=0 to t=N are identical still images stitched together. Frame extraction confirms:
- t=1–57s: 12,460 bytes each (blank/white frames)
- t=60+: 48,088 bytes (actual content)
The issue is not caused by visibility tweens or CSS changes. Even after removing all tl.set('#sceneN', { visibility: 'hidden' }) calls, the render still produces only blank frames for the first ~57 seconds.
Confirmed frame sizes from draft.mp4 (68s, 11 scenes):
- t=1–57s: 12,460 bytes (blank)
- t=60s: 48,088 bytes (content)
Link to reproduction
na
Steps to reproduce
Steps to Reproduce
1. npx hyperframes init a new project
2. Create 10+ scenes with GSAP timelines (clip-level opacity transitions, position: fixed clips)
3. npx hyperframes render --quality high --output output.mp4
4. Extract frames: ffmpeg -i output.mp4 -ss N -vframes 1 frame.jpg
5. Observe: early timestamps (t=0–57) are blank 12KB frames; only late timestamps have content
Expected behavior
Expected Behavior
All scenes should render with correct animation at every timestamp, producing a video with smooth scene transitions and animated elements throughout.
Actual behavior
Actual Behavior
The headless browser renders a blank canvas for timestamps t=0–57. The static-dedup in beginFrame marks these as "reused frames," suggesting the seek lands on the wrong temporal state in complex multi-scene GSAP timelines.
Environment
Environment
- OS: Linux (6.8.0-117-generic)
- HyperFrames: 0.6.119
- Node.js: (latest)
- Browser: Puppeteer/Chromium (headless, via beginFrame)
- Composition: 11 scenes, clip-level GSAP timelines, position: fixed clips, opacity transitions, ~2000 total frames at 30fps
Additional context
Lint Output
13 error(s), 3 warning(s)
Key errors:
- multiple_root_compositions: index.html, mini_test.html (extra file pollutes render)
- scene_layer_missing_visibility_kill: all 10 scenes (but adding visibility tweens makes it worse)
Additional Context
- Minimal 3-scene compositions render correctly with the same --no-clip-visibility flags
- The bug appears specifically in complex multi-scene (10+) GSAP timelines with clip-level position: fixed elements
- forceScreenshot: true (screenshot mode) was also tested — same blank-frame result
- The composition plays correctly in a live browser — the issue is specific to headless capture
- A previous session (hermes-skills-reel) documented this as a confirmed pre-existing bug in HyperFrames beginFrame
Tags
beginframe, blank-frames, headless-browser, multi-scene, gsap, render
Describe the bug
HyperFrames beginFrame renders still frames with no movement — early timestamps produce blank/white frames, only late timestamps have content
Link to reproduction
na
Steps to reproduce
Expected behavior
Actual behavior
Actual Behavior
The headless browser renders a blank canvas for timestamps t=0–57. The static-dedup in beginFrame marks these as "reused frames," suggesting the seek lands on the wrong temporal state in complex multi-scene GSAP timelines.
Environment
Environment - OS: Linux (6.8.0-117-generic) - HyperFrames: 0.6.119 - Node.js: (latest) - Browser: Puppeteer/Chromium (headless, via beginFrame) - Composition: 11 scenes, clip-level GSAP timelines, position: fixed clips, opacity transitions, ~2000 total frames at 30fpsAdditional context
Lint Output