Hello NodeBox!
I was recently asked to present a workshop at the Interface 2012 conference in Birmingham. The brief I was given was “programming for the humanities”. My instinct was to base the workshop around Python, a language I often recommend to students for its general purpose nature and ease-of-learning. I’ve had a long interest in data visualisation, and been following the NodeBox project for a couple of years, so my hunch was that this might be a good “top down” route into Python…
NodeBox is a “procedural graphics” environment. This means it’s not like a normal graphics app, where you create an image by drawing shapes on a canvas. Instead you specify a set of rules defining the graphics and the computer draws it for you. If that sounds like programming, it is. The set of rules is called an algorithm, and in NodeBox the algorithm is determined by connecting up boxes that do things such as draw a shape, apply a transformation, change a colour, apply randomness etc.
This approach to graphics is useful when…
- you don’t know what you want to create
- the drawing you want to make is very repetitive
- you want to you use external data to determine what the drawing looks like
The first incarnation of NodeBox, took influence from Ben Fry’s Processing environment essentially providing a 2 pane interface with Python code on the right and generated graphics on the left. NodeBox 2 goes beyond this, providing tight integration between node-based programming, direct graphical manipulation, and text-based access to the underlying Python code for each node.

This multi-paradigm single-screen approach is lovely, pre-dating similar approaches taken in environments like Codea, and giving more than a passing nod to Bret Victor’s concept of “dynamic pictures”. NodeBox 3 gets even closer to this, doing away with the Python panel altogether.
After a couple of hours working through the online tutorials, I was up-and-running creating complex patterns like the one shown above, just by connecting up a handful of boxes. NodeBox also supports the ability to load data from CSV files and use the values to drive the image generation. This aspect particularly interests me, and is something I’d like to explore more. Given you can write your own nodes in Python, I presume it would also be possible to make generative graphics using live data from the web…
