Spark Shower GIF Booth
Three cameras, an angle grinder, and you.
- 3 cameras and lenses of similar quality supported by gphoto2 image capture. My setup included a Canon 7D, Canon 5D Mark II, and Canon 5D Mark III. (Any number of cameras can theoretically work as long as you have enough USB ports.)
- 3 tripods
- 3 USB A to Mini-B cables
- 1 USB hub
- 3 remote shutter release cables wired in parallel
- plexiglass shield
- Mac or Linux computer. (Installation instructions assume a Mac.)
- external monitor w/ keyboard and mouse (for viewing/emailing station)
Theory of Operation
Three cameras are triggered simultaneously by remote shutter release cables wired in parallel. Three simultaneous gphoto2 terminal commands listen on three USB ports for new photos. When photos are detected, they are downloaded to ~/Sites/raw. When filewatch.sh, running in the background, detects new files in this directory, it runs sparkbooth.sh to convert the JPEGs to still GIFs and assemble them into an animated GIF. The final GIF is saved to ~/Sites/gifs; a timestamp is appended to the JPEGs' filenames and they are moved to ~/Sites/old.
- Install Homebrew (if you don't already have it).
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- Install necessary libraries.
brew install imagemagick gifsicle gphoto2 imagemagick mail
Install and run mac-gphoto-enabler. (Remember to use the corresponding "disable" script when you're finished running the booth or other applications may have a problem identifying your camera.)
Set up mail/postfix to enable emailing. (Differs by operating system.)
Fire up your local webserver. (Differs by operating system.)
Place filewatch.sh, index.php, and sparkbooth.sh in ~/Sites/. Create directories named "gifs", "old", and "raw" in ~/Sites/.
Set up cameras with same shutter speed, aperture, and ISO. Align cameras so the subject is in the same location in all three frames. (This will take some experimentation once the rest of the booth is setup.) Place plexiglass shield in front of cameras.
With all three cameras connected by USB and turned on, find their port numbers:
- Open up three windows in Terminal and run one of these commands for each of the USB ports. (The filename assignments may need to be adjusted later based on camera placement: camera2 needs to be the middle camera.)
gphoto2 --capture-tethered --port usb:###,### --filename ~/Sites/raw/camera1.jpg --force-overwrite gphoto2 --capture-tethered --port usb:###,### --filename ~/Sites/raw/camera2.jpg --force-overwrite gphoto2 --capture-tethered --port usb:###,### --filename ~/Sites/raw/camera3.jpg --force-overwrite
- In another Terminal window, run:
In a browser, navigate to localhost/~YOURUSERNAME and place on the external monitor. This is where participants browse and email to themselves. It will have to be manually refreshed to update with new GIFs.
Fire away! Leave at least five seconds between each camera trigger. (If you don't, photos capturing slightly earlier or later moments may intermingle. This may be a desired effect.)