CMY/CMYK pen plotting with Sakura Pigma Microns

This is possibly the most obscure post I will ever write.

Having recently built a “4xidraw” as per Misan’s instructable at I’ve been investigating various uses: I would totally recommend this as a project for anyone into electronics. The accuracy is pretty solid, the speed is good, and the cost a fraction of the “Axidraw” from Evil Mad Scientists – although the “Axidraw” is obviously a far better buy for anyone who wants the machine to get out of the way and just get on with the art bit.

One thing that interested me was the prospect of doing full-colour images, and the “4xidraw” design seems more than capable of overlaying multiple plots in different colours. The theory here is that you combine Cyan, Magenta and Yellow in various combinations – the “CMY” part. If there’s a certain base level shared by all 3, you can draw that out into a “Key” level that is black, giving “CMYK” as the overall name. So by using 3 pens, you can potentially do full-colour designs.

However the pens that many recommend for archival quality plot prints (Sakura Pigma Microns) don’t come in CMY colours. The best we can do is “Blue” (not “Royal Blue”) for “C”, while “M” is “Rose” and “Y” is yellow. The blue, in particular, is way too dark. What to do?

It turns out that with a bit of adjustment, one can rebalance the colour to something pretty acceptable. I arrived at my mix by eye, dong test plots with a small image containing blocks with each of red, green, blue, cyan, magenta, yellow and 50% grey. Note that I only tuned colours in 10% increments. First thing to do was to reduce the “C” (blue, really) in the mix. Setting this at 50% was best – but then “Y” was slightly overpresent. Reducing that to 80% produced the best mix that I was able to come up with using Sakura colours.

I ended up with the following Python code to map from RGB to CMYK. Note that I’m always setting K to zero because, for the kind of plotting I’m doing (“wiggle plots” – where you spiral outwards and wobble back and forth by an amount proportional to the amount of colour), it doesn’t make sense to draw out colour onto a K-layer.

def rgb_cmyk_convert_sakura(r, g, b):
    RGB_SCALE = 255

    # rgb [0,255] -> cmy [0,1]
    # white = no wiggle (0), black = maximum wiggle (1)
    if (r, g, b) == (0, 0, 0):
        # black
        return (1, 1, 1)

    rc = r / RGB_SCALE
    gc = g / RGB_SCALE
    bc = b / RGB_SCALE
    k = 0.0 # we don't use black as this we are calculating for "wiggle" plots: here, using black doesn't make sense
    c = (1 - rc - k) / (1 - k) * 0.5
    m = (1 - gc - k) / (1 - k)
    y = (1 - bc - k) / (1 - k) * 0.8

    return (c, m, y, k)

The results can be seen below. The green of the clown’s body at the bottom right is furthest off – Sakura’s blue doesn’t really have any green in it so we are missing some saturation there. But the match overall is not too shabby.

“Wiggle Plot” rendition using CMY mapping above
Staedler CMY Pigment Liner pens with a “true” (unweighted) mapping – admittedly, far better colour balance!

Leave a Reply