From 19f1a5e03befc9f359e7f5fcbfc0021c42f0c5ca Mon Sep 17 00:00:00 2001 From: Holden Date: Sun, 14 Jun 2026 01:46:28 +0000 Subject: [PATCH] Add RESET_PERSON=* to reset all tracked people; fix near-duplicate dedup - RESET_PERSON=* resets every tracked person (deletes their Frigate files and clears the tracker). Any other value resets that specific person by name, including someone literally named 'all'. - Near-duplicate removal pass added before diversity clustering: greedily drops candidates within 0.10 cosine distance of a higher-quality image, eliminating burst-shot duplicates that FPS would otherwise pass through. --- winnow/cli.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/winnow/cli.py b/winnow/cli.py index d7f1e5b..e2720e1 100644 --- a/winnow/cli.py +++ b/winnow/cli.py @@ -156,11 +156,22 @@ def main() -> None: rprint(f"Server: [dim]{Config.IMMICH_URL}[/dim]") rprint(f"Output: [dim]{Config.OUTPUT_DIR}[/dim]") - # Handle RESET_PERSON before anything else + # Handle RESET_PERSON before anything else. + # RESET_PERSON=* resets every tracked person; any other value resets + # that specific person by name. reset_person_name = os.environ.get("RESET_PERSON", "").strip() if reset_person_name: - reset_person(reset_person_name) - rprint(f"[bold yellow]Reset tracking data for: {reset_person_name}[/bold yellow]") + if reset_person_name == "*": + names = list(get_person_summary().keys()) + if names: + for name in names: + reset_person(name) + rprint(f"[bold yellow]Reset tracking data for all {len(names)} people.[/bold yellow]") + else: + rprint("[dim]No tracking data to reset.[/dim]") + else: + reset_person(reset_person_name) + rprint(f"[bold yellow]Reset tracking data for: {reset_person_name}[/bold yellow]") # Show per-person tracker summary if data exists summary = get_person_summary()