From 08ca5893c708cc9f97b0abd1757dcef7d162db07 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 4 May 2026 13:18:16 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20IN/OUT=20marker=20placement:=20bli=C5=BEi?= =?UTF-8?q?na=20trim=20handle=20namesto=20fiksnega=20initialCenter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLEM: Ko je clip range premaknjen zelo daleč od LLM-jevega prvotnega center-ja, klikni+Enter za zelen IN postavi rdeč OUT (in vice versa) — ker se odločitev IN vs OUT temelji na 'initialCenter' (fiksen iz LLM analize), ki ne predstavlja več trenutne uporabnikove pozicije. Primer (Die Granaten — A Frau is a Frau): - initialIn=0:50, initialOut=1:30 → initialCenter=1:10 - User razširi clip: trimStart=0:06, trimEnd=2:33 - User klikne pri 2:02, želi postaviti IN bližje začetku - Stara koda: 2:02 > 1:10 → postavi OUT (NAROBE, ker je playhead daleč desno od dejanskega center-ja trim range-a) FIX: Odločitev IN vs OUT po BLIŽINI playhead-a do trim handle-a: - Bližje trimStart → IN marker - Bližje trimEnd → OUT marker Plus: clamp markerjev znotraj trim range-a (vsaj 0.5s razlika med IN/OUT) Plus: počisti staro initialCenter logiko v onPointerMove (handle drag) --- templates/index.html | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/templates/index.html b/templates/index.html index 21613ab..42bfe9b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1696,9 +1696,11 @@ trimEnd = t; if (video) video.currentTime = t; } - // Sync markerji: če čez initialCenter, reset (zelen sme samo levo, rdeč desno) - if (markerInTime > initialCenter - 0.1) markerInTime = trimStart; - if (markerOutTime < initialCenter + 0.1) markerOutTime = trimEnd; + // Sync markerji v okviru novega trim range-a + if (markerInTime < trimStart) markerInTime = trimStart; + if (markerInTime > trimEnd) markerInTime = trimStart; + if (markerOutTime > trimEnd) markerOutTime = trimEnd; + if (markerOutTime < trimStart) markerOutTime = trimEnd; renderTrim(); renderMarkers(); } @@ -1783,17 +1785,35 @@ e.preventDefault(); if (video) { if (video.paused) { - // STROGO: zelen IN samo v LEVI polovici, rdeč OUT samo v DESNI polovici - // Center = ORIGINAL (LLM-jev clip center) — NE se NE spreminja! - // Tako, če user razširi clip, klik blizu OUT še vedno → OUT marker + // Postavi marker po BLIŽINI playhead-a do trim handle-a: + // - Bližje LEVI handle (trimStart) → postavi IN marker + // - Bližje DESNI handle (trimEnd) → postavi OUT marker + // Tako uporabnik vedno premakne tisti handle, ki ga je opazoval. const t = video.currentTime; - const center = initialCenter; - if (t < center) { - markerInTime = Math.min(t, center - 0.1); + const distToStart = Math.abs(t - trimStart); + const distToEnd = Math.abs(t - trimEnd); + + if (distToStart < distToEnd) { + // Bližje začetku → IN marker + // Klamp da ne preseže OUT marker (vsaj 0.5s pred OUT) + markerInTime = Math.min(t, markerOutTime - 0.5); + if (markerInTime < 0) markerInTime = 0; } else { - markerOutTime = Math.max(t, center + 0.1); + // Bližje koncu → OUT marker + // Klamp da ne preseže IN marker (vsaj 0.5s za IN) + markerOutTime = Math.max(t, markerInTime + 0.5); + if (markerOutTime > videoDuration) markerOutTime = videoDuration; } - console.log("[Marker]", { t, center, trimStart, trimEnd, markerInTime, markerOutTime }); + console.log("[Marker]", { + t: t.toFixed(2), + trimStart: trimStart.toFixed(2), + trimEnd: trimEnd.toFixed(2), + distToStart: distToStart.toFixed(2), + distToEnd: distToEnd.toFixed(2), + chose: distToStart < distToEnd ? "IN" : "OUT", + markerInTime: markerInTime.toFixed(2), + markerOutTime: markerOutTime.toFixed(2), + }); renderMarkers(); video.play().catch(() => {}); } else {