LightPhotos

LightPhotos and RapidRAW on the Mac

The same test as LightPhotos and LightCraft on the Mac, with another Rust app. RapidRAW is a GPU RAW editor built on Tauri. It decodes every RAW with rawler, the library that LightPhotos uses everywhere except the Mac.

The main difference: who decodes the pixels

Both apps are Rust programs that draw the photo with wgpu on Metal, and both read your folders in place. LightPhotos draws its whole window with its own GPU code. RapidRAW draws its panels with React in a system web view and puts the photo in it from Rust.

WHERE THE PIXELS COME FROM RAW file Screen Apple RAW engine part of macOS rawler + GPU pipeline inside the app

LightPhotos: Apple decodes every JPEG, HEIC and RAW file. The decoders add 0 MB to the 17.6 MB app.

Select an app. RapidRAW can also use Apple's RAW engine, but only when you turn the option on, and only with decoder version 9. My Mac offered versions 6, 7 and 8, so RapidRAW used rawler for every file in this test.

RapidRAW is a full editor. It has AI masks for the subject, sky and depth, AI denoise and inpainting, panorama, HDR and focus-stack merges, negative conversion, lens corrections and tethering. LightPhotos has a smaller job: you go through a folder fast, keep the good photos and make quick edits. Remember this for each number below.

LightPhotos RapidRAW
RAW decoding on the Mac CoreImage's CIRAWFilter, in 16-bit floats. ImageIO for thumbnails. rawler (its own fork), plus colour noise reduction and sharpening. Apple RAW 9 is an option.
Window Native, drawn with wgpu Tauri: React in a WebKit view, photo drawn with wgpu
Your photos Folders, read in place. Each folder keeps its own .lightphotos folder. Folders, read in place. Each photo that you edit gets a .rrdata file beside it.
AI features None Masks, denoise, inpainting and tagging on ONNX Runtime. Models download on first use.
Platforms Mac, Windows, Linux, browser Mac, Windows, Linux, Android
License MIT or Apache-2.0 AGPL-3.0

Two kinds of sidecar

Neither app has a central catalog. You open a folder, and the app reads the files where they are. The difference is where the edits go. RapidRAW writes one small JSON file next to each photo that you edit, such as DSC01831.ARW.rrdata, and it keeps its thumbnails in ~/Library/Caches. LightPhotos puts its ratings, edits and thumbnails in one .lightphotos folder inside the folder. In both apps, the edits move with the photos when you move the folder in Finder.

How I measured

I built both apps from source with their own release scripts: LightPhotos 0.1.31 with its new 16-bit float RAW decode (commit 55d74b9) and RapidRAW 1.6.5. I ran them on an M4 Mac mini with 16 GB of memory and macOS 26.5. For each run, I copied the same 18 RAW files to a new folder, so no cache had seen them. They come from 13 cameras in 10 formats, from 5 to 45 megapixels. The test opens a 14-megapixel Sony A7 IV file, then goes through another A7 IV file, a Canon 5D Mark III CR2, two Canon R5 Mark II CR3s, three DNGs (Adobe, iPhone ProRAW and Ricoh GR III) and a Nikon Z f NEF. Each app started with a new home folder and default settings. The window was 3840 × 2000 px on a 4K display.

The script is the same tools/desktop-bench as last time. It starts the app, double-clicks the first photo and pushes the right arrow eight times. It captures the window every 150 ms. It records the first change, and the time when nothing changed for 3 s. Each number is the median of five runs. One capture takes about 0.26 to 0.29 s, so no result can be less than about 0.4 s.

I had to make two changes for RapidRAW. First, RapidRAW opens on a welcome screen. The script clicks Continue Session as soon as that screen is still, and the time to the grid includes both parts. Second, RapidRAW's window is a web view, and macOS runs a web view in three separate WebKit processes. The memory number adds those three to the app.

The numbers

LightPhotos RapidRAW
Download (.dmg) 8.4 MB 32.7 MB
App, installed 17.6 MB 84.7 MB
Launch to window 0.35 s 0.71 s
Launch to finished grid, 18 RAWs 1.22 s 4.91 s, with the welcome screen
Open the first photo: first change / screen settled 0.58 / 1.05 s 0.63 / 1.64 s
Next photo, each (median of 8): first change / screen settled 0.45 / 0.45 s 0.47 / 2.82 s
Memory afterwards 2.2 GB 6.1 GB

