18 Commits

Author SHA1 Message Date
admin
f39d775199 ui: Done button tries window.close() 2026-04-28 01:11:26 +00:00
admin
2bc9a9c99c feat: CLI progress bar with indicatif
- Progress bar shows scan progress with file count and ETA
- Split scan_images into collect_image_paths + process_image
- Added indicatif crate
2026-04-28 01:10:53 +00:00
admin
5714c999bc feat: loading spinner + serve full-res via endpoint
- Throbber spinner while lightbox image loads
- Full-res served via /image?path= endpoint (no more base64)
- Cleaner review.rs rewrite
2026-04-28 01:08:11 +00:00
admin
623e759e20 refactor: serve full-res images via endpoint instead of base64
- Lightbox now fetches /image?path=<encoded> from review server
- Removes full-res base64 embedding from HTML (much smaller page)
- Thumbnails still embedded as base64 for fast initial load
- Added urlencode/urldecode helpers
- Removed make_fullres_data_uri function
2026-04-28 01:01:48 +00:00
admin
a4d4dcef3d feat: full-resolution lightbox viewer
- Thumbnails remain 300px for fast page load
- Clicking image opens full-res version in lightbox
- Full-res embedded as data-full attribute per image
2026-04-28 00:58:41 +00:00
admin
a01f70018f chore: bump size similarity threshold to 90%
- Tighter filtering reduces false positive similar groups
- Regenerated orig_resized fixture to match new threshold
2026-04-28 00:48:48 +00:00
admin
c6c8f5e2ac ui: larger delete toggle (32px checkbox) 2026-04-28 00:47:36 +00:00
admin
994bf27a79 feat: fullsize lightbox in review UI
- Click any thumbnail to view larger in dark overlay
- Escape or click to dismiss
- Shows file path at bottom of lightbox
- 29 tests passing
2026-04-28 00:46:48 +00:00
admin
c039029790 feat: "Not a dupe" ignore with SQLite persistence
- New ignore_db module with SQLite-backed dismissal storage
- Groups flagged as not-a-dupe are persisted to ~/.config/deduper/ignores.db
- Fingerprint based on sorted SHA256 hashes (content-stable)
- Ignored groups filtered out on subsequent runs
- Review UI: green "Not a dupe" button per group
- Dismissed groups fade out immediately in browser
- DEDUPER_DB_DIR env var to override DB location
- 4 new unit tests for ignore_db
- 29 tests passing
2026-04-28 00:45:52 +00:00
admin
f13b712e99 feat: skip similar pairs where path contains thumbnail/thumbnails
- Filters out thumbnail-vs-original false positives
- Only applies to pairs (group size 2)
- Case-insensitive path check
- New test: similar_pair_with_thumbnail_path_ignored
- 25 tests passing
2026-04-28 00:34:11 +00:00
admin
03728a11e9 feat: filter similar groups by file size ratio (80% default)
- Thumbnails vs originals no longer grouped as similar
- Added file_size to ImageEntry
- find_duplicate_groups now checks min size ratio for similar pairs
- New API: find_duplicate_groups_with_size_ratio for custom ratio
- New test: similar_groups_filtered_by_size_ratio
- 24 tests passing
2026-04-28 00:28:18 +00:00
admin
22b977d9c4 fix: embed base64 thumbnails in review HTML for instant page load
- Eliminates separate image requests (single-threaded bottleneck)
- Pre-builds HTML with base64 data URIs before starting server
- Adds "Keep first, select rest" per-group button
- Sticky action bar, delete counter, progress feedback
- 23 tests passing
2026-04-28 00:14:49 +00:00
admin
bb04871383 feat: add --review flag with browser-based side-by-side image review
- Launches local HTTP server with dark-themed review UI
- Side-by-side image comparison per duplicate group
- Checkbox selection + delete confirmation
- Shows file size and path per image
- Exact/similar badges per group
- Shutdown endpoint for clean exit
- Magic byte format detection (fixes misnamed screenshots)
- 23 tests passing
2026-04-28 00:08:33 +00:00
admin
9dc8a495bb feat: detect image format from magic bytes, not file extension
- Fixes misnamed files (e.g. JPEG saved as .png) being skipped
- Uses image::ImageReader with guessed format from content
- Fixes Android screenshots with wrong extension being skipped
- New test: misnamed_jpeg_as_png_still_scanned
- 22 tests passing
2026-04-27 23:57:20 +00:00
admin
deb5321a8a fix: skip corrupt/unreadable images instead of aborting scan
- scan_images now warns and continues on decode errors
- new test: scan_skips_corrupt_image_files
- 21 tests passing
2026-04-27 23:51:10 +00:00
admin
226a5e7e8f docs: add README with usage instructions, threshold guide, project structure 2026-04-27 23:38:45 +00:00
admin
e1f8201b5c feat: complete image phase - SHA-256 exact + dHash perceptual duplicate detection
- lib.rs: scan_images, compute_dhash, hamming, find_duplicate_groups
- main.rs: CLI with folder arg and optional hamming threshold
- 13 unit tests: hamming, is_image_path, dhash, find_duplicate_groups
- 7 integration tests: real files, empty dir, cropped, non-image exclusion,
  subdirectory recursion, single file, CLI binary output
- All 20 tests passing
2026-04-27 23:33:27 +00:00
admin
71c8df2de5 Initial commit 2026-04-27 22:41:06 +00:00