Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Candle 2017


Candle 2017 is a re-implementation of an interactive art installation by Nuno Godinho, whereby a beautifully framed high quality display shows a candle burning video, against a pitch black background. Blowing into the display triggers natural candle reactions: the flame flickers more or less depending on the blowing strength and can even be fully blown out with a strong enough blow - when so, the base candle burning video is restarted and smoothly faded in after a few seconds.

Originally written in C++ using OpenFrameworks, Nuno never got it to run with acceptable performance on the desired target platform, a Raspberry Pi; it required being driven by a much more powerful and expensive system, like a Mac Mini.

This project is a Python implementation that succeeds in delivering the required performance on a Raspberry Pi.

Heads up: there are no silver bullets here! It's not like Python on a Raspberry Pi has suddenly more performance than well written C++ code on a Mac Mini. It just takes a completely different approach, better leveraging the available resources on the smaller system.


Refer to Running Candle 2017 to learn everything about the requirements, installation, configuring, running, and using Candle 2017.

For a high level overview of the code see Candle 2017 Code Overview, keeping in mind that going through Running Candle 2017 first is recommended.


This project wouldn't be possible without several open source software packages; here's a thank you note to the projects Candle 2017 directly depends on, in particular to their authors, maintainers, contributors and sponsors:

  • Raspbian, the operating system based on Debian optimized for the Raspberry Pi.
  • Python, the language and interpreter.
  • Twisted, the event-driven networking engine.
  • txdbus, for its Twisted based interface to DBus.
  • autobahn, for its Twisted based WebSocket implementation.
  • evdev, for its bindings to the Linux input handling subsystem.
  • pylint, a Python source code analyzer.
  • omxplayer, a flexible and high-performance Raspberry Pi command line video player.
  • ALSA, the Advanced Linux Sound Architecture project.
  • charts.js, a simple yet flexible JavaScript charting library.
  • chartjs-plugin-annotation.js, a charts.js plugin that draws lines and boxes on the chart area.

For direct dependency completeness, Wires, a Python Callable decoupling library, by one of the authors, is also used.

Lastly, a thank you note to the Raspberry Pi Foundation for the Raspberry Pi.