The times agreed to within a few percent, with two exceptions. RapidRAW took 0.68 to 1.03 s to show its window. One LightPhotos grid took 1.43 s. Memory varied more: LightPhotos used 2.1 to 2.2 GB, and RapidRAW used 5.8 to 6.5 GB.

Explore the timing

What the measurement sees

Next photo

LightPhotos prepared the next photo before the key press, so it shows at once. RapidRAW shows its 1280 px preview at once too, then decodes the full RAW. The window settles at 2.82 s.

LightPhotosWhole screen settled
First visible change
0.45 s
Whole screen settled
0.45 s
RapidRAWWhole screen settled
First visible change
0.47 s
Whole screen settled
2.82 s

Open first photo

Nothing prepared the first photo in either app. Both show a small preview first and then the developed RAW.

LightPhotosWhole screen settled
First visible change
0.58 s
Whole screen settled
1.05 s
RapidRAWWhole screen settled
First visible change
0.63 s
Whole screen settled
1.64 s

Fixed 0–3 s scale. Medians of five runs, in a 3840 × 2000 window. The capture method cannot measure less than about 0.4 s. These times are for the whole window, not for a sharp photo.

Why the next photo is slower in RapidRAW

When you push the arrow key, RapidRAW reacts at once. It shows the 1280 px thumbnail that it made for the grid. Then it reads the RAW file and decodes every pixel with rawler. It removes colour noise and sharpens, renders the photo on the GPU and draws the histogram. The window settles about 2.4 s after the first change. RapidRAW does not start this work until you arrive on the photo.

LightPhotos prepares the photos on each side of the current photo while you look at it. When you push the arrow key, the next photo is already developed. Select an app and push Next photo.

PHOTOS IN THE FOLDER on screen Ready Developing Not prepared

Photo 1 is open. Nothing prepared it, so the app develops it now.

The develop times are drawn at 0.7 s for LightPhotos and 2.4 s for RapidRAW. RapidRAW keeps the last five photos that it decoded, so going back is fast. Going forward through a shoot, each photo is new.

Prefetch has a cost: CPU time and battery for photos that you possibly do not look at. RapidRAW's choice also makes sense for an editor. You often stay on one photo for minutes, and a full-size decode is what its masks and AI tools need anyway.

The first photo is closer. Nothing prepared it in either app. Both show a small preview after about 0.6 s. LightPhotos then develops the RAW at the window size with CIRAWFilter and settles at 1.05 s. RapidRAW decodes the full RAW and settles at 1.64 s.

Each next photo takes RapidRAW longer than the first one did. Size explains part of that: the two 45-megapixel Canon R5 Mark II files took about 3.5 s. But the 12-megapixel iPhone file still took about 2.6 s, so I do not know the rest of the reason yet.

Why memory is three times higher

Both apps keep a RAW in floating point, with four numbers for each pixel. LightPhotos uses 16-bit half floats at the window size, up to 4096 px, and develops the full size only when you zoom in. RapidRAW uses 32-bit floats for the whole decoded RAW at full size, and it keeps the last five that it decoded.

MEMORY FOR ONE PHOTO = PIXELS × BYTES PER PIXEL 384 MB 24.0 million pixels (6000 × 4000) 16 bytes

RapidRAW: 32-bit floating-point RGBA at full size. 6000 × 4000 × 16 bytes ≈ 384 MB a photo, up to 1.9 GB for five.

Select an app. The dashed outline is the other app. Sizes are for a 24-megapixel photo, such as the Ricoh GR III file, at each app's largest size. The GPU copies, the web view and the thumbnails come on top.

With the full photo already decoded, RapidRAW can zoom to 100%, run an AI mask or recover a highlight without another decode. On my 16 GB Mac, 6.1 GB is a large part of the memory, and a camera with more megapixels needs more. One 45-megapixel R5 Mark II photo is about 716 MB in RapidRAW.

The app size has the same cause. RapidRAW's own program is 42 MB, and it includes ONNX Runtime (33 MB) for its AI tools and the lensfun lens database (5 MB). LightPhotos uses the decoders in macOS and has no AI models.

What each choice costs

Wrapping up

These two apps show the same folder in two different ways. LightPhotos is built to go through a shoot. It is smaller, starts faster, fills its grid faster and has the next photo ready before you ask. RapidRAW is built to edit one photo deeply. It keeps the full RAW at full size in 32-bit floats and has far more tools to use on it. If you cull first and edit later, you can use both on the same folder. Neither app needs to import it.

The timing script and the raw results are in tools/desktop-bench/. RapidRAW's decode path is in src-tauri/src/image_loader.rs and raw_processing.rs, at commit 259d625e.