Skip to content

Commit a25793d

Browse files
sschabackerclaude
andcommitted
Stop auto-loading first video from a folder pick; add an audit-marker filename
Two real findings from hands-on testing: 1. Auto-loading the first video the instant you pick a folder fired a full load cascade (decode, frame render, metrics panels) at the same moment OpenCV.js might still be mid-download - two things competing for attention made an unrelated few-second wait look like the whole app hanging. Open folder/Select videos now just populate the roster and stop; you click to open one. Better default regardless: a batch pick is "here's what's here," not "open this one specifically." 2. "Select videos" already filters to video files; "Open folder" walks a whole directory by design and can't be filtered by type (a real browser limitation - the "upload N files?" warning fires before any of our own filtering runs). Button row copy now says which to use when videos share a folder with other file types. Also: the saved project file's suggested filename is now "<video>_AUDITED.bmp.json", not just "<video>.bmp.json" - lets a non-technical reader tell a trial's done at a glance in a shared folder, without knowing what the file format even is. Verified safe first: checkVideoFingerprint() (project-file.js:188) matches a reload by the video's actual decode fingerprint, never by filename, so this is a pure naming convention with zero reload risk. Logged in KNOWN_LIMITATIONS.md alongside what it doesn't solve - still opt-in, nothing enforces it. Two small label fixes from her live testing: the ROI keyboard dropdown read "No mouse?" in a mouse-tracking tool - now "Keyboard only?". Topbar toggle removed - its short and full lines were nearly identical, so the disclosure added friction for no real payoff. 75/75 tests pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 7c1d72a commit a25793d

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

‎KNOWN_LIMITATIONS.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,3 +342,14 @@
342342
solves the more urgent version of "where did my other videos go";
343343
this solves a slower, on-disk version of the same question that a
344344
saved project file already answers well enough.
345+
- Cheap follow-up, added same day: the saved project file's suggested
346+
filename is now `<video>_AUDITED.bmp.json`, not just
347+
`<video>.bmp.json` - a non-technical reader browsing the folder can
348+
tell a trial's done without knowing what the file format even is.
349+
Verified safe: `checkVideoFingerprint()` (`project-file.js:188`)
350+
matches a reloaded project file by its actual video fingerprint
351+
(frame count, duration, dimensions, size), never by filename, so
352+
this is a pure naming convention with no reload risk. Still opt-in
353+
and un-enforced - nothing stops someone from skipping the save or
354+
saving it somewhere other than next to the video - which is the real
355+
remaining gap this doesn't close.

‎app/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ <h2>Videos</h2>
870870
</div>
871871
<p class="subtitle" id="trackScrubHint" hidden>Scrub the frame viewer above - green crosshair = tracked, red X = failed frame.</p>
872872

873-
<p class="subtitle" id="saveProjectFileHint" hidden>Save a portable <code>.bmp.json</code> file with everything except the video itself (which stays wherever it already lives) - open it later, on any computer, to resume without re-tracking.</p>
873+
<p class="subtitle" id="saveProjectFileHint" hidden>Save a portable <code>_AUDITED.bmp.json</code> file with everything except the video itself (which stays wherever it already lives) - open it later, on any computer, to resume without re-tracking. Save it in the same folder as the video, next to it - the name makes it obvious at a glance, to you or anyone else, that this trial's already been done.</p>
874874
<button id="saveProjectFileBtn" type="button" hidden>Save project file</button>
875875
<div id="saveProjectFileStatus" role="status" aria-live="polite"></div>
876876
</div>
@@ -1008,7 +1008,7 @@ <h3>Confirm &amp; adjust</h3>
10081008
<p class="subtitle">Drag a circle's edge to resize it, drag its middle to move it. Click a hole (no drag) to mark it as the target - or use the dropdown below if clicking precisely is awkward on a small screen.</p>
10091009
</details>
10101010
<div id="roiKeyboardNudge">
1011-
<label for="roiShapeSelect">No mouse? Select a shape to adjust:</label>
1011+
<label for="roiShapeSelect">Keyboard only? Select a shape to adjust:</label>
10121012
<select id="roiShapeSelect"><option value="">- none -</option></select>
10131013
<p class="subtitle">Arrow keys move it, +/&minus; resizes it - hold Shift for bigger steps. Selecting a shape moves focus to the image below.</p>
10141014
</div>

‎app/js/app.js‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3194,8 +3194,15 @@ saveProjectFileBtn.addEventListener('click', () => {
31943194
classifierOverride,
31953195
});
31963196

3197+
// "_AUDITED" in the suggested filename, not just ".bmp.json" - the
3198+
// point is a non-technical reader browsing the video folder can tell
3199+
// this trial's already done without knowing what a project file even
3200+
// is. Purely a filename convention: checkVideoFingerprint() below
3201+
// never checks what a reloaded project file is named on disk, only
3202+
// what's inside it, so renaming this (or a saved copy of it) later
3203+
// can't break reloading it.
31973204
const baseName = currentFileName.replace(/\.[^.]+$/, '');
3198-
downloadFile(`${baseName}.bmp.json`, json, 'application/json;charset=utf-8');
3205+
downloadFile(`${baseName}_AUDITED.bmp.json`, json, 'application/json;charset=utf-8');
31993206

32003207
saveProjectFileStatusEl.textContent = 'Project file saved. Keep it with the video - re-opening both together resumes without re-tracking.';
32013208
saveProjectFileStatusEl.dataset.level = 'success';

0 commit comments

Comments
 (0)