scrypted-detection-trainer 0.1.11 β†’ 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/plugin.zip CHANGED
Binary file
@@ -2340,75 +2340,6 @@ async function initBrowse() {
2340
2340
  }
2341
2341
  }
2342
2342
 
2343
- async function loadBrowse() {
2344
- const cameraId = document.getElementById('browse-camera').value;
2345
- const hours = document.getElementById('browse-hours').value;
2346
- const status = document.getElementById('browse-status');
2347
- const list = document.getElementById('browse-list');
2348
-
2349
- if (!cameraId) { status.textContent = 'Select a camera first'; return; }
2350
-
2351
- status.textContent = 'Loading…';
2352
- list.innerHTML = '';
2353
-
2354
- try {
2355
- const res = await fetch(BASE + '/api/browse?cameraId=' + cameraId + '&hours=' + hours);
2356
- const events = await res.json();
2357
-
2358
- if (events.error) { status.textContent = 'Error: ' + events.error; return; }
2359
- if (!events.length) { status.textContent = 'No detection events found.'; list.innerHTML = '<div class="empty"><div class="icon">πŸ”</div><div>No ObjectDetector events in this time range.</div></div>'; return; }
2360
-
2361
- status.textContent = events.length + ' events found';
2362
-
2363
- list.innerHTML = events.map((ev, i) => {
2364
- const date = new Date(ev.timestamp).toLocaleString();
2365
- const dets = ev.detections || [];
2366
- const primary = dets[0] || {};
2367
- const score = Math.round((primary.score || 0) * 100);
2368
- const allClasses = dets.map(d => d.className + ' ' + Math.round((d.score||0)*100) + '%').join(', ');
2369
- return \`
2370
- <div class="detection" id="bev-\${i}" style="opacity:1;transition:opacity .3s">
2371
- <div class="detection-imgs">
2372
- <div class="img-panel">
2373
- <div class="img-label">Full frame</div>
2374
- <canvas id="bcanvas-\${i}" class="det-canvas" width="240" height="160"></canvas>
2375
- </div>
2376
- <div class="img-panel" id="bcrop-panel-\${i}">
2377
- <div class="img-label">Crop</div>
2378
- <canvas id="bcanvas-crop-\${i}" class="det-canvas" width="160" height="160"></canvas>
2379
- </div>
2380
- </div>
2381
- <div class="detection-info">
2382
- <div class="detection-meta">
2383
- <div><strong>\${ev.cameraName}</strong></div>
2384
- <div>\${date}</div>
2385
- <div class="det-class-badge">\${allClasses}</div>
2386
- </div>
2387
- <div style="font-size:12px;color:#888;">Add to dataset as:</div>
2388
- <div class="label-buttons" id="blabels-\${i}">
2389
- <button class="label-btn person" onclick="addEvent(\${i})('person')">πŸ‘€ Person</button>
2390
- <button class="label-btn animal" onclick="addEvent(\${i})('animal')">🐾 Animal</button>
2391
- <button class="label-btn face" onclick="addEvent(\${i})('face')">πŸ˜€ Face</button>
2392
- <button class="label-btn vehicle" onclick="addEvent(\${i})('vehicle')">πŸš— Vehicle</button>
2393
- <button class="label-btn" onclick="addEvent(\${i})('plate')">πŸ”’ Plate</button>
2394
- <button class="label-btn" onclick="addEvent(\${i})('package')">πŸ“¦ Package</button>
2395
- <button class="label-btn discard" onclick="addEvent(\${i})('discard')">πŸ—‘ Skip</button>
2396
- </div>
2397
- </div>
2398
- </div>\`;
2399
- }).join('');
2400
-
2401
- // Load images for each event
2402
- for (let i = 0; i < events.length; i++) {
2403
- const ev = events[i];
2404
- loadBrowseImage(i, ev);
2405
- }
2406
-
2407
- } catch(e) {
2408
- status.textContent = 'Error: ' + e.message;
2409
- }
2410
- }
2411
-
2412
2343
  // Store browse events for addEvent closure
2413
2344
  let browseEvents = [];
2414
2345
 
@@ -2512,7 +2443,7 @@ function loadBrowseImage(i, ev) {
2512
2443
  fullCanvas.onclick = () => openLightboxImg(img, ev.cameraName, ev.timestamp);
2513
2444
  }
2514
2445
  // Hide crop panel β€” no bounding box available
2515
- const cropPanel = document.getElementById('bcanvas-crop-' + i)?.closest('.img-panel') as HTMLElement;
2446
+ const cropPanel = document.getElementById('bcanvas-crop-' + i)?.closest('.img-panel');
2516
2447
  if (cropPanel) cropPanel.style.display = 'none';
2517
2448
  URL.revokeObjectURL(url);
2518
2449
  };