mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-14 18:01:20 +08:00
35d29e58b0
playTo() played the player and relied on being paused at holdAt = target + 0.2s (~6 frames). If a timeupdate was coarse or missed, playback overran the hold — sometimes into the next fragment/scene, the intermittent auto-progress. Bound the repaint to a single frame instead: seek to the exact target, play, and pause on the FIRST timeupdate at/after the target. timeupdate only fires from the playback clock (never on seek), so the first tick is a genuine painted frame — one tick forces a repaint but can't overrun. Pause before the change handlers so no second tick advances the playhead. Verified headless: slide holds with currentTime stable over 6s; every next lands and holds (1→2 frag0→2 frag1→3), no drift. 106 player tests pass.