PHP Uploader for SmugMug

EDIT (9/28/2009): I pulled the sourcecode out of the post as it was far too long. I have also updated the download package with a couple of important fixes.

I just recently started playing with SmugMug and am really liking it so far. One of my complaints so far is the upload process. Let me be clear here…they have many upload options and odds are good that those options work for the majority of people. But I’m not one of them. Basically I want to be able to keep my online galleries in sync with the photos on my computer and I didn’t see an easy way to do this with the available options. Fortunately, SmugMug provides a solid API and many people have written tools that make use of it. I looked through what people have already written and unsurprisingly didn’t find one that did exactly what I wanted. I did find phpSmug which is a PHP class that makes using the api extremely simple.

Over the course of two days, I have written 2 separate (but related) uploaders that handle the things I need them to. Both require an API key and a valid SmugMug account. These aren’t necessarily the prettiest code I have ever written, but I think they work pretty well.

Download full (UPDATED) package


This one is a fairly simple uploader. You give it the name of an album and a list of pictures to upload and it will upload any files that don’t already exist, replace files that do exist and update the metadata for those files.


This is the one that will keep a filesystem in sync with SmugMug. Point it at a folder and it will create categories, albums and handle the uploading (in the same way as upload.php).


This is a quick way to delete categories. Mostly I made it for while I was testing, but as there doesn’t seem to be a way to delete categories through the SmugMug UI this may be useful to someone.

Standard disclaimers apply to all of this. If it somehow causes the world to end or any other undesired effect, I take no responsibility. That said, it works pretty well for me. If you find any problems, let me know and I will update what I have posted.

Download full package


In my never-ending quest to find the ultimate in online photo management tools, I am currently trying out SmugMug. Currently all of my images are self-hosted as I like the control that gives me. After a recent event however, the software I’m using (ZenPhoto) started choking on my uploaded images. This isn’t really ZenPhoto’s fault as it wasn’t really designed to deal with 10 megapixel images uploaded at full resolution. I considered uploading resized images, but I really like having the full quality pictures available anywhere. As such, I started investigating other options…

Since I generally prefer self-hosted, I started out looking at my options there. There are a LOT of options in the PHP photo gallery world. Things I tried in no particular order:

  • Piwigo
    • There were a lot of things I didn’t really care for in this one. The administration interface was unintuitive and uploads were a pain.
  • phTagr
    • I was curious about this one as I have used CakePHP in the past and enjoyed it. The gallery wasn’t really designed for what I want to do though. phTagr was more about being social then displaying the information in the way I wanted.
  • Gallery 3
    • This one had a fair amount of potential. Though it is currently still in beta it feels like a very nice product. This one is the successor to the hugely popular Gallery2 software. Gallery2 had a lot of power and suffered for it in terms of performance and complexity. With Gallery3 the team decided to strip out most of the non-core functionality and focus and speed and ease of use. In my opinion, they made a good choice there and have been hugely successful. Ultimately what killed this one for me is the way it stores files. Since Gallery3 copies files into a specific folder structure, you can’t easily modify files in bulk once they are in the system.

There are a lot of other self-hosted options, but these are the ones that looked interesting enough for me to experiment with. After ruling them out, I started looking at hosted options. Hosted services I looked at:

  • Flickr
    • Pretty much ubiquitous for photo sharing. But not at all customizable. I like customizable.
  • Picasa Web Albums
    • This integrates seamlessly with Picasa which is probably one of the best photo organizing apps I have used. But again with the lack of customizability.
  • SmugMug
    • No free accounts, but a 15 day free trial. I can do a lot with a 15 day free trial. This one has a large amount of customizability built in. If you don’t like what they have available they let you create a complete theme (I haven’t played with that yet). They also allow you to use your own domain name (on a Power or Pro level account) which I really like. Also, the service uses Amazon S3 for storage and a CDN to get things served quickly. Overall sounds like a winner.

So far in my experimenting with SmugMug, I have been pretty pleased. I will likely end up signing up for their Power level account ($60/yr) which provides all of the features I can forsee needing. File/Album management is less intuitive than I would like, but I will have more on that later.

On the off chance you feel like signing up for SmugMug and want to help me out, my referral code is pJEmU1ps9hXGE

Irssi, Irssi Proxy and Bitlbee

Quick summary: How to make communications as convenient yet convoluted as possible.

In my seemingly endless desire to play with changing the way I do things, I have modified the way I use instant messaging. While at work I am constantly connected to IRC in order to keep up (in realtime!) with things going on in the real world. Yesterday we were comparing the benefits of irc and xmpp trying to determine which technology is cooler. One of the nice things most Jabber servers have going for them is the ability to connect to other networks (AIM, MSN, Yahoo, ICQ, etc). As I normally have two clients open for this very reason (xchat-gnome for irc and pidgin for regular IM) I decided it was time to try out BitlBee. BitlBee is basically a lightweight service that creates an IRC interface to various IM networks (including all of the examples above).

Setting up BitlBee (at least in my case) on Ubuntu was absurdly simple.

  1. Install BitlBee
  2. Start the service (sudo /etc/init.d/bitlbee start)
  3. Connect your irc client to localhost port 6667
  4. Type help quickstart and follow along

The way I handle IRC is a bit more complex than many people, so I had a few additional steps. I use irssi and irssiproxy running in screen to stay connected 24/7 (or close enough). The only extra thing you need to do to make that work is add a port to irssiproxy_ports for your bitlbee network.

Vista won’t turn off the monitor

I run Vista at home primarily for gaming purposes (and I like uTorrent). One of the problems I had with it lately was it not turning off the monitor when the power saving plan was supposed to. I would watch it try and turn off, but usually wouldn’t quite succeed. Eventually I determined the problem was having the screen saver set to activate at the same time the monitor was supposed to turn off. I set the screen saver to activate 1 minute earlier and everything is now working correctly.