Describe the bug
Documented relative data-start on composition hosts (data-composition-src slots that chain with data-start="hook") is ignored during render media scheduling.
After sub-compositions are inlined, collectRenderMedia resolves each host's timeline window with parseFloat(data-start). Non-numeric id-refs (hook, performance, intro + 0.5) become 0, so every scene's embedded <video> is scheduled at global 0–2s instead of its resolved window (e.g. 2–4s, 4–6s).
Symptom: multi-scene exports show the first scene, then go black for the remainder. The same project with numeric slot starts (0, 2, 4) renders correctly — proving id-ref resolution is the variable.
This is the composition-host slot path (renderMediaCollector / resolveHostWindow). Open PR #3252 fixes compileTimingAttrs for sibling <video> elements but does not cover host slot scheduling.
Link to reproduction
https://github.com/ArcadeHQ/hyperframes-repros/tree/patch/chained-scene-slots
Steps to reproduce
git clone https://github.com/ArcadeHQ/hyperframes-repros && cd hyperframes-repros && git checkout patch/chained-scene-slots
npx hyperframes@0.8.4 render --quality draft --workers 1 --output renders/out.mp4
- Sample frames:
ffmpeg -ss 1 -i renders/out.mp4 -frames:v 1 renders/at-1.png (red), -ss 3 (black), -ss 5 (black)
- Control:
cp index-numeric.html index.html, re-render — red at 1s, blue at 3s, green at 5s
Expected behavior
Each scene's video is extracted and frame-injected at its resolved global window (0–2s red, 2–4s blue, 4–6s green).
Actual behavior
Only the first scene's footage is scheduled. The MP4 is red for ~2s, then black through the end.
Environment
✓ Version 0.8.4 (latest)
✓ Node.js v24.19.0 (darwin arm64)
✓ FFmpeg ffmpeg 8.1.2 at /opt/homebrew/bin/ffmpeg
✓ FFprobe ffprobe 8.1.2 at /opt/homebrew/bin/ffprobe
✓ Chrome cache: .../chrome-headless-shell/mac_arm-152.0.7977.42/...
Additional context
Related open PR: #3252 (timing compiler id-ref fix — different code path).
A fix likely belongs alongside id-ref-aware host timing (similar to resolving data-start references against sibling slots / data-composition-id targets in the inlined document).
Describe the bug
Documented relative
data-starton composition hosts (data-composition-srcslots that chain withdata-start="hook") is ignored during render media scheduling.After sub-compositions are inlined,
collectRenderMediaresolves each host's timeline window withparseFloat(data-start). Non-numeric id-refs (hook,performance,intro + 0.5) become0, so every scene's embedded<video>is scheduled at global 0–2s instead of its resolved window (e.g. 2–4s, 4–6s).Symptom: multi-scene exports show the first scene, then go black for the remainder. The same project with numeric slot starts (
0,2,4) renders correctly — proving id-ref resolution is the variable.This is the composition-host slot path (
renderMediaCollector/resolveHostWindow). Open PR #3252 fixescompileTimingAttrsfor sibling<video>elements but does not cover host slot scheduling.Link to reproduction
https://github.com/ArcadeHQ/hyperframes-repros/tree/patch/chained-scene-slots
Steps to reproduce
git clone https://github.com/ArcadeHQ/hyperframes-repros && cd hyperframes-repros && git checkout patch/chained-scene-slotsnpx hyperframes@0.8.4 render --quality draft --workers 1 --output renders/out.mp4ffmpeg -ss 1 -i renders/out.mp4 -frames:v 1 renders/at-1.png(red),-ss 3(black),-ss 5(black)cp index-numeric.html index.html, re-render — red at 1s, blue at 3s, green at 5sExpected behavior
Each scene's video is extracted and frame-injected at its resolved global window (0–2s red, 2–4s blue, 4–6s green).
Actual behavior
Only the first scene's footage is scheduled. The MP4 is red for ~2s, then black through the end.
Environment
Additional context
Related open PR: #3252 (timing compiler id-ref fix — different code path).
A fix likely belongs alongside id-ref-aware host timing (similar to resolving
data-startreferences against sibling slots /data-composition-idtargets in the inlined document).