The Martin Grids

Martin Grid #4

Some further explorations in a code-based response to art. Last year I stumbled across the Agnes Martin retrospective at Tate Modern. I wasn’t aware of her work at all, but one of the joys of Tate membership is encountering surprising things that you wouldn’t normally seek out. I went back again and again, and subsequently read everything I could about her. I can’t really fully explain why her stark abstraction and pale colour palette has got so under my skin, but I haven’t stopped thinking about it since. I don’t mind saying that I got seriously emotional, particularly in the room that contained The Islands.

The mathematical precision of her grid paintings clearly lend themselves well to a programmatic response, and I wanted to explore this a bit in code. As luck would have it, I recently found that the peerless Joshua Davis (who has been a massive influence on my digital life since has made his Hype for Processing tutorials in generative art available through Gumroad.

I’ll save some specific thoughts about Hype (a framework that I used to use in Flash for music-reactive visuals) for another post as I explore it further, but for now, it’s reintroduced me to Processing as a language, which will, finally, now replace Flash for me as my creative technology tool of choice. There are some barriers to entry – mostly in the translation model which is exactly what Hype sorts out for you. For this task though, I wanted to try and stay away from helpers but have a pretty stark method of producing random grids. Nothing remotely complex about any of this stuff, it’s drawing API 101. What excites me, however, is the ability to reduce the process to it’s most fundamental quality. As I’ve read more and more about Agnes Martin’s life and practise, I’ve been hugely struck by her own quest for an ordered simplicity in describing her perception of the world and how it’s translated into her art. As someone who has had a difficult couple of years, this appeals hugely to me. In fact the very basis for my finding a minor creative renaissance in myself at the moment (musically mostly, but also in my appreciation of art) has been in a careful curation of my mental environment, removing harmful things and managing the remainder into some kind of order.

Agnes Martin grid paintings
Agnes Martin, Untitled

I’d like to extend this response to Martin’s grids into a more procedural practise, humanising the lines and introducing additional elements outside the mathematical constructs which are her artistic work at it’s most reductive. As she moved through her body of work, an emotional element enters into it, mostly through the use of a muted pastel palette. It’s this aspect that I found most appealing about her. We tend to think of ordering a busy, noisy mind (whether through therapies or drugs) as a removal of those hurtful, uncontrollable emotional elements. Where as I have found, both in my own experience, and how I perceive Martin’s work, that the abstraction of that noise into an ordered form – the grid, a schedule, a structure – gives space for an honest opening up of emotional responses. And perhaps a more authentic creativity as well.

Examples of Martin grid outputs:

Martin Grid #3

Martin Grid #3

Martin Grid #5

Martin Grid #5

Gallery – 10 outputs of the Martin Grids

Code (Processing):

int pad;
boolean frame = true;
int cols;
int rows;
int gridCanvasWidth;
int gridCanvasHeight;
int tStart;
int picNum;

void setup() {
background(235, 235, 235);
pad = 10;
tStart = millis();
gridCanvasWidth = width - (pad*2);
gridCanvasHeight = height - (pad*2);


void draw() {

// draw the grid every 5 seconds
int timer = millis()-tStart;
tStart = millis();


// press S to save a png
void keyReleased(){
if(key == 's' || key == 'S')
void drawGrid() {
// function for drawing the Martin Grid on the basis of a random selection of columns and rows
cols = (int)random(2,70);
rows = (int)random(2,50);
float spacerX = (float)gridCanvasWidth/cols;
float spacerY = (float)gridCanvasHeight/rows;
float tracker = pad;
stroke(150, 150, 150);
// columns
for (int i = 1; i < cols; ++i) { tracker = pad + (i*spacerX); line(tracker, pad, tracker, height - pad); } tracker = pad; //rows for (int i = 0; i < rows-1; ++i) { tracker += spacerY; line(pad, tracker, width-pad, tracker); } if(frame == true) { stroke(20, 20, 20); rect(pad, pad, gridCanvasWidth, gridCanvasHeight); } }

The Digitonal Ambient Box


The Digitonal Ambient Box

Over the last couple of weeks I have been revisiting my old MAAP player project, bringing it up to speed to take advantage of some new technologies that flash player 11 offers.  Mostly, this was an exercise in keeping up with my talented team and exploring some possibilities for the Flash platform for some upcoming project work, but I also do like to set myself a challenge every once in a while to stop my code chops from atrophying too much in my largely management and creative role here.  Since the MAAP project seems to have fizzled out, I thought I would purpose it to my own musical project, Digitonal.  I’ve been doing quite a lot of ambient stuff recently and thought it would be fun to write something specifically for it.

The primary technologies I’ve used in this rebuild are listed below and it’s been interesting working with these new frameworks which I think offer much to the flash platform.

Starling: A fantastic framework for gpu-accelerated 2D animation, which makes use of the new Stage3D access (formerly known as Molehill).  The smooth animation of the orbs that I’m getting here, and the effortless particle system are both based in Starling and, whilst it has some quirks (largely due to it’s insistence on mirroring the normal Flash display stack) the results you get from it are stellar.  This is pretty much always hitting 60fps without blinking and I know that my previous implementation of this idea had a performance way, way below that.

NAPE: A very promising new physics engine.  I’ve always struggled with the more or less standard Box2D framework and so this is a refreshingly useable alternative which has been a joy to work with.  Strongly recommended for your physics modelling needs.

Tonfall: Andre Michelle’s fantastic as3 audio framework which I’m using here for the sample-perfect looping, pitch control (couldn’t even have conceived of coding something like that myself) and support for WAV samples (which, whilst it obviously places a huge burden on filesize for online delivery, helps raise this into the realm of something approaching what I’d envisage as an artist).

The whole thing took about 2 days to code and I’ll make the source code available on this post as soon as I have some time to refactor so you can point and laugh.  I’m also keeping a very close eye on AIR’s forthcoming Starling support for iOS and I’m hoping to do an iPad port of the application at some point in the near future.

>> Launch the Digitonal Ambient Box (N.B. – the site uses high quality audio samples about 11Mb in total – fast connection and a little patience required!)


This is not the kinect hack you’re looking for

I have a massive backlog of posts to get up on this blog which I’ll address after the much needed holiday I have coming up. Things on my mind include the inaugaral Digital Shoreditch festival and summit which was brilliant, some new flash work which I’m hoping will be the seed of a great idea (btw, if there are any Children’s artists/designers reading, get in touch) and some thoughts on the new 3D technologies that are coming to your browser soon.

In the meantime, I meant to get this complete for my TEDx demonstration, but ran out of time…but couldn’t resist it. It’s not big or clever (was coded in about an hour, if that!), but it does fulfil a childhood urge which I just couldn’t resist!

This isn’t the kinect hack you’re looking for from Andy Digitonal on Vimeo.