Developing the shootis the slow part.
Kelvin reads a photograph — the scene, the light, what has technically gone wrong — and builds four complete edits from what it finds. Pick the one closest to what you had in mind and carry it across the rest of the folder.
It all runs on your Mac. There is no account and nothing is uploaded.
1.5 GB, because the model ships inside the app · macOS 14+ · Apple Silicon · free, AGPL-3.0-only

Close to what the meter gave you, cleaned up.
Where the numbers actually come from
“Sunlight from the front creates a strong golden-hour glow with high contrast.”
That is the entire output: a few categories and a sentence of description, from a small vision model looking at a 768-pixel copy of the photograph. There are no numbers in it anywhere.
- Temp
- 7,740 K
- Tint
- +2
- Exposure
- 0.00 EV
- Contrast
- +10
- Highlight recovery
- −1
- Whites
- +16
- Blacks
- −7
These come from ordinary code reading the histogram and the EXIF. Run it twice on the same file and you get the same numbers — they are arithmetic, not a guess, and arithmetic can be checked.
Ask a two-billion-parameter model for an exposure and it will give you one — exposure: +0.37, delivered with the same confidence whether it is right or wrong, and afterwards no way to tell which it was. So Kelvin never asks the model for a number. It asks what a vision model can genuinely answer — backlit portrait, or landscape at dusk — and the exposure is then calculated from the histogram, the way any other photo software would calculate it.
The four candidates are survivors, not the whole field. The engine renders more styles than it shows, scores each against its own craft checks, and drops any with a real defect — a Dramatic that crushes a backlit frame into silhouette never reaches the menu.
It finds the subject on its own

Kelvin picks out the subject and edits only that, leaving the rest of the frame alone. Invert the mask and the edit swaps sides: the background changes and the subject stays exactly as it was. A mask can be narrowed by colour or by light, and if you want a region Kelvin didn’t find on its own, you paint one with a brush.
None of this is generative. There is no inpainting, no object removal and no sky replacement, and none of it is planned. Kelvin changes how a frame is developed and never changes what is in it.
Applying it to the rest of the folder
Settle on a look for one frame and batch apply carries it across the others. The filmstrip groups the folder into the days the photographs were taken, counts the frames in each, and filters to keepers, undecided or edited when you want to work through one slice at a time.
It also flags problems before you go hunting for them. A frame with a strong colour cast says so, with a Fix button next to the warning.

Watch it work
Silent · 29 seconds · 1432×880
It works with the Wi-Fi off
A released build carries the model inside it, so the reading happens on your Mac and there is no upload step to wait for. If your library lives in iCloud it still lives in iCloud — Kelvin changes nothing about that, in either direction.
No account, no upload, no telemetry
There is no crash reporting either, and nothing to opt out of.
No server on the other end
The model ships inside the app rather than behind an API, so reading a photograph needs no network — there is nothing to wait for and nothing to go down.
Your originals are never written to
Edits are saved alongside as small JSON files. The RAW your camera wrote is left byte for byte as it was.
Exports keep your metadata, including location
It is on by default, because quietly deleting something you might need later is the worse mistake. One switch in the export options removes it.
- Opens
- RAW · JPEG · HEIC · PNG · TIFF
- Exports
- JPEG · HEIC · PNG · 16-bit TIFF
- Colour spaces
- sRGB · Display P3 · Adobe RGB
- Export size
- Full, or a long edge you choose
- Tests
- 491 — 391 core, 100 app
- CI
- Runs on every pull request
- Licence
- AGPL-3.0-only, with a CLA
- Requires
- macOS 14 or later · Apple Silicon
Shipped. Not finished.
Kelvin 0.1.0is the first public build. Everything above is that build running on real photographs from a Sony A7R IV, not a mockup — download it, point it at a folder, and check this page against what happens. A 0.1 is an honest number: there will be rough edges, and the repository’s issue tracker is where they get fixed.
The source is public under AGPL-3.0-only — the repository is on GitHub, tests and licence and all. New releases land here and in the app’s own update check, which asks before it ever checks and stays off if you say no.
Kelvin-0.1.0.dmg · 1.5 GB, because the model ships inside the app · macOS 14+ · Apple Silicon