From 7854cb2e95f13ed93f43bc3d767cb5c6121149de Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Sat, 22 Aug 2026 17:37:46 +0300 Subject: [PATCH] revert: the player retry fix was based on a wrong root cause _ensureVideo already registers the url on both the create and reuse paths, so window-materialized elements always could retry; the added registration was a no-op and its comment described a bug that does not exist. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 8 -------- movie_editor/frontend/player.js | 9 +-------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11a93f3d..766ccb2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,14 +31,6 @@ quietly. Latent width and height snap to even, since a patchified model cannot take odd. ### Fixed -- **Timeline playback died partway through a long timeline: play/pause left it on "Loading" - forever.** `_classifyVideoError` drops any element whose url is not registered in - `_urlClips`, and only `_syncPool` registered — which runs on a timeline rebuild, not as the - playhead moves. So every clip the sliding pool window materialized during playback could - never retry a failed load: one transient error (rapid play/pause over the network poisons a - stream) and that clip was stuck until a page reload. The boundary fell wherever the initial - window ended, which on a typical timeline is around the halfway point. - - **A linked input driven by `Project · Prompt (global)` claimed to encode "the same text Studio would" and did not.** Studio appends the postfix to every scene itself, so the global prompt is strictly less than what it encodes — and the postfix is usually where diff --git a/movie_editor/frontend/player.js b/movie_editor/frontend/player.js index 370799c5..78f083be 100644 --- a/movie_editor/frontend/player.js +++ b/movie_editor/frontend/player.js @@ -628,14 +628,7 @@ for (const u of want) { if (pool.has(u)) continue; const clip = _clips.find((c) => _clipUrl(c) === u); - if (!clip) continue; - // Register BEFORE materializing: _classifyVideoError drops any element whose url is - // not in _urlClips, so an element created here without one could never retry a failed - // load and sat on "loading" forever. Only _syncPool registered, and it only runs on a - // timeline rebuild — so every clip the sliding window materialized during playback - // (i.e. everything past the first window) was unrecoverable. - _registerUrlClip(u, clip); - _ensureVideo(u, clip); + if (clip) _ensureVideo(u, clip); } if (pool.size <= POOL_MAX) return; for (const [u, v] of [...pool]) { // Map order = insertion order ⇒ oldest first