From ab641847b2c4c44ac12de68673827f210af59838 Mon Sep 17 00:00:00 2001 From: Holden Date: Sat, 13 Jun 2026 15:56:52 +0000 Subject: [PATCH] fix: raise BLUR_THRESHOLD default from 100 to 120 to match Frigate's floor Frigate classifies images with Laplacian variance < 120 as "very blurry" and its own docs recommend avoiding blurry training data. Winnow was accepting images in the 100-120 range that Frigate considers too blurry. Co-Authored-By: Claude Sonnet 4.6 --- .env.example | 2 +- tests/test_config.py | 2 +- winnow/config.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 480fa46..7389783 100644 --- a/.env.example +++ b/.env.example @@ -28,7 +28,7 @@ STRATEGY=auto # ENABLE_FACE_ALIGNMENT=true # Align face before cropping (default: true) # USE_FULL_RESOLUTION=true # Use full-res images vs thumbnails (default: true) # MIN_CONFIDENCE=0.7 # Minimum face detection confidence (default: 0.7) -# BLUR_THRESHOLD=100.0 # Laplacian blur threshold; lower = accept more blur (default: 100.0) +# BLUR_THRESHOLD=120.0 # Laplacian blur threshold; lower = accept more blur (default: 120.0) # MAX_AUTO_IMAGES=80 # Hard cap on auto-diversity selection (default: 80) # ── Caching & Models ────────────────────────────────────────────────────────── diff --git a/tests/test_config.py b/tests/test_config.py index e729763..5d700d4 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -19,7 +19,7 @@ def test_config_loads_defaults(monkeypatch): assert cfg.YEARS_FILTER == 10 assert cfg.MIN_FACE_WIDTH == 90 assert cfg.MIN_FACE_COUNT == 0 - assert cfg.BLUR_THRESHOLD == 100.0 + assert cfg.BLUR_THRESHOLD == 120.0 assert cfg.MIN_CONFIDENCE == 0.7 assert cfg.MAX_AUTO_IMAGES == 80 assert cfg.QUALITY_REPLACEMENT is True diff --git a/winnow/config.py b/winnow/config.py index 30f5776..ed5335f 100644 --- a/winnow/config.py +++ b/winnow/config.py @@ -27,7 +27,7 @@ class _Config: # Quality filtering MIN_FACE_WIDTH: int = 90 - BLUR_THRESHOLD: float = 100.0 + BLUR_THRESHOLD: float = 120.0 MIN_CONFIDENCE: float = 0.7 MAX_AUTO_IMAGES: int = 80 QUALITY_REPLACEMENT: bool = True @@ -58,7 +58,7 @@ class _Config: self.YEARS_FILTER = int(os.getenv("YEARS_FILTER", "10")) self.MIN_FACE_WIDTH = int(os.getenv("MIN_FACE_WIDTH", "90")) self.MIN_FACE_COUNT = int(os.getenv("MIN_FACE_COUNT", "0")) - self.BLUR_THRESHOLD = float(os.getenv("BLUR_THRESHOLD", "100.0")) + self.BLUR_THRESHOLD = float(os.getenv("BLUR_THRESHOLD", "120.0")) self.MIN_CONFIDENCE = float(os.getenv("MIN_CONFIDENCE", "0.7")) self.MAX_AUTO_IMAGES = int(os.getenv("MAX_AUTO_IMAGES", "80")) self.QUALITY_REPLACEMENT = os.getenv("QUALITY_REPLACEMENT", "true").lower() in ("true", "1", "yes")