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 <noreply@anthropic.com>
This commit is contained in:
2026-05-04 11:42:15 +02:00
parent 4e5b631efb
commit 8c5a4c4524
+15 -6
View File
@@ -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