I recently got a request to find photobooth software suitable for a scheduled event. The use case was as follows:
- Have a stationary camera at a specific location in a venue.
- Camera can be phone or proper DSLR.
- Guests can have as many pictures of them as they prefer taken.
- The pictures must be displayed on a large screen/projector as a slideshow, automatically updating to show the latest images.
Easy and straightforward right?
Anyway, I did the usual, searched for paid online SaaS, or ready made hardware devices for hire in my locale.I soon discovered, Photobooth SaaS can be pricey, way above reasonable cost for financially constrained use cases. I conveyed these findings to my "handlers" and they gave me instructions to “Do whatever you can to ensure we have a working photobooth in a week.", Yaaaaay
This left me with one option; Make the required photobooth, either from scratch or using available open source hardware and software.I searched on hackster.io, Instructables.com and multiple blogs written by people who have made booths in one form or the other. One thing became apparent, quite a significant number used Raspberry Pi’s to control an available camera, the camera types range from sophisticated and high end DSLRs to basic mobile phones as well as the camera module for Raspberry Pi. However, because my usecase demanded high resolution images the Pi camera module was out of the question. I therefore concentrated on solutions that worked seamlessly with DSLR cameras or comparable hardware. From the shortlisted options, I chose two which stood out from GitHub, these are:
- https://github.com/philipptrenz - made in Electron and uses gphoto2 to control a camera connected by wifi or usb
- https://github.com/reuterbal/photobooth - made in C++ and also uses gphoto for controlling a camera connected by usb.
Both have lively github repos with clear instructions on how to install and use them, so i saw no harm in trying out each of them. I used a Raspberry Pi 3 as the main control center for the photobooth software as well as a Canon 1300D camera connected via USB and mounted on a Tripod.
I tested out Reuterbal/photobooth first. During the configuration and initial use, I faced minor challenges getting it to save images. The captured image was not being saved in the configured location. After a bit of "debugging" and troubleshooting, I discovered that, the library requires you to manually capture one image before you can use it or else it would fail. I am not sure if all past and current users faced this issue therefore it might be isolated to my hardware setup.
After manually capturing an image I then proceeded to "fire off a few shots" via the system interface, which were all great.. However, since one of the requirements was for a dedicated slideshow/gallery, I was forced to expore the second library because Reeuterbal did not offer that functionality outside the box.
This library has a straightforward setup. I followed the instructions on the mainpage on GitHub. I connected the camera and captured several shots using the system interface. Unlike the 1st library, this one did not require manual capture of the 1st image to work as expected!
With the image capturing working as expected, I proceeded to test the slideshow feature, which worked as advertised. Further tests also showed that this photobooth also provides a webapp accessible to devices on the same network to enable guests to download their pictures (major yaay).
Because I wanted the image capture to be as seamless as possible and avoid using the mouse to activate the camera, I set out to now create a wireless access point on the Raspberry Pi to enable camera control via connected devices as well as simplify image downloads without the need of an extra dedicated networking device. This was painless, I followed this tutorial and adjusted some steps to meet my expectations.
Further tests after this configuration exposed some very minor issues with the slideshow feature which I was not happy with;
The slideshow lagged behind a bit and was also hidden from the main screen when pictures were being captured. I resolved to find a different gallery service/tool to read the captured images in real time and beam these on to the screen. I searched for and found PiGallery 2 ( https://github.com/bpatrik/pigallery2) which basically reads a chosen directory and displays images automatically. This led me to add a second Raspberry Pi to run the "very tiny server" dedicated to broadcasting the images in real time on a separate screen/interface as the photobooth captures them. Instructions on how to configure PiGallery2 are on its main GitHub page.
The solutions used can be customized to fit any use case, all you need is a bit of coding knowledge and in some cases more hardware components e.g. if you want to automate image capturing etc.
So, next time you wanna throw a party and have a photo booth, you use any one of the libraries above… plus your trusted camera.