Skip to content
a DIY frozen moment wobble GIF photo booth with precise simultaneous image capture for fast motion
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Spark Shower GIF Booth

Three cameras, an angle grinder, and you.

Sample GIF

Hardware Requirements

  • 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, running in the background, detects new files in this directory, it runs 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.


  1. Install Homebrew (if you don't already have it).
 /usr/bin/ruby -e "$(curl -fsSL"
  1. Install necessary libraries.
brew install imagemagick gifsicle gphoto2 imagemagick mail
  1. 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.)

  2. Set up mail/postfix to enable emailing. (Differs by operating system.)

  3. Fire up your local webserver. (Differs by operating system.)

  4. Place, index.php, and in ~/Sites/. Create directories named "gifs", "old", and "raw" in ~/Sites/.

  5. 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.

  6. With all three cameras connected by USB and turned on, find their port numbers:

gphoto2 —-list-ports
  1. 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
  1. In another Terminal window, run:
  1. 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.

  2. 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.)

You can’t perform that action at this time.