DesArt Photo Manager

First of all, I apologize for the basic HTML. I'll try to get a better page put up before too long. In the meantime, here's some information about DesArt.

DesArt Photo Manager is, as the name implies, a photo manager, but it's also much more. The key to the DesArt architecture is flexibility. The DesArt main application consists of little more than plugin manager, some basic GUI infrastructure, and some shared services. Everything else is a plugin. Because of this, DesArt will be completely customizable to the end user. They just pick the pieces they want. Don't like the built-in image viewer? Someone can write a new one. Don't like the file browser? Write your own. Need a new feature? Just add a plugin.

The current code consists of this tiny core application and a number of plugins. Some of the plugins are still prototypes. I'm still trying to flesh out the overall architecture, but there is a file browser tree, a thumbnail viewer, an image viewer (that even can apply some basic filters) a plugin to use ACDSee as the image viewer as well as other aspects.

If you're interested in getting involved, you might want to check out the Documentation folder in CVS and look at the DesArt Development Overview document.

I've been developing this on my own, but I could really use some help, so feel free to contact me to get involved. Just send e-mail.

Photo Management

Here's some information to give you an idea of where I want to go with this. DesArt is a photo manager. It keeps track of where your photos are, either on your local hard drive, network drives, or images that you've archived off to CD/DVD/whatever. It also has a database that tracks metadata about images. You will be able, for example, to select a group of image (either from a file list, the thumbnail view, or whatever) and set any of the following: a list of keywords, a location where the photo(s) was taken, the occasion of the photo(s), the people in the photo(s), and so forth. Thumbnails will also be stored in the database so they'll be available even when the images aren't. Users will be able to search on any of this metadata. You can also search based on folder name, file name or even dates.

One of the keys to the photo management aspect is the ability to quickly find photos. A search will produce a list of photos in a thumbnail window. If the image(s) is readily available, it can be opened. If not, you can find out which CD/DVD/whatever it's on.

Everyone has their own way of organizing their collections of photos. One of the biggest failings of most other photo managers is you have to adapt to their way of organizing photos. The goal with DesArt is to have it adapt to how the user organizes his/her photos. And if your photos are scattered all over the place with no particular organization, DesArt will adapt to that and try to bring order to it.

Image Distribution

DesArt will include various methods of image distribution. Automated modules for posting images to blogs, free image hosts (ImageShack, Image Cash, 4vu.net, etc), sending images in e-mails, posting images in web based message boards, so on and so forth.

I'm also planning a P2P plugin that will allow you to easily share photos with friends, family, or the public. You can create groups and assign different people to groups and then decide which photos are available to which people/groups. There are a number of P2P frameworks being developed by other groups, so there's no point in reinventing the wheel when we can catch a free ride on someone else's work.

Image Acquisition

I plan to add plugins for scanning images, reading images from cameras, pulling images from web sites, and so forth. Getting photos into DesArt should be quite simple.

Archiving

Who wants to keep all their photos on their hard drive? DesArt will have functionality for quickly and easily relocating files from one location to another using either copy or move. DesArt will also have a CD/DVD-burner plugin. What happens to that CD/DVD after you burn it? While it takes a little more work on the part of the user, some people want organized collections. DesArt will allow you to provide very specific information regarding where the CD/DVD is located. You can label your CDs with text or some organization code. That gets recorded. Put it in a CD box or organizer? You can record that. Put the box or organizer in a closet or drawer, you can keep track of that. When you perform a search and you get thumbnails of archived images, you can find out exactly where it is (assuming you keep the location information updated). This isn't what everyone needs, but some people will want it.

Other Features

There are a number of features I want in a photo organizer. Beyond the ones listed above, duplicate detection is high on my list. Not just exact pixel-for-pixel duplicates but duplicates that have been modified. Pixel-for-pixel duplicates will be easily detected as an SHA1 hash will be applied to every image's bitmap data and stored in the database with the image. Similar image detection will probably be accomplished using the Haar Wavelet algorithm or a similar method with the image's signature also stored in the database.

The file system has been virtualized through the use of a set of interfaces. A very basic file system has been set up to allow browsing files on disk. The idea of virtualizing this has been created to allow file systems to be created that will allow DesArt to transparently read compressed archives (zip, rar, 7z, etc) as well. Compressed archives will simply be treated as folders on the main file system.

There are other features I've contemplated but can't recall at the moment. I'll add them as they come up.

Current Status

DesArt is operating on a basic level at this point. You can browse your drives and folders. you can get a thumbnail view of a folder and you can open individual images. Most of these plugins are prototypes and are pretty rough at the moment.

I am currently working on the database back-end for an MS SQL Server/MSDE database. I also plan on doing a version for the SQLite database engine. As with everything else, the database back-end is a plugin. One can add support for another database by implementing the database interfaces for a specific database back-end.

As with everything else, the images themselves have been abstracted away from the underlying system. I'm not terribly happy with the interface for this and will be modifying it. But currently, there's an implementation that supports JPEG and maybe PNG files using GDI+. I'm going to re-work the interface and then re-implement the core image support to use the FreeImage library instead of GDI+. GDI+ has a few bugs and leaks I've had to work around. In addition, FreeImage will provide a bit more control, especially in dealing with corrupt images (something that GDI+ handles quite poorly).

So really, at this point, DesArt is a shell with some proof of concept prototype plugins. These have exposed a lot of the architectural flaws. I suspect that once I've finished the database support, any architectural flaws in that will become apparent and I will begin refactoring the plugin architecture to fix the problems I've encountered. At that point, I plan on creating the real (non-prototype) plugins for everything.

Mono

I don't have Mono, but I'm fairly sure it will be pretty easy to adapt DesArt to be Mono compliant. There are a few core plugins that will have to be rewritten for Mono since the existing ones are very Windows specific (primarily the core file system plugin as well as probably, some of the custom controls). I'm not personally planning a Mono port, but if someone with Mono would like to do that, I'd be happy to welcome them aboard.

Helping out

I'd be happy to have other people help out on the development. Once all the interfaces have been refactored a bit, the plugin architecture will lend itself very well to people working on various aspects without stepping on each others toes. So, if you're interested in just about any aspect of photo management or any of the features mentioned so far and you know C#, feel free to contact me.



Back to the Project Page

SourceForge.net Logo