FotoBilder is an open source web application built on mod_perl & MySQL that lets users manage pictures.
That by itself sounds boring. The details are more exciting:
- There is no enforced directory structure. Everything is based on galleries.
- A picture can belong in zero or more galleries.
- Fine-grained security on both pictures & galleries.
- Meta-data, meta-data, meta-data. (site-defined, user-defined, camera-defined (EXIF), etc..)
- Automatic image scaling & thumbnailing. Galleries can all have their own thumbnail styles. The backend supports storing multiple thumbnails per picture per gallery, too, so a gallery could have greyscale thumbnails that turn colored on mouseover. In addition, thumbnails can be of only a specific crop-region, defined per gallery, or global. (that's another meta-data item)
- A unique picture is stored only once, regardless of how many people upload it independently.
- Users can import their friends' galleries into their own collection. (imagine: 5 people bring their digital cameras to a party.... afterwards, all party attendees import all 5 of those galleries, merge them, relabel, etc.. all while keeping metadata on each pic of whose gallery it came from originally (if they choose)) And there's security on all this too: people can choose who can import their galleries.
- People running FotoBilder servers on different hosts can still import from other people's FotoBilder servers.
- Arbitrary keywords on pictures/galleries. Searching on keywords or arbitrary logical expressions. Users can also define their own implications. (Dad implies FamilyMember. FamilyMember implies Person... find all pictures "Outside AND Person AND NOT Dad")
- Elaborate theme support for user pages and galleries. (anywhere from wizard- driven to fully user defined)
- Optional message boards on galleries/pictures.
- LJ-style clients for easy image uploads - Windows and Perl developed by us, maybe more in the future developed by the community.
- Support for both still images and videos.
- Lots of hooks in the code, for extensibility.
The system's been explicitly designed to handle three userbase sizes:
a single user, a family or small group, or a million users.
All the knowledge gained building LiveJournal.com (and before that, FreeVote.com)
has been used to make a system that scales wonderfully.
To address the small side of things (where LiveJournal has/had problems),
we're making sure from the beginning that documentation is there and support is there
for a person to easily install it themselves and get up and running, without it seeming
like overkill: LiveJournal for a single user "feels" too heavy... the UI everywhere
and all the URLs assume tons of users.