Description of the Perfect Photo Gallery

Not long ago, I called out for help in finding the ultimate online photo gallery solution.

I was not the only one who had looked for solutions. As my peers, my research didn’t result in immediate tangible solutions. This was actually a surprise, considering I had looked through more than 30 solutions.

On the upside, solutions are now on the visible horizon. Amid the cruft of CMS‘s, two systems emerged that both hold much promise. Additionally, the future looks bright with the outlook of a third system written from the bottom up with simplicity in mind.

The systems that are currently showing the most promise are:

In the hopes that these systems will blossom, I offer some advice as to what exactly it is I would want in a photo gallery CMS.

Core Values

There are solutions. This whole research and callout is based on the fact that I won’t touch any of those solutions with a pitch fork. Why? Because I have better things to spend weeks on. After all, we’re talking photo galleries, not rocket science.

Core values for the perfect CMS would be these:

    1. Simplicity in Structure.

If in doubt, leave it out. That goes for features, graphics, tables, samples, themes, buttons, checkboxes, funny messages, cruft.

    1. Simplicity in Interface.

Fewer features are better than more features. Period.

  1. Simplicity in Concept.

All we want is a photo gallery. It shouldn’t do anything else than this. If it’s not directly related to photography, then don’t even think it.

Minimum Features

I already have Photostack. Photostack is good, in fact it’s great. The only reason I’ve spent days on researching alternatives is because I need just one extra feature: the ability to comment on the photos. As such, this minimal feature list will very much mirror what Photostack already does.

    • A folder containing JPEGs is a Photo album.
      Plain and simple. Folder titles could be given using a .txt file like Photostack does.
      Upload JPEGs + push a button = Online album
    • Each picture allows people to comment.

Such a comment contains name, URL and comment.

  • Allows descriptions on each photo.

These descriptions could be added in the admin section.

Things to Avoid

Having researched the before-mentioned 30+ photo gallery CMS‘s, I know what should definitely be avoided.

The bulk of the most promising systems required the webserver to have PHP Safe Mode to be off. Safe Mode is there for a reasonβ€”requiring it off cuts away users. I’d rather write in foldernames in a textfile than have Safe Mode off. A good CMS will work even in PHP Safe Mode.

    • Flat-style photo storage

Most of the really promising systems I ultimately had to scrap due to their way of storing photos. I don’t want to have all my photos stored in one large folder, even if they are automatically renamed and sorted in the SQL. I want a simple, logical structure like on my own computer. Folder = album.

  • Multi-purpose CMS systems

Keep it at the photo gallery level. Don’t bloat it with things that it only does half-heartedly. Photo gallery != blog || forum || photo-sharing-system.

Things to Do

Pick out the good features, add them. These are things that would be nice:

    • PHP & text files or PHP & SQL
    • Cruft free URLs (albumname/imagename is preferred over ?album=3&image=5)

mod_rewrite is your friend, and it’s easier to use than you might think. Go that extra length and beautify URLs. A side-benefit: Google will reward you, and hackers won’t know whether you’re using ASP or PHP.

    • Basic spam protection

When commenting is involved, spam is involved. As a basic measure, obfuscate commenting forms.

    • Admin description system

Being able to describe each image with a thumbnail above is worth spending time building.

    • RSS

Adding an XML feed shouldn’t be too hard, but many would appreciate it.

  • Really simple templating system that’s “not-too-specific”

I would very much like to make a simple PHP include in the template.


I wish I was able to program a system such as this. I would be able to do more than just talk. Being in the situation that I am in, however, all I can do is advise what I would love to see. Now run with it, and go make the ultimate photo CMS. Keep in mind that lists 371 photo gallery CMS‘sβ€”this might indicate that there’s a definite need for a system that just works.

