feat: per-class autolabel params + frame-scoped class clear (REQ-180, REQ-181)

- REQ-181: class_params {name: {threshold?, iou_threshold?, min_box_frac?}}
  on /preview and /autolabel, per-class override table in both modals;
  empty overrides take the unchanged global path
- REQ-180: x button on each review sidebar class row clears that class on
  the current frame only via bulk-delete, no confirmation
- includes REQ-178 empty date-folder cycle fix (archive_index.py)
This commit is contained in:
asus committed 2026-10-01 17:01:54 +07:00
1 parent c244ab9795
commit 1a99f2ffe4
16 files changed
+372 -45

No files matched your search

+8 -1
View File
@@ -167,7 +167,14 @@ def cycles(project_id: int) -> List[dict]:
buckets: dict = {}
for day in library.list_dates(project["video_root"]):
for name in _video_names(project, day["date"]):
names = _video_names(project, day["date"])
if not names:
# Folder still holds no recording: it must still appear in the
# list, or a folder just created with "Folder baru" is invisible.
buckets.setdefault(day["date"], {"cycle": day["date"], "video_count": 0,
"flagged": 0, "first_start": None})
continue
for name in names:
rel = f"{day['date']}/{name}"
timing = _sidecar(project, rel) or known.get(rel) or {}
cycle = timing.get("working_day") or day["date"]