Photo Management Software: First Update
It’s really inefficient to try writing software in 20 minute chunks of time, on alternating days. You spend most of the 20 minutes just figuring out whatever it was you were working on last time (at least, that’s what you do if you’re going prematurely senile, like me). That’s how I’ve been proceeding on my photo management software, since 20 minutes is about all the time I can spare most days. At this point I have the database tables in place and I’ve started on the administrative interface. I’m realizing just how big of a project this is going to be – there’s a reason applications like Coppermine and Gallery consist of hundreds of files and thousands of lines of code! My application won’t be that big though. That’s because I’m not going to pack everything plus the kitchen sink into it – i.e. it won’t include emailing photos, photo comments, rating photos, etc. I like the WordPress model, where those sorts of things would be plug-ins you could add if you want, not part of the core program. Also, I’m trying to design it with the goal of maximizing code reuse, which will hopefully keep the codebase compact and robust.
Here’s the concept of my approach:
- Collections: a typical installation would have just one collection of photos. But I wanted to include the possibility of multiple collections, so that you can support more than one user with a single installation of the software. Collections have a one-to-many relationship with…
- Categories: this is the same as the Coppermine concept of categories. They provide a way of organizing your albums into groups. So categories have a one-to-many-relationship with…
- Albums: photos are organized into albums. My approach differs from Coppermine and Gallery in two respects: 1. you can specify an order for the photos (Coppermine and Gallery order them by filename), and 2. you can have a photo in more than one album (in the real world you can only put a picture in one album, but why replicate such a physical constraint in the digital world?). So albums have a many-to-many relationship with…
- Photos: the database table for the photos will include the file path, a (short) caption and a (long) description, the shoot date and the upload date, and an “exclude from random” flag that will allow you to exclude it from a random photo display.
- Slideshows: this is a concept I haven’t seen in other photo management tools. Slideshows are part of a Collection, but otherwise they stand alone. The idea is to provide for an organized presentation of photos that’s distinct from albums. My Things you Don’t See in the US blog entry is a good example of a slideshow. In the album for our Japan trip, I would present these pictures chronologically (since that’s the way to organize trip photos), but I also want to be able to present them in a non-chronological, thematic way.
- Blog integration: this is also something I haven’t seen in other photo management tools. As I described before, I did a lot of hacking to psnGallery2 and Coppermine to provide at least some level of integration. But what’s under the hood is ugly and hard to maintain. To my way of thinking, blogs and on-line photo management are separate things, but conceptually there’s a natural fit between them that should be brought to life. psnGallery2 has handy tags that make it easy to put a Coppermine photo into a WordPress blog – I want to extend that concept to slideshows. That is, I’d like to just put a tag in a WordPress entry that would expand into an entire slideshow display. What I do now is build the slideshow in WordPress by hand, looking up the photo id numbers in Coppermine one at a time, and that’s a silly way to spend my time. I also want to have the connection reciprocated from the slideshows and photos that appear in the blog, so if you’re just browsing through the photos, you can link to the blog entries where they appear.
So that’s what I’m working on. The development is still very much in it’s early stages, and it’s going to be a long time before I have a working prototype, so if any of my geeky readers (and you know who you are) have any suggestions, please let me know!