Short version of the question:
Does anyone know of any good open-source photo management/editing suites, a la Aperture or Lightroom?
I'd want it to run on MacOS X, by the way, though options that are (more or less) cross-platform would certainly be welcome, as long as MacOS X is one of the supported platforms.
I know there is some stuff out there, but so far, I haven't run into anything that makes me particularly happy. (Though I admit, I've only glanced at some of the available options, and probably done less than that, for others.)
Going into a lot more detail (warning: the rest of this post is going to be long. Feel free to skim -- I've made some things bold, to help with that)...
There are a bunch of things I'd like to see in such a program. (Some of these may be "in your dreams" type features, but hey, that's in part what this post is about -- finding the software package I've been dreaming of. Which Aperture and Lightroom get kind of close to, but not quite there, for various reasons.) (This post was inspired in part by a question about Lightroom, which seems to highlight a potentially-missing feature.) Such features might include (and this is only a subset, I'm sure):
It needs to be fast -- Aperture and Lightroom do a decent job (usually) at doing things quickly. This would need to at least get close to their numbers, and preferably beat them.
Scriptability -- It'd be really nice to be able to write little scripts to query a set of photos in various ways, and then act upon them -- whether that's to make adjustments, or to do a bulk export, or automatic additions of tags, or whatever. This is really my #1 requirement, I think -- I'm particular about certain things, and currently have scripts that I run pre-import and post-export from Aperture or Lightroom. It'd be nice to have those things integrated in. To define what I'm looking for further, I'd like the ability to do things like:
mangle filenames during import, based on camera metadata. (e.g., change
[card]/DCIM/123CANON/IMG_4567.CR2
, shot on my 30D, into something like[datastore]/2010/11/2010-11-30-some_shoot/my30d-123-4567.CR2
, wheresome_shoot
is something I'm prompted to type in during import, and the rest is figured out from the metadata and/or original filename.)take that
some_shoot
and also automatically apply EXIF and/or IPTC data during the import based on it -- and/or other things I'm prompted for (where I can configure what things I want to be prompted for) or have configured (e.g. auto-adding copyright statements, etc.)automatic importing -- doing all the above as soon as I insert a card, or, at my preference (in a setting somewhere), upon a single button-press or whatever.
selecting images with arbitrary queries -- something SQL-Like, perhaps? Though also different than that -- being able to create, say, a variable that's a collection of images, from which you can make further selections or take other actions. Maybe something like (arbitrarily using ruby-like syntax for my pseudocode):
lowlight = library.search(:iso => 100,
:exposure => '< 1/4',
:aperture => '> f/16')after which I could then do:
thefunstuff = lowlight.search(:rating => '> 3', # 3 stars or better
# must have all of these tags:
:tags => [ 'beach', 'california' ],
# and any one or more of these:
:any_tag => [ 'light painting', 'LEDs', 'fire poi' ])after which I could then do:
thefunstuff.add_tag('light painting') # make sure all have this tag
thefunstuff.export_to_flickr(:find_set => 'Low Light',
:create_set => 'Light Painting on California Beaches')changing settings -- whether I'm working on the
current_photo
, orthefunstuff
from above, having the ability to change various settings -- whether it'sadjust_exposure(+0.1)
, orset_whitebalance(5000, -3) # kelvin, tint
, orphotoB.exposure = photoA.exposure
or even:thephotosIwanttweaked.set(photoB.get_settings(:exposure,
:whitebalance, :iptc => { :tags, :copyright })where
thephotosIwanttweaked
is a variable containing a collection of photos previously obtained -- perhaps with a query as shown above, or perhaps via GUI-based selection (click an image, shift-click to select several more, then saythephotosIwanttweaked = gui.currently_selected_photos
or some such)
Keyboard-based interaction mode -- As a programmer in a "past life" (surely obvious from the above), I find that I tend to like to keep my hands on the keyboard a lot of times. GUI and mouse-based (or tablet-based, or what have you) interaction are quite useful when manipulating images, and I want that to exist, too. I just find that typing "select all" at a prompt, or hitting "command-A" on my keyboard, or the like, is far quicker and easier (especially for some kinds of things) than doing it by the GUI. (See the section above about selecting images with arbitrary queries, for example.) Lately, I've been starting to use emacs for things (after switching from vim -- editor wars aren't allowed here, right? Oh, few of you even know what I'm talking about, huh?). Having the ability to have actual emacs be part of this, and/or to have emacs able to talk to it via an API, would be way cool, in my book. (Of course, this would presumably mean that there'd also/instead be an elisp way to interact with this, rather than ruby, but whatever. Or maybe a new language is invented, specific to the purpose.
Extensibility -- this thing should have a nice API for writing anything from RAW import tools to fast image editing plugins to exporters for your favorite website. Maybe face detection and such, too?
Real-time GUI manipulations -- much like the UIs in Aperture or Lightroom. Along with all the above, the standard GUI-based manipulation strikes me as quite important, too -- having real-time (or close to) feedback when making visual changes is key to visual things.
Ability to identify objects/people in photos -- One thing that I think is lacking in Aperture's new face detection stuff, and which could have been really helpful for me recently, is a way to identify ("tag", whatever) people or objects within a photo. Example scenario: I'm shooting a sporting event, and I want to go through and quickly and easily identify which players are in each photo. I imagine me as a human doing a lot of the work on this, though automatic detection would be nifty, too... but the thing that I see as being different from existing UIs is a way to basically select a region of the photo that represents a particular player, and then do so for other players as well, and then go through in a second pass and try to tie them together (with the computer perhaps helping, along the way). So like, maybe I select a player in one photo, and I don't know who they are yet, because their number is obscured... but later, I select what ends up being the same person in another photo, where their number is visible, and then, because of attire or whatever other distinguishing feature there might be, I'm able to tie the two together. But I still don't know their name, necessarily -- but perhaps I have a roster, and that can get looked up. This could also be useful in a variety of other situations, I imagine -- a studio shoot where you want to identify which props were used in which shots, say, so that you can later ask for a photo that includes the such-and-such prop. Stuff like that. Developing a good UI for this would likely be an interesting challenge, but I think I could imagine how it could be done that could make sense.
Photo and/or meta-data manipulation on multiple devices -- Maybe the RAW files only exist on one device, or maybe they're on a network drive and can be accessed from multiple computers. But what if, also, previews and metadata were uploaded automatically to a web server somewhere, so that you could get access to them on your smart phone, say, and do ratings, tagging, and the like. The data would get synced up (somehow), and could also potentially be shared to different people -- perhaps (if, say, this was being used at some sort of company) your event coordinator is better at doing the identification tasks, and your photographer is better at post-processing the image itself, and your graphic designer wants input on things, as well. If all those people could access the same images, that could be really really useful. (This could also apply to a photo business, with assistants and such.)
Anyway, hopefully that gets the general flavor across of the kinds of things I'd like to do and see, though I'm sure I've only scratched the surface on what's possible, and that even a subset of this stuff would be useful to me. Does anyone know of anything like this?
Alternately, would anyone be interested in possibly starting work on such a beast? I'd need a lot more experience with GUI programming, graphics manipulation, and the like -- not to mention more time and energy to work on this -- before I'd be able to do anything that even begins to be useful on my own... but I think if I had some people to work with, we might be able, together, to do something really really cool.
I could imagine forming a company around it, too -- there might well be some hardware that could be useful to integrate with it, which could be the money-making piece. Or it could all just be done as volunteer-done open-source software. Either way.
OK, I'm done rambling now. I'm very curious to see what sorts of responses this question will bring. :)
No comments:
Post a Comment