From 8c5a4c4524107fc5c63c3efd9a0f4cdf1c92f46a Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Mon, 4 May 2026 11:42:15 +0200 Subject: [PATCH] fix: marker labels show actual m-number from filename instead of time order Extract the manual export counter (m1, m2, ...) from the output path so timeline markers match their filenames. Falls back to sequential numbering for old-format paths without m-prefix. Co-Authored-By: Claude Opus 4.6 --- core/db.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/core/db.py b/core/db.py index 7313d19..74b6477 100644 --- a/core/db.py +++ b/core/db.py @@ -1,4 +1,5 @@ import os +import re import sqlite3 import threading from datetime import datetime, timezone @@ -7,6 +8,12 @@ from pathlib import Path from .paths import _log +def _extract_m_number(output_path: str) -> int | None: + """Extract the manual export number from a path like clip_001_m3_0.mp4.""" + m = re.search(r'_m(\d+)[_.]', os.path.basename(output_path)) + return int(m.group(1)) if m else None + + class ProcessedDB: _SCHEMA_VERSION = 4 # bump when schema changes @@ -378,12 +385,13 @@ class ProcessedDB: (match, profile), ).fetchall() seen_times: dict[float, tuple[float, int, str, float]] = {} - n = 0 + seq = 0 for t, p, dur, cnt, spr in rows: if t not in seen_times: - n += 1 + seq += 1 + num = _extract_m_number(p) or seq span = (dur or 8.0) + ((cnt or 1) - 1) * (spr or 3.0) - seen_times[t] = (t, n, p, span) + seen_times[t] = (t, num, p, span) return list(seen_times.values()) def get_markers(self, filename: str, profile: str = "default", @@ -424,12 +432,13 @@ class ProcessedDB: result: dict[str, list[tuple[float, int, str, float]]] = {} for folder, folder_rows in by_folder.items(): seen: dict[float, tuple[float, int, str, float]] = {} - n = 0 + seq = 0 for t, p, dur, cnt, spr in folder_rows: if t not in seen: - n += 1 + seq += 1 + num = _extract_m_number(p) or seq span = (dur or 8.0) + ((cnt or 1) - 1) * (spr or 3.0) - seen[t] = (t, n, p, span) + seen[t] = (t, num, p, span) name = os.path.basename(folder) result[name] = list(seen.values()) return result