The union-find algorithm caused transitivity chains: A≈B and B≈C merged
A, B, C into one group even if A and C were completely different photos,
producing the 5000+ "duplicate" groups that were wrong.
- getGroups now returns individual pairs (2 photos each) — what was
actually flagged by the pHash comparison, no chaining
- scan() clears all existing pairs on each run so the result exactly
matches the current threshold (no stale loose pairs from prior scans)
- Default dedupe_threshold lowered from 10 → 5 (fewer false positives;
distance ≤5 means the images are genuinely near-identical)
Run "Scan library" once to replace the old results with clean pairs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>