I built a photobooth in the spring which I used at my wedding, and then at six other friends' weddings and events this summer! It was a huge hit. It combines aspects of a vintage view cameras, Japanese purikura, all within the context of modern instagram selfie culture.
It’s self-serve: people walk up to it, maybe put on a funny hat, pose, and press the plunger button. An LED blinks a couple times and the camera fires along with a huge umbrella flash. Another LED blinks while the photo is “processing”. For some events I have have it upload to Instagram within a few seconds, and in other cases I have the photo merged into a projected slideshow. Here are some of the photos it's taken:
Inside it uses a Canon DSLR camera connected to a Raspberry Pi. The Pi's GPIO pins are used with some basic electronics to be triggered by a handheld big red button, and some blinking status lights on the front of the camera. The Pi runs a python script that can either upload photos immediately to Instagram, or add them to a slideshow that can be shown on a TV or projector via the Pi's HDMI or composite video port. It uses ImageMagik to crop or resize images (to Instagram's specs).
For instagram, I ported Lance Newman's Instagram Hack to Python and made a nice library out of it. Since Instagram is a walled garden and vehemently forbids this kind of thing, this required continuous reverse-engineering and workarounds, and never really worked perfectly.
For the slideshow, I used the awesome Info Beamer with which I made a custom slideshow that could be preempted with new photos as they were taken. Delightfully, it uses the Raspberry Pi's GPU directly to do smooth transitions, and doesn't even need X11 or any of that associated cruft.
The camera has a remote flash trigger, and a nice 11-16mm f2.0 wide angle lens, so the photos turn out great.
I chose the dimensions from thin air and started cutting the wooden box out of scrap wood on the VHS laser cutter. The front panel has the “Cycamatic” wordmark etched in along with the labels for the three status lights.
Inside the box is a platform for the camera to sit on. It’s got a slot to allow a thumbscrew to fasten to the camera’s tripod mount and be adjustable from front to back. This is important so that the camera can be adjusted so the lens is flush with the opening on the front.
The thumbscrew is fashioned from a standard 1/4" bolt with 20 TPI (threads per inch). I laser-cut a big round piece with a hex hole that is friction-fit onto the bolt, and another that fits on a nut. Together these allow easily mounting the camera and tightening it against the platform. I’m really proud of how well this works!
The project took a weekend to build (mostly done at VHS), but it took months to refine and perfect. Reliability, timing, network uplink, exposure/focus, and little UI/UX details were unexpectedly fiddly.
I've now carted this thing all around the country to about a dozen events, so it's a bit worn out. I have so many ideas for improvements and so many requests to commercialize this. Some notes to my future self...
Setup is always frustrating. Sometimes there is a nice wifi connection I want to use, sometimes it’s behind a captive portal, and sometimes I’m just using my phone as a hotspot. It would be easier if the Raspberry Pi advertised itself with mDNS so I could find it without guessing IPs or connecting the ethernet cable every time. A dedicated USB GSM uplink would be even better.
Instagram fails in unpredicatble ways, usually about halfway through the night when we hit some sort of API limit and they start to throttle uploads. I haven’t investigated this much, so my software doesn’t handle this very well. The photobooth keeps working, and photos are sort of queued for later upload, but there are race conditions and bugs abound. More research required.
The flash setup isn’t ideal. It has three different components (transmitter, receiver, and flash) which all operate on batteries (all of different sizes and types). It doesn’t need to be wireless, and I’ve been going through far too many batteries.
I could go on. Like most projects, it's 90% done with 90% to go.