macOS 14+ · Native · Non-destructive

Tens of thousands
of photos. One fast app.

Local · NAS · Apple Photos in one fast, native app.
Proven daily on a 67,000-photo library.

Download

Apple Silicon · Intel · Open Source (MIT)

Lumen grid — large photo library

Why Lumen

Photos.app can't see your NAS.
Most viewers choke at 60,000 photos.

Built for large libraries

Tested daily against a 67,000-photo NAS library. Folders open in 1 ms on average, and launch shows your photos immediately — no loading screen.

🗂️

All sources, one place

Local folders, NAS, and Apple Photos (iCloud) side-by-side in a single window. The gap Photos.app and generic viewers leave — filled.

🛡️

Non-destructive by default

Crop · resize · rotate · merge · watermark — all saved as new files, originals untouched (overwrite is opt-in). Favorites, tags, and ratings are stored separately from the source files.

Features

Everything you need to view, find,
organize, and refine

Local · NAS · Apple Photos in one sidebar

All your scattered photos in one place. iCloud-only photos download on demand; GPS photos cluster on a map by zoom level.

  • Local folders · NAS · Apple Photos (iCloud) · iCloud Drive
  • Map pin clustering — zoom in/out to expand or collapse thousands of pins
  • Live folder watching (FSEvents) · incremental cache · on-demand download
Lumen map — clustering + Apple Photos integration

Immersive viewer · Space-key quick cull

Go full-screen and stay there. The fastest culling flow for photographers:

  • Space = favorite + advance — cull thousands of shots without lifting a hand
  • Keyboard culling: star ratings 1–5 · favorite (F) · reject (X) — works in grid and viewer. Hide rejected photos to see only the keepers.
  • Thumbnail strip · EXIF overlay · 2-up compare · slideshow · zoom & pan
Lumen viewer — Space-key quick cull
✂️

Lightweight non-destructive editing

Crop (free or locked ratio) · rotate / flip · straighten · resize / square canvas (letterbox fill). Large edit canvas with zoom and precision crop, output-size preview. Always a new file.

🧩

Merge & watermark

Combine multiple photos horizontally, vertically, or in a grid (drag to reorder, set rows). Text or logo watermarks (position · color · opacity) — in the editor, merge tool, and batch export.

🚀

Batch processing

Resize, apply canvas rules, and stamp watermarks across many photos at once and export to a folder. Originals stay untouched.

🏷️

Non-destructive organization

Albums · tags · star ratings · color labels · reject flag · smart collections (favorites, recent, today, duplicates). Originals never modified.

🗑️

Safe delete + undo

Even on a NAS volume with no Trash, deletes move to a hidden .LumenTrash kept for 30 days instead of vanishing. Every delete gets a 10-second Undo that restores the files, ratings, and album memberships.

🔍

Search & filter

Search by filename, tag, or camera model. Filter by star rating, label, location, camera (e.g. SONY), and hide-rejected toggle.

📤

Share & export

System share sheet, export original / resized / zip, bulk rename, set as desktop wallpaper.

Performance

Designed for large libraries

Every folder opens instantly, and your photos are on screen the moment the app is. The table below is all measured, not promised.

67K
photos in daily real-world use
1ms
average folder open (644 folders)
0
loading screens — launch straight into the grid
2-tier
memory + disk cache (survives relaunch)

Measured on a real library — 67,676 photos · 638 folders · Synology NAS (SMB) · Apple Silicon. These are not synthetic benchmarks: every number comes from automated runs against this library.

TestResult
Launch → grid fully populated with thumbnails1–2 frames after the window appears (no loading screen)
Library cache decode (67,676 photos)~100 ms
Opening folders — all 644 folders & albums in sequencemean 1 ms · p95 3 ms · max 9 ms
First folder click right after launch~4 ms
Click a photo → info panel update~3 ms
Select All (⌘A, 67,676 photos)~0.2 s
Search — filter + sort across 67k0 main-thread blocking (runs in background)
Bulk add to album (10k into a 20k album)~0.2 s
Bulk remove from album (10k of 20k)17 ms
Bulk favorite/rate (20k photos)~0.4 s (single transaction)
Thumbnail-size slider · window resizeno stalls (GPU-scaled)
App size10 MB installed · 3.5 MB download
Memory (browsing the 67k library)~240 MB · ~380 MB after full-size viewing (bounded by cache limits)
CPU0.0% idle · 16–27% while continuously scrolling a 58k folder
Heap analysis (leaks/heap)0 memory leaks in app code

Method: 120 Hz main-thread hitch monitor + frame-by-frame screen capture + profiler sampling, as of v0.4.0. The whole process is documented in the release notes.

Memoized lists · folder index · debounced navigation · background thumbnail warming · lazy EXIF indexing · progressive image loading

Reliability

Built so you never lose a photo

A tool you run on a huge library every day owes you one promise first: your photos and your organizing work are safe.

🛡️

Mistakes are reversible

Every delete gets a 10-second Undo. On a NAS or any volume with no Trash, files move to .LumenTrash for 30 days instead of vanishing. No feature ever modifies your original files.

🧱

It doesn't fall over

Zero memory leaks · cache limits prevent OOM. Zero-byte and corrupt files, symlink loops, unicode and very long filenames are all handled safely.

Tested, not promised

111 automated tests gate every change, and it runs daily on a real 67k-photo NAS library. If a metadata write fails, it tells you instead of silently dropping it.

Privacy

Your photos never leave your machine

Lumen makes exactly two kinds of network connections — a once-a-day update check against GitHub, and the NAS/iCloud content you open yourself. That's it.

🚫

No tracking

Zero analytics, telemetry, accounts, or ads. Zero photos uploaded. There is no server.

💾

Your data stays on your Mac

Ratings, tags, and albums live in a single local SQLite file. Your original photo files are never modified.

🛟

Crash reports stay local too

If it ever crashes, only the version and stack trace are saved to your Mac; whether to send it as a GitHub issue is your choice on the next launch. Nothing is sent automatically — no file paths or photo data are included.

🔍

Verifiable, not promised

It's open source (MIT) — every claim above is checkable in the code.

Download

Get started in seconds

Install via Homebrew · macOS 14 (Sonoma) or later · Free

brew tap rescenedev/tap brew trust --cask rescenedev/tap/lumen-photos brew install --cask lumen-photos
This build is not yet notarized, so Gatekeeper may block the first launch. Remove the quarantine flag with the command below (recommended), or allow the app under System Settings → Privacy & Security ("Open Anyway"):
xattr -dr com.apple.quarantine "/Applications/Lumen.app"
Build from source: git clone the repo, then run ./Scripts/make_app.sh — no Xcode needed, just Command Line Tools.