The Rub


DIY Digital Photo Booth


My wife volunteered to do a photo booth for a school event, even though we had never done a photo booth before. No problem, how hard can it be?

I wanted to do it with existing equipment, and without expensive software. This guide will show how we created a digital photo booth using common components and open source software. The event went really well, but there is plenty of room for improvement for next time.

The results were great! Here’s my son, hamming it up. Example image with my Son hamming it


  • DSLR Camera. I used a Canon 400D (Digital Rebel XTi).
  • iPad or other touch screen device
  • Macbook (See notes about an SoC/Raspberry Pi alternative)
  • shmile - The DIY photobooth, at your service.
  • Display - external monitor or TV
  • Photolive - Live slideshow viewer
  • Photo hosting service - we used smugmug

How does it work?

The macbook is connected via USB to the DSLR running shmile. Instructions for installing and running shmile are available at its github page.

Macbook hooked up to camera and monitor

The camera itself is on a tripod with a flash and turned on. Be sure to disable the power saving settings to prevent the camera from turning off when idle. I also purchased a power adapter so that we didn’t have to rely on battery power, especially given the amount of flash use.

Camera hooked up to laptop

Shmile will start a local web server on port 3000. The iPad is set up to view the web server, which will present a giant “Start” button. I could not get the local wifi network to work properly, so I created a local ad-hoc wifi network from the macbook.

Ipad ready for action

Once the button is pressed on the ipad, a series of four pictures are taken, and then arranged on a pre-defined template. The template image is how we got the name of the event with the school colors and logo on the images.

Lastly, I connected an external display to the macbook, using Photolive to view a slideshow of the directory of completed photos. Photolive has a nice feature that will immediately display new photos that are saved to the directory, so that as people get their picture taken they can immediately see it on the big screen. Additionally, people waiting in line or walking by can see previous photos that have been taken.

Picture of the whole

Before the event, we prepared a gallery with a password on smugmug . We had a sign at the table with the url as well as the password, which was also emailed out after the event. This allowed everyone to retrieve and browse the photos securely.

Room for Improvement

Being able to piece together a photo booth solution with existing hardware was really fun, and the results using shmile were impressive. That said, there are several areas to improve for next time.

First, my usb cord from the camera to the macbook was too short - I’ll have to get a longer one for next time.

Second, people (especially kids) tended to watch the ipad instead of the camera. Perhaps mounting the ipad immediately adjacent (under) the camera would help, but I didn’t have a way to do that. What we did end up doing was turning the ipad toward the camera and having an operator push the button and helping take everyone’s picture - kind of defeating the purpose of a booth.

User point of view

Third, occasionally the node app shmile crashed. This happened two or three times, and I had to restart it at the command line. Running it in a while true loop (i.e. “while true; do coffee; done”) would have fixed this and I will probably do that next time.

Fourth, Photolive was a little buggy. If I removed a photo from the directory, photolive would show a blank screen in its place. Finding (or writing) a more robust live photo viewer would be good.

Last, being able to run it from a SoC type device instead of a macbook would really slim the setup environment.

Raspberry Pi Attempt

I recommend first getting it to work on a macbook where these things are easy. Ultimately it would be really nice to use an embedded SoC type box instead. I wasn’t able to get it working with a raspberry pi in time, so I ended up just using the macbook. I wrote up an issue at github but I don’t expect the author to support ARM. It is also possible that newer ARM boards might work with it right off the bat.

Installing Shmile on Raspbian (Debian Wheezy)

Once you have your Raspberry Pi installed, log in to the console or via SSH and bring it up to date:

sudo apt-get update
sudo apt-get upgrade

Now that it is up to date, install the shmile dependencies. We’ll use the latest and greatest from

curl -sL | sudo bash -
sudo apt-get install nodejs
Try running "npm --version". If you get a segfault, you may have to re-compile node from source using the --without-snapshot option, per

Finally, install the remaining dependencies per the shmile documentation.

sudo apt-get install imagemagick gphoto2
sudo npm install -g gulp coffee-script

Update to pick up connect dependency

npm update

I could get shmile to the point that it would take a picture, but I couldn’t get it to take all 4 pictures per my issue. Different hardware may solve this one, or perhaps I hit a shmile bug.

Eventually getting it to run on a little board strapped to the tripod would be a nice way to eliminate the macbook, drastically simplifying the setup.