31 thoughts on “Description of the Perfect Photo Gallery”

  1. Tristan says:

    Sounds good! I’m on it! More details later. I’ll keep most of the discussion of my attempt on my own site, so look there for more updates as the project progresses. I outlined the main features and some rough implementation guesses the other night, and we agree on all points, especially in the core values.

    A few things I’ve decided so far:

    First, it’ll be folders and text files — one text file per image for comments, descriptions, and anything else I need to store with the image. I’ll almost be writing a database from the ground up, but I’ve done that before, so this should be easier. Performance is something I have to look at, but I don’t think it’ll be too bad — I’m not doing any complex searches or joins or queries — just parsing one file per image. We’ll see.

    Second, PHP. I know it, and it’s the most widespread server-side language available. Obviously have to use it.

    Third, templates will be PHP-files with (well documented) PHP-functions ala wordpress. This should make them easy to make, include in any page, and customize.

    More on my site later; I’m unpacking today. School is over, and I’ve got time to work on this now. πŸ™‚

  2. Chris says:

    Sorry to do this but I’m making a “me too” comment. Eager to see what you have in store Tristan.

    Joen, these last few posts, (photo gallery, editable sidebars) are really crying out for your “subscribe to post without comment” idea.

  3. Michele says:

    I’d love to have the time to do this. Unfortunately, I don’t have much at the moment. But I’ll try anyway.

    It’s nice Tristan’s working on it: I look forward to see what he’ll do!

  4. Tristan says:

    Wow — pressure’s on!

    That’ll help. Keep bugging me and it’ll go faster πŸ™‚

  5. Chris says:

    Wow — pressure?s on!

    That?ll help. Keep bugging me and it?ll go faster πŸ™‚

    Poke. Get back to the salt mines…


  6. Jonas Rabbe says:

    Very nice writeup, and I will look forward to see what Tristan comes up with. Personally, I would prefer an SQL database backend, but I’ll probably be ok with text files if well-implemented. I do agree with the use of folders, but it would be interesting to be able to make albums across folders. If you are familiar with iTunes then think smart playlists. I would love to have an album with my favorite pictures (using a rating system or something) next to my regular albums.

  7. Tristan says:

    Interesting idea Jonas – I’m trying to think how I would implement that without a database…

    How about “pointer files” in place of images, so you could make an album folder with pointers to other images in the gallery? they would be as simple as a text file containing a single line: ‘albumname/imagename’ saved as ‘image.pointer’ or something. I’ll add it to the wish list and we’ll see if it can get into a later version… but with that in mind, I’ll be representing images differently in the program from the start.

    Or I could just use sql… still deciding….

  8. donald says:

    Hey, I just came in through the folderblog referer logs. You are exactly the kind of user I’m designing for — my mantra is: simplicity, compatibility, functionality — in that order. I really hope you’ll give folderblog a second look when fb3 comes out (tentatively set for mid-next week). The update addresses all of your cons and then some: completely intuitive folder-based categories, fully automatic thumbnails (you don’t even need to press a button), a super-simple captcha system for spam, and improved templating (template files can include any PHP code you wish). And it functions exactly as you describe it: upload photos to a folder, the script does the rest.

    There is a super bare-bones preview of folderblog 3 (with many features missing) here, but most of the cool stuff is happening behind-the-scenes. Hope you’ll check it out —

  9. Chris says:

    First off, I’m no developer. I just think of impossible things and expect others to implement them.

    Along the lines of what Jonas was saying re: iTunes what if.. You have a giant folder of images (photos is such an exclusionary term, I’m a uniter not a divider), the visitor comes by, looks at some images and likes some so they give the image a star (a rating that only affects their view of the images), a cookie or somesuch thing is then downloaded that’s basically just a flat file saying something like “img0003.jpg “, then they click a magic button (thinker, not developer) and all their “” images are collected into a svelte album.

    Furthering that, for the user (the guy on the other server side of the phosphor) could “tag” images with some type of metadata. Like: blue, cloud, girl, mom, apple pie etc… I don’t see this as being necessarily done through an interface. Could it just be a plain text file that the user could edit and that a PHP program could read? I really don’t know anything about PHP’s storage and recall abilities.

    The point of the above would be the user (not visitor) could then just say make an album of “blue”. Then the CMS would read the text file, see that img002 and img001 are blue and toss them into a page. But, they could also show up in an album of “blue” and “apple pie” for those weird desert pics from uncle freddy’s birthday party.

    Of course, all of this is just reinventing the Flickr wheel I guess.

    Really the most important thing to me is that the html the program tosses out be as bare basic as can be. I don’t want the app determining how I lay out my photos. I haven’t spent all this time learning CSS for nothing.

    In the future, I promise I’ll think about what I’m going to say before I start running off at the wrist.

  10. Tristan says:

    Chris – that was great. I now think I’m going to use MySQL for the backend so I can do things like that. It is sort of reinventing flickr functionality, but if it fits then I’ll go with it. I am taking a lot of inspiration from flickr in the first place (and photostack and picasa and etc etc.)

    So the user (admin) could put tags on the photos, which are already sorted into albums. The main view is by album, but the visitor also has the ability to browse by tag, see similarly tagged photos, and see a zeitgeist of tags with that fancy size-equals-importance text links thing we see everywhere. Why not?

    Then, ala Picasa, I can let the visitor “hold” photos they like (stored in a cookie), which can be displayed in some kind of “tray”, or not at all (just a little status notification on the image that it’s held), and then they can view a “group” of held images, and export them in some way (maybe download a zip, or have them e-mailed to an address). Ooh, I like this. So it’ll be a database then.

    Joen – I’ve hijacked this post, and thanks – it’s exactly the kind of user response I need and it’s giving me all sorts of ideas. Perhaps we could just move it to my site with a little SQL export/import magic? πŸ˜‰

    Everyone – I’m going to solidify the specs for a first version soon; I’ve got all your comments organized in a backpack page, and I’ll consider everyone’s ideas thouroughly in trying to make the most coherent solution possible. So, thanks!

  11. Chris says:


    zeitgeist of tags with that fancy size-equals-importance

    The phrase you were looking for is weighted tags. That’s what all the hip kids are calling it. It’s ok. I couldn’t think of the word “admin”. Faulty wiring.

    Joen – I?ve hijacked this post, and thanks

    Ah, Joen doesn’t care. He just starts these things then comes back later to clean up the mess. I think its his twisted way of making us do half the work. πŸ™‚

    MySQL for the backend

    Would the images still be able to sit in their own little folder? Or would the photos have to go into a MySQL dbase? I’m wondering if there would be a way (here’s where my ignorance really get’s ahead of me) for the program to say “where are we keeping the files?” then “OK from now on I’ll check image_folder/ and ask for metadata” and then (anyone see Dude where’s my car?) it files the metadata in MySQL but keeps the images out of it, only associating metadata to image.

    So, this magical database would have “metadata/album/etc points to image_folder/image.jpg” and build a page appropriately. Perhaps that would be quicker rather than have a server thrash around hunting down big images it just hunts down the pointers.

    But, then perhaps that gets away from Joen’s “simple” idea of just dropping an image in a folder and being done with it. Could a compromise be a more robust interface for tagging and metadata and album naming and such and then a more simple interface that just has one button, “recheck image_folder/ and toss new images into album_uncategorized”

    Ok, hang on, I was letting this get away from me for a minute. I re-read Joen’s original brief.

    Ok, interface button, create new album, “where is this album’s photos?”, image_folder/mom/, “OK, any image in that folder is now in the “Mom” album”, “I’ve found three images in that folder, would you like to title/tag/rate/ them if not I will use filename prefixes for titles”, OK, Done.

    Now, the location of an image determines its root album but the metadata could be used, optionally, to describe “floating malleable albums”. And, in future, you drop a new image in the folder, return to the admin area, click “recheck image_folder/mom/”, “I have found 2 new images, do you want to assign title/metadata/yadda yadda?”, Click, Done.

    I yearn for the day when we can all gather around a holographic conference table and I can just draw a picture and show you what I’m thinking. My doodles are far more concise.

    Joen, I’m going for a record longest comment. Maybe we should make Jonas come up with a plug-in that counts how many words I use in a comment and won’t let me post if I go over my daily limit. This one is 483. πŸ™‚

  12. Rogier says:

    Plogger looks very good. I didn’t no about it, so thanks for that.

    And I’m looking forward to try Zen-photo, which looks promising as well.

    Like you Joen, I’ve also tried allmost every single open source gallery system out there, but I was never really satisfied with any of the systems.

    Get your opensource gallery on πŸ™‚

  13. Jonas Rabbe says:

    MySQL for the backend

    That makes sense to me, then it’s easy to add new information about images (tags, ratings, viewer ratings, smart albums). Even if you have photos organized in folders as albums, it would still be easy to find all the photos (through the database) that have a rating greater than ???? and create a “fake” album from those images simply using the path for each image stored in the db (or similar). I guess I’m also getting ahead of myself, especially given I have no clue about Tristan’s coding abilities, but it seems to be a gallery solution I can be excited about.

    The thing is also that I am not completely sure what it is I am looking for in a gallery. In a way I want an online iPhoto, but it should also be somewhere I can show just the pictures I want to show people. The ability to password protect albums would also be interesting, gives rise to another thought, if an image is in a password-protected album, but also in an open “smart-album” is it shown in the smart-album? Think about the posible information leaks here… Should images in a password protected album be protected too? If we request an image directly, should it simply be shown or should be protect it? Just some thoughts that you should at least touch upon.

    Or would the photos have to go into a MySQL dbase?

    The photos could be stored in the db, but normally you would store the photos in the filesystem, and have paths to the photos in the db.

    Maybe we should make Jonas come up with a plug-in that counts how many words I use in a comment and won?t let me post if I go over my daily limit. This one is 483. πŸ™‚

    I was going to say “done”, but I just got up and I don’t think it’s that important. It would be of more use to have a plugin that discovers rambling comments and asks the commenter to clean it up… πŸ˜‰

  14. Joen says:


    As you already know, I’m truly excited at the prospect of your system, and I dig those specs.


    Joen, these last few posts, (photo gallery, editable sidebars) are really crying out for your “subscribe to post without comment” idea.

    You’re right. It should now be added to the sidebar, right below the entry meta. I’m not entirely sure under which circumstances it appears, but it should appear on all posts with comments allowed, for users that aren’t subscribed.


    A pleasure to hear from you. I’m certainly open to give Folderblog a second peek. As you might have noticed, the whole market for these systems have been looking pretty bleak for a long while, being able to actually pick between good systems is a delicious luxury. I’ll definitely take a look at it. Feel free to post here when FB3 comes out final, and I’ll install it.

    Tristan, Chris,

    Joen – I’ve hijacked this post, and thanks


    Ah, Joen doesn’t care. He just starts these things then comes back later to clean up the mess. I think its his twisted way of making us do half the work. πŸ™‚

    Oh I care! And the fact that it’s worth hijacking like this is most excellent, please do. The fact that there’s now a seriously positive outlook to a system that’ll work is super-exciting.

    And yes, it is my twisted way of making you all do the hard work πŸ™‚

  15. Jonas Rabbe says:


    You?re right. It should now be added to the sidebar, right below the entry meta. I?m not entirely sure under which circumstances it appears, but it should appear on all posts with comments allowed, for users that aren?t subscribed.

    Maybe you should fill out the field with the email from the comment cookie if it’s set. Seems wrong that I have a cookie for your site, but have to write in my email.

    Just use some code like:

    $comment_author_email = (isset($_COOKIE['comment_author_email_'. COOKIEHASH])) ? trim($_COOKIE['comment_author_email_'. COOKIEHASH]) : '';

    and insert the the $comment_author_email as the value for the field.

  16. Joen says:


    Thanks, I’ll add that code at some point. Right now I’ll hold back, because it would mean hacking the Subscribe To Comments plugin further (it’s actually the plugin that generates the text field). Maybe instead you should forward this suggestion to the author of the plugin?

  17. steve says:

    Joen – As usual your mind (creative and intellectual) has put out a great post. I’m excited to see what the other great minds (Tristan = pressure) come up with. I’m currently messing with SlideShowPro from Todd Dominey for a client but would love to pass off PhotoStack for something that matches what you’ve laid out. Seems like you think like the rest of us in sorts of what you’d look for or how you’d do things.

    I guess I’ve fallen off the face of the earth, new baby and all , so I hadn’t seen the re-re-redesign of your site. Nicely done! I can’t wait to get home to see it on a real computer, I’m traveling in Florida with a crappy PC laptop. One thing as a sidenote though, I catch my blog feeds through bloglines and all your lins are not relative to your site in the feeds I pull. Not sure if that’s your side or Bloglines side.

    Best Regards,


  18. Chris says:


    The ability to password protect albums would also be interesting…

    I was thinking about that too. With all this magic metadata we’re adding we could add a “no-show” tag to an image. Then the image would no longer show up in any album floating or otherwise. Further, password protecting the album folder would restrict random google-finds.

  19. Joen says:

    The ability to password protect albums would also be interesting…

    I respectfully disagree. I think this should be left to .htpasswd files.

  20. Chris says:

    I think this should be left to .htpasswd files.

    Oh I agree but all I’m suggesting is that a tag be added so that those images in .htpasswd-ed folders not get mixed into floating albums.

    An image is tagged blue but exists in a .htpasswd-ed folder. It’s blue so it’s in the blue floating album but it’s passwd-ed so the link brings up a password request. By adding this “noshow” tag or maybe “nofloat” tag you avoid unneeded frustration for end users.

  21. Chris says:

    I?m not quite sure I understand what you mean.

    That’s because I’m scatter brained. πŸ™‚

    That’s what the “noshow” tag would do. If an image or album is “noshowed” it just doesn’t appear to casual visitors and it wouldn’t e generated in the source for any album page. One of those times when a doodle might make my “rambling comments” more coherent.

  22. Joen says:


    I’m not quite sure I understand what you mean. My main reason for thinking we should not put effort into password features is that “people hate having to log in”. They hate even more “secret areas out of their reach”. By that I mean that showing an album that not all people have access to is likely to only irritate them… For the very same reason I’m keeping a personal photo gallery in a non public directory.


    Great to hear from you. Congratulations on the baby! I hope things are well with you and yours.

    I haven’t encountered SlideShowPro?

    Edit (Admin privilege): I just logged in to my Bloglines account to check everything was dandy… I couldn’t find any problems? The problem might be related to my feeds changing address, but the old addresses should be redirecting…

  23. Tristan says:

    Picking up…

    Chris (#11) – I think you’re thinking a little too much into the database – I’ll just be storing metadata. Lots of text, in other words. So, title, description, all comments, tags, etc. It’s independent of the image folder structure. Ideally, I’ll design it so that the data in the database gets initialized to some default values when a new album or image is seen (one that doesn’t already have an entry in the db) and the admin can further customize it once the images are uploaded and albums created.

    I thought through the implementation of this a lot last night, and it seems like a managable task. I thought of quite the elegant way to monitor new albums and uploaded images. Essentially, I’ll use an object-oriented model, and each image will be an object, as will each album, and each “group” or arbitrary set of images from the gallery. When the album is viewed, I use the folder structure to find which photos to display (using a single album as an example) and make a new Image object for each of them. The Image object’s constructor takes the filename (full path), looks it up in the database, and if it exists, then it uses the existing metadata. Otherwise, it makes some default info out of the file/folder names and makes a new database entry. Then (this is the cool part) depending on the size of the image requested (thumbnail, normal size, full size, or even custom size) it processes the original image into that size and caches the resized image so it doesn’t have to be processed at that size again. This way, one of photostack’s biggest weaknesses is killed — photos are now processed on the fly as required instead of all at once, which causes server timeouts.

    Jonas (#13) – Password protection isn’t something I’m going to implement at least in the first version. I could allow you to hide individual photos or albums from the public, but I’d rather not go further than that. Joen is right about .htpasswd being the best solution for those kind of things – just make a new gallery in a new folder and protect it that way. Pretty easy.

    Joen (#14) – I’ll be back to my own site soon enough (with a full spec sheet); it’s just so much easier to post here with your little preview thing. πŸ˜‰

  24. Chris says:


    Head shaking in the affirmative

  25. Jonas Rabbe says:

    I thought of quite the elegant way to monitor new albums and uploaded images.

    It does indeed sound elegant. My computer science experience gives a warm thumbs up, so get cracking already πŸ˜‰

  26. AkaXakA says:

    Now that sounds good Tristan!

    As Jonas said, get cracking!

  27. Teddy says:


    I am also looking for a new Photo Gallery and the articles here are very interesting, to say the least.

    I’m looking forward to trying a few of these over the holidays, but I wanted to ask if it is possible to show EXIF data when using Zenphoto?

    kind regards


  28. Dave says:

    ZenPhoto for win

Comments are closed.