← Home Numa Sheet 01 of 06 Scale 1:1 Case file 01
Case file 01 Numa
A Numa · September 2026 — now

I wanted a photo editor, so I built one

How do you keep a deep tool calm? A RAW editor for Linux, iPhone, iPad and Mac, plus a small server for your own NAS.

Particulars
Role
Product designer
Team
Claude Code and myself
Date
2026 — now
Reading time
5 minutes

Context and starting point

Numa started as a side project. I switched to a different operating system and couldn’t find a photo editor I liked, so I figured I’d build one myself. I was the product designer, Claude Code wrote the code.

Most photo editors are either simple and a bit shallow, or deep with dozens of sliders on screen at once, most of them doing nothing for the photo you’re looking at. Lightroom is the second kind, and it comes with a subscription and an account. I wanted the depth without all the noise, and without my photos going anywhere.

I gave myself one more rule: it has to feel good on a laptop that’s a few years old. Besides keeping it simple, I wanted as many people as possible to be able to use it. That settled a few arguments that would otherwise just have been taste.

View A § Context and starting point

Numa on Linux

The editor and the library on Linux. In the editor the Light panel is open, Exposure on top, and the sliders I’ve moved keep their track while the rest stay quiet. Below, a library sorted by sharpness.

Numa on Linux: a photograph of a snowy mountain and lake with the Light panel beside it
Numa on Linux: a library sorted by sharpness, as a grid of photographs with star ratings
01

Nothing folds, nothing is removed

The first version of the editing panel was loud. Dozens of full sliders were visible and most of them weren’t being used. The usual answers are to hide the pro controls behind a disclosure, or to add a Simple/Pro switch. I didn’t like either. A disclosure costs a click on every visit, and a switch is the same thing with a different name, plus people have to decide what kind of user they are before they’ve touched anything.

So nothing folds. A slider at rest shows a name, a value and a thin line. Hover it and you get the track and the handle. Once you’ve moved it, it keeps them, in the accent colour. Nothing changes size between those states, so moving your hand over the panel doesn’t shift anything. One control leads each section, like Exposure on Light, and that’s all the guidance a beginner gets. The eye starts there.

Same thing with colour. A rainbow on a control that does nothing was the loudest thing on the page, so the grading wheel stays grey until saturation is above zero. Colour is only there where it tells you something.

02

The same Numa on every screen

I wanted one Numa that fits its screen, not three apps that happen to share a name. The wheel, the curve and the sliders work the same everywhere. Only the layout changes: tabs under your thumb on the iPhone, two-handed controls on the iPad, a side panel and a filmstrip on a desktop.

Halfway through I went through all six clients (the apps and the browser) and wrote down the patterns they should share. A dialog’s main action sits at the end of the header bar with Cancel at the start. Red is only for things you can’t undo, so Move to Trash is red but Remove a Library isn’t. One word per idea. It’s boring work, but it’s what makes it feel like one product.

View B § The same Numa on every screen

iPad and iPhone

Same controls, different layout. On the iPad both thumbs rest on the Light panel, one picks the slider and the other moves it. On the iPhone the tabs are under your thumb, with the camera profile and tone mapping in view.

Numa on iPad: the Light panel beside a photograph, with the tone curve and a filmstrip
Numa on iPhone: the Looks tab under a photograph
View C § The same Numa on every screen

One wheel

Colour grading on iPad and iPhone. Shadows, mids and highlights on one wheel, with the same hue, saturation and luminance rows under it on both.

Numa on iPad: the colour grading wheel beside a photograph
Numa on iPhone: the colour grading wheel above the Hue and Saturation sliders
03

Measure, then let the person choose

Nobody enjoys culling a shoot. Numa measures the sharpness of every frame, groups the bursts and suggests the best one. It also checks for clipped highlights and closed eyes. But it only suggests. Keeping or dropping a frame is still up to you, a swipe or a keypress. I didn’t want a tool that makes the call and then has to be argued with.

Masks work the same way. Numa finds the sky, the subject, water, greenery and buildings on your device, and every mask gets its own light, colour, curve and grade. You can still draw your own with a gradient or a brush, or fix what it found.

Privacy follows from the same idea. There’s no account, no subscription and no upload. Numa opens photos where they are, on a card, a NAS or a synced folder, and never moves or changes them. Masks, faces and measurements are worked out on your device. It only sends crash reports or usage data if you say yes, it asks once, and you can read what would be sent before it goes. Never a photo, a path, a file name or a place.

View D § Measure, then let the person choose

Culling by measuring

One burst of eight frames on numa.photo, from a CC0 photo by Dominik Schröder. Numa scores the sharpness of each frame and marks frame 4 as the best, you still choose. Below, Tidy Up on Numa Home, which sets aside photos it measures as out of focus and leaves the decision to you.

A burst of eight frames of a runner in snow, each with its sharpness score; frame 4 scores 100
Numa Home: Tidy Up showing two photographs marked out of focus, with Move 2 to Trash and Keep All
View E § Measure, then let the person choose

Masks found on the device

Top, a Sky mask on Linux. Numa found it on the device and it has its own light, colour, curve and grade in the panel on the right. Below, a linear mask on the iPad pulling the sky towards pink.

Numa on Linux: a Sky mask tinting the sky pink above a snowy mountain and lake
Numa on iPad: a linear mask tinting the sky pink above a mountain lake
04

Numa Home

I wanted all the photos of a household in one place. Most of the options for that need four containers: a server, a machine learning service, a database and a cache. Numa Home is one container and one binary on SQLite. In a browser it shows raw files the way Numa develops them, edits included. Faces and search by words use the same models as the apps.

Sync was the hardest design question. If you delete a photo on one side it goes to the trash on the other side too, and you can put it back from either. If both sides edit the same photo, the later change wins and the other one is kept as a snapshot in its history. Deleting should never be the one thing you can’t undo.

Photos get there from the apps as well. Export has a Send Home destination, and Numa Home can show a card from your camera and list exact copies, so you can keep the best one.

View F § Numa Home

Numa Home in a browser

Top, Today on Numa Home: what just arrived in each library, and what’s waiting for you. Below, a search by words for “flowers”, run on the server with the same models the apps use.

Numa Home in a browser: the Today page with recently arrived photographs per library
Numa Home in a browser, a grid of flower photographs found by searching for flowers
View G § Numa Home

Export and first run

Top, Export on Linux: destination, format, colour space and size in one sheet, and Numa Home is one of the destinations. Below, the first run of Numa Home. It finds the libraries in the photos folder and tells you roughly how long reading them will take.

Numa on Linux: the Export dialog with destination, format, colour space, quality and size
Numa Home first run: three libraries found in the photos folder, ready to be added
05

Reflection

I use Linux, so the Linux app is the one I actually use every day. The Apple apps share the same Rust core, but their Swift code only gets compiled by TestFlight, so I’ve designed those more carefully than I’ve tested them. And since Numa only just came out, I don’t know yet if “nothing folds” holds up for people who aren’t me.

The idea I’d keep is hierarchy from state. A screen can be calm when you open it and still lose no depth, as long as you decide what each control looks like at rest, on hover and once it’s moved, and keep the sizes the same.

I also learned how much a designer gets out of asking for a change and seeing it quickly. It also makes it easy to build too much. The feature list is over 400 items by now. Every addition has to earn its place without making the screen louder, otherwise Numa turns into the editor I wanted to get away from.

Numa is at numa.photo and the code is at github.com/simmmmm/Numa.