Sewing Bee for the Digital Age


  • Processing (free download from
  • Instruction sheet (pdf)
  • Code (see below)

As part of Dundee Science Festival 2013, I was involved in a sewing bee with a difference, an idea developed by Dr Karen Petrie. Participants were invited to create a computational image using Processing in a morning, before spending the afternoon embroidering their image. 16 participants attended, aged from 6 to 67 years old.

Processing is an open source language based on Java and is free to download. A massive online community means that this development environment is perfect for beginners and more advanced programmers alike. The visual nature of the program means that beginners can see their programs take shape very quickly, making it perfect for an event such as this, where many participants may have never coded before.

The shift from the digital image creation to the tactile embroidery phase of the workshop feeds into the Maker community, allowing people to use technology to create lots of things that are engaging and creative.

In the instruction sheet, you are told to open ‘Digital_Sewing_Bee.pde’. The code for this file is shown below:

PImage img; // declaration of image to be used

void setup(){
size(400, 400); // size(width, height) – use these later to determine lengths of shapes
// image is saved to be 800 x 800 pixels in size

background(255); // start background as white


save(“img.png”); // save the created image
//mirrorImage(); // flip the image
save(“mirrorImg.png”); // save the mirrored image


void mirrorImage(){
img = loadImage(“img.png”); // load the image
imageFlip(img,300,600); // rearrange the pixels to flip image
image(img,0,0,width,height); // display the new image

void imageFlip(PImage image, int xPos, int yPos){
image.loadPixels(); // array of pixels in the image

// width * height is total no of pixels
int tempImage[] = new int[image.width*image.height];

// temp array to hold the image, pixel by pixel
for(int i = 0; i < image.width*image.height; i++){ tempImage[i] = image.pixels[i]; } // rearrange the pixels back into the original array for(int i = 0; i < image.height; i++){ for(int j = 1; j < image.width; j++){ image.pixels[(i+1)*(image.width) - j] = tempImage[i*image.width + j]; } } // update the pixels using the image array image.updatePixels(); }

The image below shows an example of an embroidered image, created using processing.

Tree created using processingEmbroidered tree