Skip to content

feat(studio): add a preview seek bar - #6103

Merged
jrusso1020 merged 3 commits into
mainfrom
feat/studio-preview-seek
Oct 23, 2026
Merged

jrusso1020 merged 3 commits into
mainfrom
feat/studio-preview-seek

Conversation

@jrusso1020

@jrusso1020 jrusso1020 commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

What

Add a seek bar above the preview playback controls in OSS Studio. Click, drag, or use the keyboard to scrub without opening the timeline, including in fullscreen.

Why

The preview had playback controls but no seek bar. With the timeline hidden or the preview in fullscreen, users had no direct way to scrub through the video.

Related work

User request and fullscreen/hidden-timeline use case.

How

Use a native range input connected to the existing seek handler and live playback clock. The seek bar and buttons share the original 40-pixel transport height, preserving the preview stage size. The native input retains its full rendering height above the preview selection layer so the thumb is visible and clickable without clipping. Seeking retains the timeline's pause behavior. The control follows playback without per-frame React renders and stays disabled until the preview is ready and has a duration.

Test plan

  • Unit tests added/updated: 47 focused tests passed across playback controls, volume, timeline seeking, and keyboard playback.
  • Manual testing performed: click and drag scrubbing, arrow keys, Home/End, fullscreen, hidden timeline, playback synchronization, and pausing on seek.
  • Regression verification: root and nested seqab-none-center-r0-*-z100 editing sequences passed locally against the rebuilt Studio. Browser measurements confirm the transport is 40px and the preview regained 24px. The original failing case also passes locally on macOS; Linux CI remains the regression confirmation. No baseline or harness changes.
  • Thumb clipping fix: all 6 playback-control tests passed; the nested editing case passed every gated accuracy metric. Non-gating smoothness reported dropped frames on the busy local machine. Browser checks confirm the complete thumb and Play button receive pointer input while the transport remains 40px.
  • Documentation updated in the Studio guide.
  • Comments follow CONTRIBUTING.md; no production comments added.

Validation passed: Studio typecheck, oxlint, oxfmt, Fallow audit, workspace build, and the updated Studio production build. The audit reports only an inherited complexity finding in PlayerControls.

Before

The preview has a timecode and playback buttons but no seek bar.

Preview controls before the seek bar

After

The preview seek bar stays synchronized with the timeline playhead.

Preview controls with the seek bar

Fullscreen and hidden-timeline checks:

Scrubbing the preview in fullscreen

Scrubbing with the timeline hidden

@mintlify

mintlify Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
hyperframes 🟢 Ready View Preview Oct 23, 2026, 12:41 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Edit accuracy: accurate 271 (base branch 271), smooth 140 of those

The gate passes.
Smoothness is reported in the artifact, not gated. A case fails only if it fails 2 of 3 runs.

Quarantined, measured but not gated (0)

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: COMMENT (needs human): 1 blocker, 0 important, 0 nits, at e35b70325. I'm holding approval because the required check Studio: edit accuracy gate fails, and this PR causes the failure. ↓ inline

Scope

I read all 4 files end to end. I checked the seek path through useTimelinePlayer.seek: it pauses unless keepPlaying is set, which matches the docs. I also checked liveTime subscribe/unsubscribe cleanup. CI: every other required job passed. In the gate artifacts, the regressed case fails 3 of 3 runs (shard 5) with the same coordinates each time, so it is deterministic and not flaky.

@jrusso1020
jrusso1020 marked this pull request as ready for review October 23, 2026 01:40

@heygengenesis heygengenesis Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verdict: APPROVE: 1 resolved, 0 open, 0 new blockers, 2 nits · e35b70325 → 14c968f09

The preview-height blocker is fixed: the transport is back to 40px (h-3 seek row plus h-7 controls), and the edit accuracy gate now passes at 271 vs 271 on base. All required checks are green on this head.

Nits (non-blocking)
  • PreviewSeekBar.tsx:43: the h-6 input inside an h-3 row overhangs the stage by about 6px. Because the controls wrapper is now z-20, that strip sits above DomEditOverlay (z-10). It is mostly inside the 8px stage inset, but it covers part of the bottom selection handles on elements that touch the composition's bottom edge, and at zoom above 100% clicks in that band seek instead of hitting the canvas.
  • PlayerControls.tsx:225: relative z-20 creates a stacking context, so SpeedMenu's z-50 popover is now effectively z-20. When it opens upward over the stage, it now paints under MotionPathOverlay (z-40). That's visual only.

Smoothness (not gated) reads 140 vs 161 on the earlier head. I'm noting it here without treating it as a finding.

@jrusso1020
jrusso1020 added this pull request to the merge queue Oct 23, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 23, 2026
@jrusso1020
jrusso1020 added this pull request to the merge queue Oct 23, 2026
Merged via the queue into main with commit 2512642 Oct 23, 2026
74 of 75 checks passed
@jrusso1020
jrusso1020 deleted the feat/studio-preview-seek branch October 23, 2026 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant