Skip to main content
All posts

5 min read

Drifting Away from PhotoCraft: Omapix Found Its Own Lane

Two weeks after I wrote about borrowing from PhotoCraft, Omapix stopped borrowing. That was the plan all along.

  • Open Source
  • ArtCraft
  • Rust
  • Omarchy
  • Photography

This follows up on Piggybacking on ArtCraft. If you haven’t read it, the short version: Omapix, my portrait retouching app, borrowed a lot of code from PhotoCraft, an open-source Photoshop rebuild in Rust.

Two weeks ago I wrote about how much of Omapix was coming from PhotoCraft. Brush feel, Select and Mask, healing, Content-Aware Fill, .abr brush files. At the time it looked like PhotoCraft would be a permanent upstream that Omapix kept pulling from.

Then it stopped. The last time I went through PhotoCraft’s commits for Omapix was October 20th. Since then, Omapix hasn’t taken a single line from it.

PhotoCraft didn’t slow down and nothing went wrong between the projects. Omapix just got to the part that’s actually Omapix.


The numbers

Here’s what Omapix’s commit history looks like since I started it on September 24th:

  • Oct 8–21: about 40 commits mention PhotoCraft by name. Dodge, Burn and Sponge, brush dynamics, Poisson healing, PatchMatch fill, the measured round tip, the Refine Edge brush. Most of them say “borrowed from PhotoCraft” right in the title.
  • Oct 20: Omapix 0.1.0, with a package, CI, a bug report form and an MCP server so AI agents can drive it.
  • Oct 31 to now: zero commits mentioning PhotoCraft. Almost all of them are about retouching faces.

Meanwhile, PhotoCraft kept moving. I have a small script, craft-watch, that reads every new commit in the Craft repos each day and notes anything that might matter to my projects. Since October 21st it has flagged more than 160 PhotoCraft commits for Omapix, 76 of them marked as fixes. I’ve ported none of them.

That sounds like neglect. It isn’t. It’s what happens when a project finishes borrowing its foundation and starts building the thing it was for.


What I needed from PhotoCraft was a floor

Omapix was never meant to be Photoshop. It’s meant to be the fastest way for me to retouch a portrait on Linux. But you can’t retouch anything without the basics: brushes that feel right, selections that hold up on hair, a heal tool that doesn’t smear. Those are hard to get right and boring to get wrong, and PhotoCraft had already done the measuring.

So for the first month, borrowing made sense. Every port saved me days, and every one was a feature any image editor needs.

By October 20th, that list was basically done. When I read PhotoCraft’s commits that day, there were 513 new ones in five days, and most were type, Photoshop actions and printing. Omapix doesn’t want any of those. The handful I did take were small: a GPU limit, Ctrl+click in Curves, finer steps on a slider. The rest I checked and skipped, often because Omapix already did it differently.

The two projects started in the same place and they’re walking in different directions. PhotoCraft is filling in the rest of Photoshop. Omapix is going deeper on faces.


What Omapix does instead

Here’s what the last two weeks went to. None of it exists in PhotoCraft, and none of it would make sense there.

Auto Retouch now gets scored against my own work. There’s a test that runs Auto Retouch on the original layer of one of my hand-retouched portraits and compares the result to what I actually did, face by face: skin, under the eyes, eyes, teeth. Lower is closer, and a change only stays in if the score goes down. That one test changed a lot. My hand retouch took Dodge & Burn from 40% to 5%, so the presets dropped to 5, 10 and 20%. I only soften the mid-frequency band in patches, by about a quarter, so Auto Retouch stopped smoothing the whole face and started working on the spots it finds.

Retouching by part of the face. “Smooth Lines” was one slider. Now forehead lines, crow’s feet, smile lines and eye bags each get their own switch, slider and layer, per face. Blemishes get healed one at a time on their own layer, so I can fade or erase any single fix, and there’s a Keep Beauty Marks option so it doesn’t remove a mole someone likes.

Soften Scars and Fill Beard. Two new Retouch commands. Soften Scars sets up a masked layer so you paint along a scar of any length. Fill Beard copies hair from the rest of the beard into patchy gaps. Fill Beard is still rough: I’ve only tried it on one photo, and on a clean-shaven cheek it can mistake skin for a beard.

Small faces in group shots. The face segmenter sees the image as a grid of 256 squares, so in a group shot a face might only be a few squares across, and its skin mask was mostly a guess. Now any small face gets cropped and segmented again on its own. I shoot a lot of groups, so this matters more to me than almost anything else on this list.

PhotoCraft is trying to match Photoshop, and Photoshop doesn’t do most of this. You’d normally get it from a separate retouching plugin, or by doing it by hand. That gap is the whole reason Omapix exists.


The borrowed code is Omapix’s code now

Something I didn’t expect: after you port code and start changing it, it stops being “PhotoCraft’s code in Omapix” pretty quickly.

Take Texture Fill, Omapix’s Content-Aware Fill without an AI model. It began as PhotoCraft’s PatchMatch. I changed how it starts and how it matches patches. On October 31st it got a sampling area of its own, and the next day Fill Beard was built on top of it. Now it’s a building block for a portrait feature PhotoCraft doesn’t have. A fix to PhotoCraft’s version might not even apply to mine anymore.

That’s a big part of why the 76 flagged fixes are still sitting there. Some are for code Omapix never took. Some are for code that’s changed so much the fix needs rethinking, not copying. And some will genuinely matter, which brings me to the next part.


I’m drifting, not leaving

craft-watch still runs every day. PhotoCraft is still the first place I’ll look when something I ported breaks, and the roadmap still has a short “for later” list: opening a file in a window that’s already running, Dual Brush’s tip proportion, Liquify’s Show Backdrop. When I sit down to do brush or selection work again, I’ll go through the backlog and pull in whatever’s worth it.

The difference is that PhotoCraft has gone from being where Omapix’s features come from to being a reference I check now and then. In the last post I said the biggest thing a larger project can give you is a way to test your own work. Two weeks later, I think that’s the long-term relationship.

If you’re starting a project next to a bigger open-source one, I’d suggest doing it this way. Take the foundation, and be honest about which parts are just foundation. Then stop once you reach the part only your project cares about. If I’d kept syncing with every PhotoCraft commit, I’d be maintaining a smaller, worse Photoshop. Instead I have a retouching tool that’s measured against how I actually retouch.


Check it out

Send a msg to start the chat. You can ask the bot anything about me.