A few months back, we went to a friend’s wedding at which they had one of those photo booths where you can bundle in with a load of friends, take a picture and take away a printed photo. Until I saw one up close, it never really occurred to me just how straight forward they actually are, and how easy it would be to put one together. With my sister’s wedding coming up, I thought I’d have a go at making my own.

In principle, a photo booth of this nature consists of a camera, a preview screen, a printer, and some sort of trigger, be it a touch screen or some other input device. I had most of these bits and pieces lying around in some form or another, apart from a suitable printer, for which I used a Canon Selphy CP 530, which I managed to pick up form eBay for about £11.


In terms of the software, I created an app using the Processing framework, in conjunction with some basic Automator apps and folder actions. For the functionality of the photo booth, I managed to break the functions down into 4 main areas which complete the process of capturing a photo.

Firstly people need to be able to see a preview of what the camera can see, in order that they can pose within the shot. For this project, I used a Canon 350D DSLR, ordinarily, I would have like to have used the movie mode featured on most SLR’s, to provide the video preview for the photo booth, however the 350D doesn’t have a movie mode as it’s a relatively old model. I messed around a fair bit with different pieces of software including the bundle Canon software, and toyed with the idea of using the Canon SLR SDK, but actually found that the easiest way to create the preview, given the time and resources that I had, was to hook up a webcam which would display the area covered by the camera. I then mounted the webcam above the DSLR on a tripod so that it would roughly show what the DSLR sees. It’s a bit of a long way round but seemed to be the best solution in this instance.

The next main piece of functionality was providing the user with the ability to release the shutter. To do this, I made use of a USB button which behaves like a keyboard with a single key. With this, I was able to allow Processing to preform a function on detection of a specific keycode that was fired by the USB button. When the Processing app detected this key press generated by the USB button, I had it trigger a countdown, of approximately 10 seconds, to the shutter release allowing those using the photo booth time to get ready for the photo. The countdown was displayed on screen to indicate the time remaining.

For the shutter release itself, I made use of the ‘open()’ function within Processing, which allows you to open an application or file with the native launcher of the computer on which the app is running. The ‘open()’ function loaded a simple external application which I created using Automator. The single function of this Automator application was to release the shutter on a connected camera and save the captured image to a designated folder. Automator apps are extremely easy to setup and provide you with easy to access to many system functions in a secure and hassle free way. I found it to be the perfect solution for the task in hand, especially considering that the alternative was to wrangle with Canon’s own software or SDK!

Once the DSLR captured the photo, I then set the Processing app to check the capture folder for the most recently generated file. When found, the file was loaded onto the screen, and displayed for approximately 15 seconds, to allow the user a chance to both review the final image and decide whether they would like to print the image or not.

If the user clicked the USB button again during this review period, a second Automator app was then used to copy the most recent file in the capture folder (the photo currently being reviewed) to the print folder. A folder action on the print folder, again created using Automator, was set to print any files which were placed within it. Once the review timer had elapsed the whole would process reset, allowing the next photo to be taken. Throughout the entire process, messaging and feedback was provided on screen to prompt the user of their options throughout.

As mentioned, all of this functionality was wrapped up into a Processing application, which made it easy to launch full screen and coordinate all of the actions required to go from pose to print.

The use of Processing, in conjunction with Automator, made the development of this app fairly straight forward. The bulk of the code within the Processing app was there to deal with things like displaying the preview image, triggering the shutter release, reviewing the photo and then printing the photo if required. I also included a few settings to adjust things like the orientation and mirroring of the preview image, just incase we needed to set the webcam up in a different position, and the timer functions which dealt with the scheduling different functions and events within the app.


As a simple photo booth project this was a lot of fun to develop, and the end result proved to be quite popular. I also think it would be fairly easy to enhance and develop this project into something a bit more substantial in future. There are some really clever examples of photo booth set-ups out there, from simple shoot and print booths like this example, to more inventive and entertaining solutions like those which allow users to record short video clips on high frame rate video cameras, which can then be played back in slo-mo, right through to the crazy Purikura photo booths which include all sorts of image manipulation options and post production features. I think it’s a really interesting area of recreational tech, and definitely something worth keeping an eye on…

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s