The Holiday Party Hack

For this year’s holiday party at The Working Group, I helped build something special to spice up the party – a live, music-synced slideshow of the evening, powered by a nearby photo booth. Take a photo with your friends and loved ones, then see it show up on the big screen seconds later.

photobooth.jpg

The Hardware

To take the photos, we mounted a Canon Rebel T2i with an Eye-Fi card on a tripod in front of a great backdrop. A generous serving of props was provided for people to play with, and the room was well lit.

Also significant – the photo booth had a glass wall on one side, making it easy for partygoers to notice the fun to be had inside, while still allowing for a little bit of separation from the cacophony outside.

outside.jpg

Finally, to allow partygoers to trigger their photos themselves without needing someone behind the camera, Brian Gilham and I built a huge, industrial-looking remote with a massive green button. In reality, we just wrapped the camera’s tiny remote in a larger enclosure and physically lined up the remote’s button with the plunger of a larger button.

button.jpg

The Eye-Fi card in the camera synced its photos automatically with a nearby Macbook Pro.

The Software

To get the photos on the screen, a ridiculous number of steps were used. Hazel, running on the Macbook Pro, copied the photos from the Eye-Fi card’s folder into a dedicated folder in Dropbox. A Node.js app running on a Rackspace cloud server connected to the Dropbox API and received real-time updates whenever new photos were placed in the Dropbox folder. This app downloaded the high-res photos from Dropbox, used Imagemagick to crop, scale, and rotate them appropriately, and streamed them down to all connected browsers.

A Macbook Pro connected to the projector ran a client-side JavaScript app and received real-time photo updates via Socket.io. This app also used the Web Audio API to run BeatDetektor, an open source JS beat detection library, on the audio received by the laptop’s microphone. Finally, Scott Schiller’s 2003-era snowstorm.js library provided the wonderfully tacky snow falling in-browser.

This complicated chain of events made it super simple to build the software – by piecing together pre-made components like Dropbox, Hazel, and BeatDetektor, most of the work was already done. Some extra functionality even came for free – for example, by sharing the Dropbox folder with select people at the party, candid photos could be uploaded from people’s phones directly to the projector screen.

The Results

By the end of the night, more than 350 photos – 1.5GB of data – had been processed by the hack and made it to the big screen. At one point, so many photos were taken in quick succession that the server load spiked to 38 and crashed hard – bringing with it forever.fm, my “infinite” radio station. Despite the small technical hiccups, the hack turned out wonderfully and was a huge success.


Huge thanks go out to Chris Mudiappahpillai, Brian Gilham, Derek Watson and Shiera Aryev and many more for making the hack – and the evening – a resounding success.