Repository navigation
RapidReady v0.6.1
RapidReady v0.6.1: Loupe Deletion Hotfix, Non-Blocking macOS Trash, Fail-Safe Error Recovery, and Navigation Ergonomics
RapidReady 0.6.1 is an immediate maintenance and stability release following the major 0.6.0 milestone. It resolves a critical macOS black-screen/freeze issue during Loupe View deletion, introduces lightning-fast non-blocking trash deletion via Cocoa's native NSFileManager, adds a fail-safe React error boundary to eliminate app unmounts, refines keyboard navigation ergonomics by locking folder tree scrolling, and hardens post-import scan and badge state.
Key Achievements
- Fast non-blocking asynchronous trash deletion on macOS via native
NSFileManagerwithout AppleScript Finder freezes. - Comprehensive companion sidecar deletion removing both
.rrdataand.xmpfiles when deleting photos. - Fail-safe React
<AppErrorBoundary>preventing black-screen crashes with instant 1-click diagnostic interface recovery. - Bulletproof Loupe View deletion stability eliminating
TypeError: undefinedpreloader crashes via safe index clamping. - Derived
safeActiveIndexand dynamic forward index shifts preventing selection drift during batch deletion. - Navigation key scroll lock (↑, ↓, ←, →) preventing unintended browser default scrolling on the folder tree.
- File-watcher ghost event suppression for
.rrdata/.xmpsidecars and hidden system file filtering. - Universal Adobe XMP (
.xmp) sidecar engine with non-destructive read-modify-write and 3 configurable sync modes (v0.6.0). - Conflict resolution via filesystem modification timestamps (
mtime) as Single Source of Truth (SSoT) (v0.6.0). - Dual XMP naming convention support: Adobe Standard
STDand darktableDTwith companion JPEG collision protection (v0.6.0). - Native bidirectional compatibility for darktable color labels and hierarchical tags (v0.6.0).
- Configurable external RAW developer launcher (R / Shift+R) supporting RapidRAW, darktable, Lightroom Classic, System Default, or Custom Applications (v0.6.0).
- Zero-I/O lazy on-demand import duplicate detection recognizing pre-existing archive files during SD card scanning (v0.6.0).
- Full rendering and EXIF metadata extraction for reverse-layout Capture One DNGs lacking embedded JPEGs (v0.6.0).
- Archive catalog deletion reconciliation eliminating ghost directories in folder trees upon sync (v0.6.0).
Fast Non-Blocking macOS Trash Deletion & Sidecar Cleanup
- Native
NSFileManagerIntegration (system_cmds.rs): Replaced synchronous AppleScript Finder events (DeleteMethod::Finder) with Cocoa'sNSFileManager.trashItemAtURL(DeleteMethod::NsFileManager). Bypasses/usr/bin/osascriptsub-process overhead, executing batch deletions in milliseconds. - Tokio Thread Protection: All heavy filesystem and SQLite catalog pruning tasks run inside
tauri::async_runtime::spawn_blocking, ensuring Tokio worker threads remain entirely free to serverr-image://tile requests and UI events. - Complete Sidecar Purging: When photos are deleted, RapidReady now automatically locates and removes both
.rrdata(get_sidecar_path) and.xmp(find_existing_xmp_path) companion files from disk.
Fail-Safe React Error Recovery (<AppErrorBoundary>)
- App-Wide Error Protection: Added
<AppErrorBoundary>wrapping<App />inmain.tsxand<LoupeViewer />inLibraryCenter.tsx. - Diagnostic Error Card: If an unhandled DOM or lifecycle error occurs, the window never turns black. Instead, it surfaces a dark diagnostic card with the exact error message and component stack trace.
- One-Click Recovery: Includes an „Oberfläche wiederherstellen“ button that switches view mode safely back to Grid, clears selections, and restores the UI without restarting the application.
Loupe View Deletion Stability & Safe Index Synchronization
- Preloader Null-Check & Clamping: Eliminated
TypeError: undefined is not an object (evaluating 'i[s-1].path')inLoupeViewer.tsxby clamping index lookups (idx0 = Math.min(activeImageIndex, displayedImages.length - 1)) and verifying element existence across all lookahead and buffer lookups. - Derived
safeActiveIndex: Introduced an always-valid derived index inLibraryCenter.tsx(Math.min(Math.max(activeImageIndex, 0), displayedImages.length - 1)) passed synchronously toLibraryGrid,LoupeViewer,FullscreenViewer, and keyboard shortcuts. - Dynamic Forward Shift: Updated
removeImagesinlibraryStore.tsto shiftactiveImageIndexforward by the exact number of deleted preceding images (deletedBeforeActive), allowing the selection safeguard to smoothly track the next surviving photo. - Immediate Grid Fallback: If all images in the active view or last import are deleted, RapidReady immediately returns to the Grid View (
setViewMode('grid')).
Folder Tree & Keyboard Navigation Ergonomics
- Scroll Lock via
e.preventDefault(): Addede.preventDefault()across all navigation shortcut branches (↑, ↓, ←, →, J, K) inuseLibraryShortcuts.ts. Prevents the browser from defaulting to scrolling the folder tree sidebar if it was previously focused. - Calm Tree View: Removed disruptive
scrollIntoViewauto-scrolling fromTreeViewinLibraryLeftSidebar.tsxduring photo navigation, keeping the sidebar tree stable while retaining visual camera indicators and auto-expand branch logic.
File Watcher Ghost Event Suppression & Post-Import Hardening
- Existence Verification: In
archive_cmds.rs, file-watcher events for.rrdataand.xmpverify that both the sidecar (p.exists()) and image file (img_path.exists()) exist before dispatchingsidecar-updatedevents, preventing phantom updates during rapid deletions. - System File Filtering: Watcher ignores
.DS_Storeand AppleDouble._*files, and requires deleted files to lack extensions before recording them asremoved_dirs, preventing non-archive files from triggering directory deletion. - Accurate Source Badges: Only displays the removable media badge (
isRemovableSource) when the import source directory strictly matches a detected drive root. - Post-Import Navigation: Switching to the library or collections after import guarantees
scanState: 'idle'andisLoading: false.
Universal Adobe XMP (.xmp) & RapidRAW (.rrdata) Architecture
- Non-Destructive Read-Modify-Write: Atomically updates ratings, picks, rejects, color labels, tags, GPS coordinates, and orientations via temporary file replacement (
.tmp→ rename). Preserves all foreign XML tags, attributes, and development blocks (such as Lightroomcrs:*parameters, darktable history stacks, and RapidRAWadjustments). - Three Configurable Sidecar Modes:
RapidRAW Native (.rrdata)(Default): Writes native.rrdatawith automatic fallback to.xmpif only an XMP exists.Dual-Sync (.rrdata + .xmp)(Hybrid): Writes changes synchronously to both formats for friction-free switching between RapidRAW, Lightroom, and darktable.Standard XMP (.xmp): Writes directly to.xmp(updating existing.rrdataif present) with read fallback to.rrdata.
- Filesystem
mtimeSSoT Resolution: When both.rrdataand.xmpexist for an image, RapidReady automatically resolves conflicts in favor of the file with the most recent modification timestamp (mtime). - Dual XMP Naming Conventions: Choose between Adobe Standard
STD(<stem>.xmp, e.g.DSC001.xmp) and darktableDT(<file>.<ext>.xmp, e.g.DSC001.ARW.xmp), with automatic per-extension naming whenever companion JPEGs exist. - Inspector Sidecar Badges: Compact header indicators (
[ .rrdata ],[ .xmp ],[ .rrdata · .xmp ]) with interactive tooltips clarifying the authoritative SSoT source based onmtime. - NAS-Safe Bulk Sidecar Sync: On-demand synchronization tool in Settings to reconcile existing archives (
20k+files) between.rrdataand.xmpwith a live progress bar and pause/resume/cancel controls (ScanController).
Configurable External RAW Developer Launcher
- Target Application Selector: Choose between RapidRAW (Default), darktable, Adobe Lightroom Classic, System Default, or a Custom Application (
.appon macOS,.exeon Windows). - Dynamic UI Labels & Shortcuts: Context menus, toolbar popovers, import completion buttons, and shortcut references dynamically display the target app name and key combination (e.g. „In darktable öffnen (Shift+R)“ vs. „In RapidRAW öffnen (R)“).
- Truncate & Layout Protection: 5-column button grid in Settings with hover tooltips and dynamic explanation text. All UI labels and shortcut badges use text truncation and flex protection (
min-w-0 truncate+shrink-0) to ensure long custom application names never obscure shortcut badges. - Dedicated In-App Help Chapter (
HelpRawDevelopers.tsx): Comprehensive guide in the Help modal covering end-to-end integration, recommended sidecar modes per tool, darktablelibrary.dbXMP refresh tips, and guidance on darktable's default 1-star import behavior.
Lazy On-Demand Import Duplicate Detection
- Zero-I/O Archive Duplicate Detection: Photos already existing in a photo archive (e.g. imported prior to RapidReady) are automatically recognized as
already_imported = truewhen scanning an SD card or source directory. - 100% CTSP Compliance: Eliminates background disk hashing during library browsing. During source scanning, pre-filters files by exact byte size and lazily computes 64 KB head hashes only for matching candidates, caching results permanently in
import_index.db. - Special thanks to community contributor @DanieGu for suggesting the import duplicate detection backfill mechanism!
Capture One & Reverse-Layout DNG Support
- Reverse TIFF Layout Support: Added decoding for DNG files where
IFD0sits near the end of the file (e.g. exported from Capture One 23 Windows from Sony ILCE-6700). - ImageIO RAW Fallback: Enabled Apple ImageIO RAW decoding fallback for uncompressed sensor CFA files lacking embedded JPEGs.
- Letterbox Border Filtering: Filtered transparent letterbox borders in
thumb_rsto prevent false 404 preview errors.
Archive Deletion Reconciliation
- Ghost Directory Cleanup: Added
removed_dirstracking toArchiveDeltaResultandreconcile_directory_files. - Automatically identifies and purges externally deleted folders and orphaned photos upon folder refresh or archive delta sync, eliminating ghost folders in the directory tree.
Download & Installation
macOS (Apple Silicon & Intel)
- Download
RapidReady_0.6.1_universal.dmg. - Open the
.dmgand drag RapidReady into your Applications folder. - First Launch Note: If macOS Gatekeeper shows a warning because RapidReady is an open-source project without a paid developer certificate, run this command once in Terminal:
(Or right-click
xattr -cr /Applications/RapidReady.app
RapidReady.appin Applications and select Open).
Windows (x64)
- Download
RapidReady_0.6.1_x64-setup.exe. - Run the installer (no administrator privileges required).
- SmartScreen Note: Click More info and then Run anyway if prompted by Windows SmartScreen.