Anyone is more than welcome to open tickets to discuss bugs, new features, or
just to ask usage questions (I find this useful for gauging what questions
ought to feature in the FAQ, for example).

For anybody wishing to hack on the project, I would strongly recommend reading
through the PiCamera class’ source, to get a handle on using the
mmalobj layer. This is a layer introduced in picamera 1.11 to
ease the usage of libmmal (the underlying library that picamera,
raspistill, and raspivid all rely upon).

Beneath mmalobj is a ctypes translation of the
libmmal headers but my hope is that most developers will never need to deal
with this directly (thus, a working knowledge of C is hopefully no longer
necessary to hack on picamera).

Even if you don’t feel up to hacking on the code, I’d love to hear suggestions
from people of what you’d like the API to look like (even if the code itself
isn’t particularly pythonic, the interface should be)!

If you wish to develop picamera itself, it is easiest to obtain the source by
cloning the GitHub repository and then use the “develop” target of the Makefile
which will install the package as a link to the cloned repository allowing
in-place development (it also builds a tags file for use with vim/emacs with
Exuberant’s ctags utility). The following example demonstrates this method
within a virtual Python environment:

If you wish to build the docs, you’ll need a few more dependencies. Inkscape
is used for conversion of SVGs to other formats, Graphviz is used for rendering
certain charts, and TeX Live is required for building PDF output. The following
command should install all required dependencies:

If you wish to run the picamera test suite, follow the instructions in
Development installation above and then make the “test” target within the sandbox:

$ workon picamera
(picamera) $cd ~/picamera
(picamera) $ make test

Warning

The test suite takes a very long time to execute (at least 1 hour on an
overclocked Pi 3). Depending on configuration, it can also lockup the
camera requiring a reboot to reset, so ensure you are familiar with SSH or
using alternate TTYs to access a command line in the event you need to
reboot.