One spare computer — a Mac mini in a cupboard, an old PC under the desk — is enough to run the whole thing: your originals, your edits, previews for every phone in the house. No subscription, no third party, no photograph leaving your walls.
Lumen has no cloud of its own. Devices never talk to each other — they meet at a WebDAV folder, and whoever holds that folder is your cloud. That can be a NAS or a rented server, but the simplest version is a computer you already own.
Turning on Host mode makes the spare machine do both halves at once. It serves the library over your network, and it becomes the preview worker: for every photograph that lands on the server it does the slow work once — the full RAW demosaic — and publishes a smart preview and a thumbnail everything else can use.
That is why phones stay fast. Your phone never demosaics a 60-megapixel raw file; it opens a 2560-pixel preview the mini already made, and asks for a full-resolution render only when you export.
Serving files is nearly free — it is disk and network. The expensive part is decoding raws, and that happens once per photograph, in the background, on a machine nobody is waiting on.
Nothing here is demanding. The machine's one hard requirement is that it is on when you want your photographs.
A Mac mini is the classic choice — silent, small, and it idles at a few watts. An old laptop with the lid shut works, as does a desktop PC. What matters more than speed is the disk: everything you shoot ends up there.
Lumen runs the whole imaging pipeline in the app itself, so there is nothing else to install — no database, no web server, no Docker.
Budget your originals plus about a tenth again for previews, thumbnails and the occasional full-resolution proxy. A 2 TB drive comfortably holds a working library of a hundred thousand raws.
| Piece | What works |
|---|---|
| The computer | Any Mac (Apple silicon or Intel), a 64-bit Windows PC, or a Linux box. Mac mini, an old iMac, a NUC — all fine. Four cores and 8 GB of memory is plenty; more cores just means the first big import finishes sooner. |
| The disk | Internal or external, as long as it stays mounted. Put the library folder on the roomiest one. An SSD makes browsing snappier but a spinning disk is perfectly usable — the previews are what devices actually read. |
| The network | Ethernet if the machine can reach a cable; Wi-Fi otherwise. Reserve its address in your router (a "DHCP reservation") so the URL your devices remember keeps working after a reboot. |
| Lumen | The same app on every machine — there is no separate server build. Install it on the spare computer and on any Mac or PC you edit from. |
| The phone app | Lumen for iOS or Android. It browses, edits, and exports; it needs the server for anything it hasn't cached. |
| Optional: Tailscale | A free account, if you want your library away from home. Covered on page 07 — and it is the only method this guide recommends. |
On the spare machine. Let it finish its first launch; you do not need to import anything here.
Tick Host the photo library from this computer. The rest of the panel appears.
Next to Library folder on this computer, press
Choose… and pick a folder on your biggest disk — say
/Volumes/Photos/Lumen. Everything lives under it.
Any pair you like; this is what your other devices sign in with. Leave the
Port at 8123 unless something else on the machine
already uses it.
macOS asks once whether Lumen may accept incoming network connections. Answer Allow. On Windows, tick Private networks in the firewall prompt.
The panel now reads ✓ Hosting and lists addresses such as
http://192.168.1.42:8123. That address plus the base path
/photos is what every other device needs.
Host mode also repointed this machine's own Server settings at itself
(127.0.0.1) and switched on Preview worker. That is
deliberate: the app that serves the files is also the one that renders previews,
so both jobs run from a single window. If this machine already had a remote
server configured, those settings are replaced — Lumen warns you before it does.
| Setting | Value |
|---|---|
| Address | http://<this machine>:8123 |
| Base path | /photos |
| Sign-in | The username and password you just set |
| Role | File server and preview worker |
| Background sync | Every 5 minutes, plus a live check every few seconds |
A server that sleeps is a library that intermittently does not exist. Lumen has to be running, not merely installed — the previews, the full-resolution renders and the folder tidying all happen inside the app.
Two settings and you can forget the machine exists. Close the lid, put it on a shelf, and let it get on with it.
Open the sync panel on the host. During a cycle it names the file it is working on — HQ: DSC01866.ARW, full-res: DSC01866.ARW — and reports when the last cycle finished.
| Do this |
|---|
| System Settings → Energy Saver. Turn on Prevent automatic sleeping when the display is off, and Wake for network access. On a laptop, keep it plugged in. |
| System Settings → General → Login Items. Add Lumen, so a power cut or an update doesn't quietly end your service. |
| Optional: automatic login (Users & Groups). Without it, the machine reboots to a login window and Lumen never starts. |
| Do this |
|---|
| Settings → System → Power. Set Sleep to Never. Screen off is fine — that is not sleep. |
Startup folder. Press Win+R, run
shell:startup, and drop a shortcut to Lumen inside. |
| Check the disk stays mounted if the library lives on an external drive. |
Leave Preview worker and Tidy server folders on here, and off on your laptop. Two machines racing to render the same previews wastes both.
On your laptop or desktop — the machine you edit from.
Server URL: the address from the host's panel, e.g.
http://192.168.1.42:8123. Username and
Password: what you set in step 4 of page 03.
Library folder on the server: /photos.
A green ✓ means the address, the credentials and the firewall are all in agreement. Fix it here rather than wondering later.
Leave Add to library instantly, download on demand selected. Photos appear as placeholders and fetch themselves when you open them, which keeps a big library instant.
Drag photographs in. They upload in the background; the host picks them up, renders previews, and every other device sees them within seconds.
| Setting | Why |
|---|---|
| Preview worker | Off. That is the host's job — one worker is enough. |
| Tidy server folders | Off. Let the host be the only thing rearranging folders. |
| Live sync | On. It is what makes an edit made on your phone show up here while you are still looking at the photograph. |
| Upload new imports automatically | On, unless you want to hand-pick what reaches the server. |
Originals, previews, thumbnails and your develop settings travel. Ratings, flags, colour labels, collections and presets travel too. Each machine keeps its own catalog and its own cache of downloaded originals — those are rebuildable, and they never leave the machine.
Install Lumen on the phone and open Settings → Your photo server.
The fields are the same four: Server URL,
Username, Password, and
Library folder on the server — /photos.
That is the whole setup. The grid fills with thumbnails the host has already published; opening a photograph pulls its smart preview, and every slider works on that preview at full speed.
Two settings are worth a moment. Keep recent photos offline keeps the last 25, 50 or 100 photos on the phone — previews and, within the cache limit, their full-resolution renders — so a plane or a basement doesn't end your editing. Full-resolution cache limit decides how much room the big files may take; past it, the least recently used are dropped.
There is no switch — exports use the best source in reach. Recent photos and anything you open to develop are fetched at full size ahead of time, so the pixels are usually already on the phone, even offline. When they aren't, the phone asks the host, waits up to 90 seconds, and says so if it has to fall back to the smart preview.
Everything so far works on your own network. To use it from a café, you need a way in — and there is a right answer and a wrong one.
Use Tailscale. Install it on the spare computer and on your phone, sign both into the same account, and they behave as though they were on the same network wherever they are. Nothing is exposed to the internet; the traffic is encrypted between your own devices.
Lumen helps: the Host panel spots Tailscale addresses and labels them. Use that URL in your phone's settings and it works at home and away, with no switching.
The built-in server speaks plain HTTP with a username and password. On your own network that is fine. Opened to the internet it is not: the credentials cross the wire unprotected, and your entire photo library is behind them. Never forward port 8123 on your router.
| Approach | Verdict |
|---|---|
| Tailscale (or WireGuard) |
Recommended. Free for personal use, a five-minute install, no router configuration, nothing published to the world. The address stays the same wherever you are. This is what the Host panel is designed around. |
| Your own reverse proxy with HTTPS |
Fine if you already do this. Terminate TLS at
Caddy, nginx or a Cloudflare Tunnel and point it at
127.0.0.1:8123. Then give devices the https:// address.
Only worth it if you are comfortable maintaining it. |
| Port-forwarding the app directly |
No. Plain HTTP on the open internet means your password is readable by anything between you and home, and the whole library is one guess away. |
| Leaving it LAN-only | Perfectly respectable. Your phone syncs whenever you are home; edits made away are queued on the phone and flush themselves the moment it can see the server again. |
Phones keep working with no server at all: cached previews stay editable, and every rating and slider move you make is saved locally and replayed in order when the connection returns.
Open the library folder and you will find ordinary files in ordinary directories. No database, no opaque bundle. If Lumen vanished tomorrow your photographs would still be there, in dated folders, readable by anything.
Back up the whole folder — Time Machine, a second drive, rsync to a friend's house, whatever you already trust. The originals are the irreplaceable part; previews, thumbnails and proxies rebuild themselves from those.
Each desktop keeps its own catalog database. Settings → Backup
snapshots it along with a portable library.json. It does not contain your
photographs — the server has those — but it is what remembers your collections and
history on that machine.
| Under your folder | What it holds |
|---|---|
originals/ | Your photographs, filed by [project/]YYYY/MM.
The only files you cannot regenerate. |
previews/ | 2560px smart previews. What phones and other Macs actually edit against. |
thumbs/ | 320px grid thumbnails — how a phone browses ten thousand photographs without downloading any of them. |
sidecars/ | One small JSON per photograph: develop settings, rating, flag, colour label. Your edits. |
proxies/ | Full-resolution renders made on request for phone exports. Deleted automatically after seven days. |
requests/ | A phone's note to the host saying "I need that one full size". Removed as soon as it is answered. |
presets.jsoncollections.json | Presets, collections and smart collections, shared across every device. |
manifest.json | A published index so a phone can refresh its whole library in a couple of requests instead of walking the tree. |
Updates matter most on the host. It renders every preview and every full-resolution export the rest of your devices depend on, so an out-of-date host holds all of them back. Lumen does not update itself — install new builds by hand, and do the host at the same time as your phones, not months later.
Beyond that there is little to do. Downloaded originals are capped (20 GB by default, and never within 5 GB of filling the disk), proxies expire after a week, and the host tidies the folder structure as photographs arrive.
Open the host's sync panel. A recent "last cycle" time and an empty error list means every device downstream of it is being served.
| If this happens | Try this |
|---|---|
| "Port 8123 is already in use" | Something else has it. Change the port in the Host tab, save, and update the URL on your other devices. |
| Devices cannot connect | Check they are on the same network; that the firewall prompt was allowed; and that the host's address hasn't changed. Reserve its IP in your router to stop that recurring. |
| Thumbnails stay blank on the phone |
The host is asleep or Lumen is not running on it. Wake it, open Lumen, and the backlog clears on the next cycle. |
| A full-resolution export quietly used the preview |
Nothing was cached and nothing answered within 90 seconds. Confirm the host is awake and running a current version of Lumen, then export again — recent photos are fetched ahead, older ones need the worker once. |
| You moved the library to a new disk |
Point the Host tab at the new folder and save. Keep the same
/photos base path and no device notices. |
| You want a second editing machine |
Install Lumen, fill in the same four Server fields, leave preview worker off. It adopts the existing library. |
One spare computer, one folder, one username and password. Everything else — the previews, the syncing, the tidying — happens quietly on a machine you own, in a folder you can open, back up, and take with you.
Keep the host awake and running Lumen. It is the whole service.
Back up the library folder. The originals are the part no software can rebuild.
Do not put it on the open internet. Tailscale costs nothing and asks less of you than port-forwarding does.