Fixed
- Crash:
duplicate_match_type column missing from photos table
New
- Real-time folder tree updates during NAS discovery
Fixed
- Post-reset missing tables and stale photo ID cache
- Prevented vnode-unlinked-while-in-use crash during library reset
- Corrected INSERT placeholder count in
updateDiscoveryTree
- Per-session discovery debounce for concurrent NAS imports
- SMB/NFS/AFP mounts now classified as
.network in driveInfo
- DNG thumbnail
ImageIO blocking cooperative pool, starving actor hops
- Resume button silently dropping when thumbnail pool is saturated
- Activity count frozen at 1,000 during NAS discovery
- Resume buttons not firing — added Resume All button
- Activity sidebar frozen at 1,000 on resumed imports
Fixed
- NAS/SMB import stalling at exactly 5,000 files (QNAP
FIND_FIRST2 session limit) — switched to per-directory enumeration via FileManager.contentsOfDirectory for network volumes
- Activity sidebar count frozen at 1,000 during NAS discovery — bypassed UI throttle for discovery-phase progress callbacks
- Duplicate import sessions launching on wake-from-sleep or rapid taps via
activeSessionIDs guard
- Stale sessions showing 0/N in Activity view after re-discovery via
clearSessionFiles before retry
- Resumable session banner showing active (in-flight) sessions as resumable
- Non-blocking NAS volume detection preventing actor stall on stale SMB mounts
- Import completion popup appearing for 0/0/0 results on empty or inaccessible shares
Improvements
- Stall-guard watchdog: detects discovery stuck for >2 min and retries with exponential backoff
- Wake-from-sleep handler: auto-resumes network-volume imports after Mac wakes
- Refactored
discoveryInProgress from Bool to counter to support multiple concurrent shares
Improvements
- MultiSourcePicker functionality enhancements
Improvements
- Release Manager version reading and build tooling fixes
Improvements
- Background task and file handling performance improvements
- Thumbnail management and licensing enhancements
- Build and release process improvements
Fixed
- Thumbnail startup race condition with deterministic cache gate
- Empty trash SQLite error 0 and usage statistics in Settings
Improvements
- SigLIP 2 CoreML integration, mmap crash fix, Ultra/Extreme idle performance
- NIMA quality scoring model integration, ExternalEditors fix, UI rescore improvements
- Performance overhaul — duplicate detection, sidebar counts, actor scheduling
- Security-scoped bookmark management and thumbnail service enhancements
- Crash reporting dialog and telemetry system
- Legal flow, debug logger, Smart Enhance fixes
- AI action management and notification handling
- Folder management and thumbnail handling improvements
New
- Smart Albums — save any filter combination as a persistent named collection
- Multi-source concurrent import — run up to 4 simultaneous import sessions
- Import Mode setting (Conservative / Balanced / Aggressive) for CPU throttling
- Per-session discovery debounce prevents duplicate file entries on rapid reimport
Fixed
- Sidebar photo count not updating during NAS discovery on large libraries
- Race condition in thumbnail gate causing blank thumbnails on first launch
Improvements
- Refactored filter pipeline for 3× faster filter application on 500k+ libraries
New
- NAS wake-from-sleep handler — auto-resumes interrupted SMB imports after Mac wake
- Stall-guard watchdog detects and retries discovery sessions stuck for >2 minutes
- SMB bookmark persistence — NAS mounts survive app restart without re-prompting
- Face recognition powered by on-device Vision framework — group and name people in your library
Fixed
- SMB session timing out on QNAP NAS after ~5,000 files in a single enumeration — switched to per-directory enumeration strategy
getfsstat blocking actor thread on stale NAS mounts — migrated to MNT_NOWAIT non-blocking variant
Improvements
- Exponential backoff retry (30s → 60s → 120s → 5min) for network volume reconnection
New
- Local AI scene and object tagging powered by SigLIP 2 Core ML model
- NIMA quality scoring model — automatically ranks photos by technical quality
- NSFW content detection — optional, fully on-device, toggle in Settings > AI Features
- AI tagging queue with background processing and progress indicator in sidebar
- Filter by AI tag in smart filter bar
Fixed
- Core ML model loading race on launch causing crash on first AI tag request
- mmap crash in SigLIP model file when library cache was cleared while model was loaded
Improvements
- All AI inference runs on Apple Neural Engine when available; falls back to CPU
New
- Full NAS support — import from SMB, NFS, and AFP network shares
- NAS speed profile auto-detection using I/O latency and throughput sampling
- Pre-flight SMB access check with user-friendly "Reconnect" banner on stale bookmarks
- Synology, QNAP, and Asustor tested and confirmed compatible
Fixed
statfs() blocking the main actor on disconnected SMB mounts — app would freeze for 30+ seconds
- NFS mounts incorrectly classified as local storage
Improvements
- NAS imports now show estimated time remaining based on discovery count and measured throughput
New
- Duplicate detection — SHA-256 content hashing flags exact duplicates regardless of filename or location
- Visual duplicate comparison view with side-by-side image display
- Batch duplicate resolution — keep highest resolution, keep oldest, or keep newest
- Geolocation reverse-geocoding — shows city/country name from GPS EXIF data
Fixed
- Hash worker starvation causing import to hang on large RAW files (>50MB)
- HEIC files with rotation flags displaying sideways in duplicate comparison view
Improvements
- Hash computation moved to concurrent background queue; no longer blocks EXIF extraction pipeline
New
- RAW file support — CR2, CR3, ARW, NEF, DNG, RAF, ORF, RW2, PEF, SRW
- RAW thumbnail generation via ImageIO — no external tool required
- Per-format import concurrency tuning (DNG and CR3 get lower concurrency due to higher decode cost)
- Smart filter bar — filter by camera model, lens, focal length, ISO, aperture, date range
Fixed
- DNG thumbnail
ImageIO blocking the main thread, causing UI freeze during large imports
- Orientation flag not applied to RAW thumbnails — photos displayed rotated
Improvements
ImageIO thumbnail generation now runs off-actor in a cooperative thread pool
New
- Timeline view — browse photos organized by year → month → day using EXIF capture date
- Star ratings (1–5 stars) and color labels — stored in FocusSort database, don't modify original files
- Thumbnail grid with variable zoom (3× to 8× columns)
- Sidebar source tree showing folder hierarchy with photo counts
- Resume interrupted imports — session state persisted in SQLite, resumes from exact position on next launch
Fixed
- EXIF datetime parsing failing for photos with non-standard timezone offset formats
- Thumbnail cache invalidation not triggering when files were modified externally
Improvements
- Thumbnail generation uses
CGImageSource with kCGImageSourceShouldCacheImmediately: false to reduce peak memory usage by 60%
New
- EXIF metadata extraction — camera, lens, focal length, ISO, shutter speed, aperture, GPS, capture date, orientation
- SQLite database for photo metadata storage — non-destructive, original files never modified
- Import progress view with per-file status, files/second throughput, and ETA
- Security-scoped bookmark management for accessing folders outside sandbox
- Full Disk Access detection and permission request flow
Fixed
- App crashing on launch when Photos.app library was set as source (incompatible access pattern)
- EXIF extraction hanging on corrupt JPEG files with truncated APP1 segments
Improvements
- Parallel EXIF extraction pipeline — 8 concurrent workers on Apple Silicon for maximum throughput
New
- Initial private alpha release
- Core photo discovery: recursive folder enumeration using
FileManager.contentsOfDirectory
- Basic JPEG + HEIF import with file count and progress tracking
- Simple grid view with system thumbnail provider
- Settings: dark mode only, import source path configuration
- SwiftUI-based, macOS 13 Ventura minimum
- SQLite database schema v1 — photos table with path, filename, file size, import date