The goal of this project is to create a robust open source code base for controlling DSLR and the on-board Raspberry Pi camera from a Raspberry Pi or similar Linux boards.

This project is open source but please contact us before using the code so we can know who is using it and please make sure to link back here in any code you use. This project is in active development but we are happy to work with other groups to develop new features so drop us a line if you are interested.

This code was developed for the TraitCapture project at ANU.

Please cite: Brown, Tim B., et al. TraitCapture : genomic and environment modelling of plant phenomic data. Current opinion in plant biology 18 (2014): 73-79. when using the code.


Currently supported and maintained:
  • Control of multiple DSLR cameras.
  • Captures to JPEG & RAW images if using a DSLR, JPEG & TIFF if you are using any other type of Camera.
  • Captured photos are captured to ram, cached on disk and uploaded to a server of your choice via sftp or ftp.
  • Cameras settings can be controlled from a web page.
  • Wifi and ethernet. Creates an ad-hoc wifi network no know network is found for easier config of new systems and in new wifi environments.
  • Camera can auto-upload both timestamped and fixed filenames (for use as very slow framerate ip camera with auto archiving systems requiring a fixed image name).
  • Extensively tested with Canons (600D, 700D, 70D). Should work with Nikon cameras but not extensively tested.
  • Ansible provisioning system for Raspberry Pis running Arch Linux.
Planned or in development:
  • Time-series scheduler to auto-set camera exposure and shutter speed settings (useful for shooting 24-hrs a day in fixed but variable lighting situations like plant growth chambers).
  • Auto Bulb-ramping: we are aspiring to be able to shoot 24-7 DSLR timelapses through sunrise and sunset.
  • DB-based camera management system.
  • Weatherproof and solar powered camera housing for full remote timelapse solution.
  • Multiple configuration file formats and specifications (support yaml, similar to Gigavision).

Automatically detects connected usb DSLRs and the Raspberry Pi camera (just duplicate example.ini to picam.ini and eyepi.ini and change the configuration values). DSLR’s are given a unique ID based on hardware serial.

Camera name can be easily changed to a user friendly value through either the webinterface or through the configuration file.


These requirements are specified and provide installation methods within the ansible playbook.

  • python3.5
  • python-cffi
  • exiv2
  • gphoto2
  • libgphoto2
  • opencv 3.1 [Arch-Extra]
  • openvpn (optional)
  • tor (optional)

Extra Details§

If you are capturing using a Raspberry Pi camera you need to install py3exiv2 if you want your images to have exif data, as the method of capture doesn’t add exif data.

There is code to support the IVMech IVPort, however its a little tricky to get working as there is no method to detect the device yet, and of course you need to install RPi.GPIO.

To get into the web interface using the wifi the default ip address is and you will need to use the user admin:spceyepidefaultaccess (it must be running first).

SPC-EyePi also updates from the master branch of this repository.