From 3e0b8855067af7424f3e9c490d2a611c027a2a70 Mon Sep 17 00:00:00 2001 From: Thomas Pamminger Date: Wed, 24 Jun 2026 12:22:26 +0200 Subject: [PATCH] fix: pass clip-relative 0 to media-seek-request in resetPlaybackIfNeeded MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #resetPlaybackIfNeeded dispatches seekableStart() (absolute) to media-seek-request, but since 1.14.0 the seek handler treats the detail as clip-relative and boundTime() adds clipStartTime back. This double- adds clipStartTime, jumping clipped players to ~ clip end on play() after a clip ends or when realCurrentTime < seekableStart. Pass 0 instead — boundTime's isStart clamp resolves 0 + clipStartTime (<= seekableStart) to seekableStart(), the intended target. Safe for all video types: clipped on-demand (-> clipStartTime), non-clipped (-> 0), live DVR (-> DVR window start). Fixes the auto-advance / replay-after-clip-end regression that appeared in 1.14.0 (maverick 0.44.1) when currentTime became clip-relative. This contribution was created with the support of GLM-5.2. --- packages/vidstack/src/core/state/media-state-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vidstack/src/core/state/media-state-manager.ts b/packages/vidstack/src/core/state/media-state-manager.ts index 920bf6a3c..829c9c5c6 100644 --- a/packages/vidstack/src/core/state/media-state-manager.ts +++ b/packages/vidstack/src/core/state/media-state-manager.ts @@ -690,7 +690,7 @@ export class MediaStateManager extends MediaPlayerController { if (shouldReset) { this.dispatch('media-seek-request', { - detail: seekableStart(), + detail: 0, trigger, }); }