While GIMP is undergoing major refactoring and UI update with GTK+3, it’s fun watching one of very few successful GIMP semi-forks rise from the ashes again. And this one is interesting because Seashore a native Cocoa app for macOS and it just has landed to Apple’s App Store, while being GNU GPL v2 licensed.
Seashore was designed to provide basic image editing tools for non-professional users. The project was started by Mark Pazolli in 2003, “borrowing some ideas, resources and source code [from GNU Image Manipulation Program]”, as the developer originally put it. Seashore has also been using the version of the XCF file format from ca. 2003 as its native one.
Mark pulled out from the project in 2009, but there were more developers to pick up development until there were none left. Which is where we meet Robert Engels who CPRed the project in 2017 and has been maintaining and improving it ever since.
Robert, first of all, I don’t have a Mac in my household, so please bear with me! Could you please briefly outline the history of your involvement with Seashore?
In my previous job, I would often create icons as placeholders until a “real” graphic designer could get to them. Seashore stopped working for versions of OSX starting with 10.11 (El Capitan) released in 2015. I used Linux at work with GIMP, and I could use GIMP on OSX at home, as well. But I really missed the simplicity and native feel of Seashore.
So at the end of 2017, I made the decision I would try and get it to work. My company was acquired in mid-2017, and I decided to leave so I had some extra time to devote to the project during the past year.
I believe I got it “working” in a couple of weeks, but I had no previous experience with Objective-C, so it was a learning process.
By far the most difficult aspect was getting in touch with the original authors to get permission to fix the distributions on Sourceforge, which is where most people landed.
What did you start with?
The main source of the “crashing” was the removal of ColorSync Manager support from the OS. Even though it was just deprecated, valid usages no longer worked. So all of the color management needed to be fixed. I also simplified the code in the process.
I’ve since gone through and refactored a LOT more code, probably reducing the LOC in the effects area by greater than 80%, simplifying the plugins/effects immensely and adding new ones — using CoreImage — for things like auto image correction, red-eye removal, etc. CoreImage has a well-defined interface and decent documentation, so it was fairly straightforward.
Some of the internal constructs needed improvement. There’s a lot more that could be done, but I’ve probably taken that effort as far as I’m going to unless I get bored…
I reworked the code base to use automatic reference counting — to make life easier to future maintainers — SO MUCH EASIER. Manual memory management is so…ancient. That was a big change, and fairly tedious, but the built-in conversion process in XCode helped.
The last big effort was getting it to work under the sandbox and “hardened runtime” in order to distribute through the App Store.
One thing I find particularly interesting about Seashore is that it’s one of very few GIMP forks that actually survived. My gut feeling is that it has a lot to do with severing the ties with the original project and rewriting very nearly all of it, for technical and/or other reasons. What’s your take on that?
I don’t know if I’m in the position to comment on other endeavors, but Seashore has less than 0.1% code from the GIMP project now. I don’t think it ever had a lot — it was a native Cocoa app from the start, but I’ve since removed even more of the GIMP code and replaced it with CoreGraphics or CoreImage. The remaining GIMP code is primarily used in the advanced gradients that are not supported natively in CoreGraphics.
As you’ve just explained, it’s unlikely you can pull any code from newer GIMP releases without rewriting all of it. But do you follow any free/libre infrastructure projects such as OpenColorIO, OpenImageIO, MyPaint brush engine, GEGL, and others that could have some potential for you?
I’m sorry but I do not. It took me long enough to figure out how Seashore worked :) I did do a bit of imaging work in a previous job, so I understood the concepts, but as I stated I had zero experience writing Mac software. As expected though, the native graphics/imaging capabilities of OSX are extensive.
Did you end up switching Seashore to its own file format?
No, it still uses GIMP v2.0 XCF.
How much support for XCF files are you willing to provide, given the amount of changes in that respect between GIMP 2.0 and GIMP 2.10?
I am planning to support XCF 2.10 if it is not too difficult. At least the ability to read them, and possibly write 2.0 if needed. Up until a recent release of GIMP it still read & wrote GIMP files successfully. I tested this many times. The metadata handling was broken in Seashore, so I fixed that as well.
What’s your goal for publishing Seashore on the App Store? Financing further development?
The only goal is to continue the life of Seashore. I honestly believe that at some point only applications provided through the App Store are going to be acceptable for installation — for security reasons.
Also, although it is doubtful, there’s a possibility that being on the App Store will expose a whole new audience to Seashore. It would be awesomeif it was featured, but it probably needs a UI refresher by a graphic designer.
I derive no economic benefit from Seashore — on the App Store or anywhere else. I was debating putting up a ‘Donate’ button in order to buy a more modern machine. My Mac cannot run the latest Mojave, so I can’t develop for some of the Mojave features like “dark mode.” Any donations would help in updating the documentation, and possibly a new icon set as well.
Speaking of which, do you have any interest in bringing in more people to work on the project, whether writing code or designing UI or writing tutorials or creating new website etc.?
What’s the best way to contact you? Via Issues / PR sections on GitHub?
Via github issues seems to be working.
When you say you were debating putting up a ‘Donate’ button, do you mean you decided against it, or is it still under consideration?
Still under consideration.
Seashore started out as a lite version of GIMP when the market on OSX wasn’t nearly as saturated as today. But the landscape on macOS has changed a lot since then. First, Pixelmator, Acorn, and a few more similar applications arrived. Then Adobe moved to subscription-based licensing, which gave rise to even more popular projects such as Affinity Photo. Has any of that affected your vision of Seashore?
It was a personal learning project for me, so I’ve already benefitted a lot. It was not my vision either — it was Mark Pazolli’s. I used a lot of imaging programs, including Photoshop, and I still think Seashore has a great balance of features vs. complexity. It’s more a labor of love for me.
What would you say are the big things you want to work on in Seashore next? What are the most annoying itches that you want to scratch?
There are a few things on my radar. As I already stated, I’d like to support the Gimp 2.10 file format.
I’ll probably also do a few more of the latest CoreImage effects and maybe enhance the current ones where appropriate to give more manual control.
I have been debating bringing back the ‘detached’ windows. The current setup is easier to work with, but for certain editing chores the floating detached (tools, layers, etc) makes some operations easier.
What about better PSD support? And OpenRaster, for even better interoperability with other free/libre image editors?
That may be a better solution. I wasn’t aware of those initiatives, but if I undertake the file format changes I will look into it. I still think being able to open the latest GIMP files in at least some fashion would be beneficial.
It looks like file formats support is currently restricted to GIF, JPEG, JPEG2000, PNG, TIFF, and XCF. Any idea if the rest was lost during the initial rewrite?
Nothing was changed. Still, it should be able to handle any native Cocoa format, but the way the file handling was implemented gets in the way. I may look at fixing that. It also supports importing SVG but this requires an external helper program — not easy via App Store due to sandboxing. Similarly, I’ve just rewritten the brush/texture code to allow the creation of both textures and brushes from within the application — it used to be done via external helper programs as well.
Do you see masks and layer groups as too advanced features to support (masks were originally available in GIMP, layer groups were only added to v2.8 in 2012)?
You can kind of do masks now by setting the layers modification to ‘primary only’ and editing the mask using ‘alpha only.’ The groups are probably too advanced.
I think most forthcoming changes would be in the UX/UI area, and not as feature oriented. I’d like to improve the scaling/rotation to not require the key mods (use more advanced handles) and show the image while performing the action, etc.