Over the past few weeks, I’ve been experimenting with painting in watercolours using my AxiDraw plotter. Watercolour is a medium I enjoy painting in (by hand) as a personal hobby, kind of separate from my public art making, so it’s been interesting to combine it with code. I’ve thought about trying this for a while but I was finally spurred on to do it after I visited Licia He’s studio in April.

This article is not intended as a tutorial, but more of a scrapbook of what I’ve been trying, the results I’ve created and the mistakes I’ve made (and continue to make).

Set up

There are a variety of ways to control an AxiDraw plotter. I do it by creating svgs using JavaScript. I open the svg in Inkscape and use the AxiDraw plugin to control the plotter.

If you’re wondering how to create an svg in JavaScript – I wrote my own class to do this, after finding that other libraries weren’t working as expected for me. My svg builder is on github and you can feel free to use it.

An svg is essentially a series of paths. Usually a plotter moves a pen around those paths. When plotting with watercolour, we also need to create paths to pick up paint, swirl the brush in water and dab the brush on paper towel.

Here’s what my set up looks like in real life, with all the equipment taped in place next to the plotter.

Watercolour set up in real life

I’ve mirrored the real world set up in code.

Doing this required a bit of trial and error to make sure things were placed in the right place, but it wasn’t as finicky as I expected it might be. There is a decent margin for error since the areas for the paints, paper and water are relatively large.

Watercolour set up in code

This output would paint a series of vertical wavy lines on the paper. The blues and greens represent the colours that will be painted, while the thin red line represents the path that will be exported as an svg, for the paintbrush to follow.

Notice that there are red circles around the paint areas, lines in the water area, and dabs on the paper. These are all added to the svg in order, so the paint brush will:

  • Swish through a long path in the water

  • Dab the paper towel

  • Circle around one of the paints

  • Swish a short path in the water

  • Paint one vertical line

This then repeats for each of the vertical lines.

Testing testing

Here are the very first watercolour tests I plotted.

You can see there are issues with the colour fading out, where the paint has not been refreshed often enough. Or with the results becoming uneven and “scratchy”, where the brush does not have enough water on it.

I’ve experimented a lot with the order of actions described above, because picking up more or less water before or after picking up paint makes a difference to the effects created.


In those initial tests I was working with a thin brush, with the bristles cut very short. My thinking was that this might allow for detail but, in fact, the bristles spread outwards, creating visible bristly edges, which I hate the look of.

I’ve done some testing with different brushes.

Brush 1 is the one I cut short, resulting in a scratchy line.

Brush 2 and 3 are similar, but 3 performs ‘better’ – note the defined gap in the centre of the ‘a’ and the correct alignment on the start/end of the circles.

A long brush can lead to “inaccurate” shapes, due to the way the bristles are dragged over the paper and become pushed around – you can see what I mean in the 4c photograph below, where the bristles are dragged from the left to the right.

This effect can be reduced by carefully setting the height of the brush so that the tip only just touches the paper and by using brushes with firmer bristles. Brush 3’s bristles are much more collected than brush 2’s.

Many of these brushes are flat and I placed them diagonally in the plotter. Particularly with brush 3, you can see how this results in thinner lines in the / orientation and thicker ones in the orientation, creating a calligraphic effect.

The last four tests on the first sheet all use brush 4, but I altered other conditions:

4a – Speed 70%, brush placed with tip just touching paper

4b – Speed 20%, brush placed with tip just touching paper

4c – Speed 20%, brush placed lower down

4d – Speed 20%, brush placed lower down and weight applied

The difference between the results of a and b shows that a slower plotter speed can help more paint reach the paper and create clearer lines.

The difference in height of the brush in each of these is only a few millimetres but the difference in the results is marked, demonstrating how this process is (happily) difficult to control and filled with chaos introduced by the medium.

Brush 4 has been damaged a bit by test 4d, where the brush was weighted down. It’s visible in the photo of the brushes above – the bristles were neater before the tests. I do like the smushy effect of the circle though, it could be interesting to play with that.

Brushes 5, 6, and 7 are wider but it’s still possible to write readable words, just at a larger size. The diagonal orientation effect of the diagonal flat brush is also more pronounced here.

The first shape on Brush 7 uses the same circular path as all the other brushes – the bristles in contact with the paper just haven’t moved that much.

Wider brushes generally lend themselves to smoother edges and no risk of scratchy areas, while thinner brushes are obviously necessary to create detail.

I’ve been on the look out for brushes in the shape of brush 3, but shorter and narrower. I also haven’t yet experimented much with brushes of different shapes. This is an ongoing exploration!

Smooth lines

The first “proper” outputs I created were these Perlin noise adjusted rows of lines.

It’s interesting that in the tests of the thinner brushes, the colour often runs out before the end of the word or even the short sine wave. Whereas in these outputs, a slightly wider brush manages to continue the full length of a sheet of A4 paper. Even a small difference to the width of the brush seems to make a big difference to how much water and paint it can hold.

Watercolour Words

I’ve tried a few different ways of creating typographic pieces, using the handwriting I coded in Javascript (you can read about that here).

In this first one I simply repeated the same word in different shades, using a large brush. I particularly like the areas where one word bleeds into its neighbours.

I’ve also experimented with using a few words or a short phrase, in different layouts.

I love aspects of these, but they don’t quite feel like “finished” pieces, due to the amount of white space.

One thing I’m particularly liking is the smudged areas of colour. I dripped water onto the paper by hand as the plotter was working, so that the paint would run.

In this video you can see the drips of water on the paper and how the colour spreads and distorts as the brush moves through one of them.

I love how this takes advantage of the watercolour medium. In some of these next pieces, I automated this by drawing circles (actually I used the letter ‘o’) in water ahead of the main letters in paint.

In this video you can see the ‘o’s drawn in water – showing up as pale purple as the water tray had taken on a good amount of paint by then. As the ‘j’ is drawn, the colour spreads out into the water.

These single letter typographic pieces are my favourite watercolour plots I’ve created so far. Few things make me happier than a cloudy gradient.


In the past couple of days, I’ve been working towards making the sentence/phrase/word pieces feel more complete by experimenting with layering.

I feel like there is something interesting here, but much more refinement is needed. Creating these is a time consuming process so experimentation is slow.

I’m working on better integrating the layers, so that the words or other foreground content feel naturally part of a painting.

Going forward

There are some practical things I need to improve upon –

  • I haven’t been pre-soaking my watercolour paper, which means it warps when it gets wet. This is particularly problematic when trying to set the paintbrush to an exact height above the paper, because the paper is not all the same height.

  • I’m finding the painters’ tape, which I use to create nice clean edges, often lifts up during the process. I’m hoping this may improve when the paper is pre-soaked.

  • I need to get some much smaller brushes to try out.

I also have lots of ideas for ongoing exploration! One thing I’ve just started doing but am not ready to share yet (the first test is literally in the plotter as I write this) is using photographs as inputs for representational paintings. Currently this feels like something to try out for fun rather than something I’d want to “really” use the process for – but who knows where it will go.

I’m mostly thinking about ways I can make the most of the combination of the exactitude of the robotic method with the chaos of the physical medium.

😍 Enjoyed this article? I’d love it if you could give a boost on Twitter, thanks!

✨ And don’t forget to sign up for my weekly newsletter, filled with updates.