# ── Required ────────────────────────────────────────────────────────────────── IMMICH_URL=http://192.168.1.10:2283 API_KEY=your-immich-api-key FRIGATE_URL=http://192.168.1.10:5000 # ── Mode & Strategy ─────────────────────────────────────────────────────────── # Auto mode is active by default when no TTY is present (Docker/cron). # Set AUTO_MODE=true to force auto mode even in an interactive terminal. # AUTO_MODE=true # VERBOSE=true # Enable DEBUG-level console output (log file is always DEBUG) # STRATEGY: adaptive = embedding diversity (recommended), standard = 30 imgs, broad = 100 imgs STRATEGY=adaptive # LIMIT=50 # Custom image count; overrides STRATEGY preset # ── People Filtering ────────────────────────────────────────────────────────── # ONLY_PEOPLE=John,Jane # Comma-separated; process only these people # SKIP_PEOPLE=Unknown # Comma-separated; skip these people # MIN_FACE_COUNT=3 # Skip people with fewer than N assets in Immich (default: 3) # YEARS_FILTER=10 # Only include images from the last N years (default: 10) # MERGE_DUPLICATE_PEOPLE=false # Merge duplicate Immich person records permanently (default: false — warn and skip) # ── Image Quality ───────────────────────────────────────────────────────────── # MIN_FACE_WIDTH=90 # Minimum face width in pixels (default: 90, guarantees ≥8,100px crop) # FACE_MARGIN=0.15 # Padding around face crop as fraction (default: 0.15) # 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=120.0 # Laplacian blur threshold; lower = accept more blur (default: 120.0) # MAX_AUTO_IMAGES=20 # Hard cap on auto-diversity selection (default: 20) # QUALITY_REPLACEMENT=true # At cap, replace a weaker tracked image with a better candidate (default: true) # FRIGATE_SCORE_CEILING= # Below-cap novelty gate: unset = dynamic (default), 0 = disabled, e.g. 0.85 = fixed ceiling # ENABLE_FRIGATE_SCORES=true # Call Frigate's recognize endpoint pre-upload to store diversity scores (default: true; adds ~200ms per upload) # ── Caching & Models ────────────────────────────────────────────────────────── # FORCE_CPU=true # Disable GPU, fall back to CPU # ENABLE_CACHE=false # Disable embedding cache (default: true) CACHE_DIR=/app/.if_cache INSIGHTFACE_HOME=/models/.insightface # ── Tracker overrides (one-shot — remove after use) ─────────────────────────── # DRY_RUN=true # Preview selection without downloading/uploading # RETRY_REJECTED=true # Re-attempt previously rejected images # RESET_PERSON=John # Clear uploaded+rejected history for one person (use * for all) # ── Scheduling ──────────────────────────────────────────────────────────────── # CRON_SCHEDULE controls container lifetime: # unset — run once on startup, then exit # empty string — stay alive, run nothing (trigger manually: docker exec -it winnow winnow) # cron expression — run on startup, then on schedule # CRON_SCHEDULE= # Manual mode (keep alive, no auto-run) # CRON_SCHEDULE=0 3 * * 0 # Every Sunday at 3 AM # CRON_SCHEDULE=0 3 1 * * # First of every month