More selected projects

Drifting Drafts

An interactive installation where weaving drafts and patterns are generated and explored with body movements and cellular automata

built by: Jakob Jennerholm Hammar


This project draws on what is often referred to as 'weaving drafts', 'notation' or 'constructs'. A set of graphical instructions and visualizations for how to set up and operate a weaving loom to achieve a specific pattern and structure. Using cellular automata and computer vision, the installation explores an embodied way of creating emergent patterns. Patterns in time and duration as a collaboration between the participant and the computer, beyond the immediate control of one or the other. It is a study of the flow of time and matter, of co-creation and the surprise and anticipation of what lies within the next update or pick of the weave.

Weaving Drafts

The drafts are modelled after a four-shaft loom, where the top left part or the 'threading' represents the warp going through the different harnesses. The top right, the 'tie-up', show how the shafts are connected to the treadles (mechanisms controlling which shafts and warp threads that are lifted). The operation of these mechanisms is shown in the 'treadling' to the bottom left. The large field in the bottom right, the 'drawdown' visualizes the full pattern and structure of the proposed weave.

Over time, a weave is built up from several picks or passing of weft over and under the warp threads, beaten into a single piece of fabric. Likewise, the drawdown of a draft creates patterns trough the accumulations and integration of rows of one-dimensional arrays.


The video above is recorded at home in a time where access to spaces, tools and participants are limited. The intention is that the work would be presented in a much different context. The idea is to present the drafts not with a large screen or even a TV like this, but within a smaller, much more frame-like monitor hanging on the wall. Also, as there is several different setups and ways of both generating and presenting, that is either as weaving drafts or rendered only as patterns, perhaps 3 or 4 drafts would be shown side by side. For this the solution would be using a series of Raspberry Pi.

The use of only two sets of colours are chosen because of how weaving drafts are most often portrayed, especially in older sources. The ones that sparked my interest and fascination with these objects. 

Side wise motions steers the treadling in the x-axis as well as accelerating the update rate, moving the drawing of the patterns forward. Upwards motion in the y-axis, as in raising ones armes freezes the cellular automata and allows for explorations of the current threading or setup of the shafts. The same motions functions as a toggle, reanabling the update of the cellular automata as well as randomizing the rules. 


Hardware used:

  •  Asus Rog GL504GS running Manjaro Linux
  •  PS3 Eye Camera
  •  Monitor


Software used:

  •  C++ / openFrameworks
  •  openCV
  •  kylemcdonald / ofxCv - openCV wrapper for OF
  •  bakercp / ofxPS3EyeGrabber - extending ofBaseVideoGrabber with PS3 Eye

Draft code

The main part of the code is the generation of the weaving drafts and their patterns. The code is modelled after a four-shaft loom, as are the drafts. The different parts of a loom are represented with their own setup, update and drawing functions. The drawdown, or the main pattern is dependent on the interaction between the other, simulated parts of the loom/draft. The different parts and their interplay where at first explored with simple math functions such as sin, (pseudo)randomness and perlin noise but later integrated with both elementary cellular automata and computer vision. There is the possibility to either generate the whole pattern at once as a fully functional and weavable draft, or more as an exploration of the weaving process itself where the treadling and drawdown resides within a deque where every update push/pop or add a new row to the pattern while removing the last one.

Cellular Automata

The cellular automata or CA part of the work is what is often called elementary. It is a one-dimensional computational system where every state (on/off) of a cell in an array is updated according to a ruleset and depending on the state of the nearest neighbours of the cell. The choice to use CA here is not only because of an interesting aesthetic resemblance between their usual representations and weaving drafts, but as a way of exploring emergence and creativity. As CA often is used within the sciences as a way of (for example) simulating biological life, growth and studying how things evolve, create and become. It is used here to think about the dynamic flow of time, transformation of mind and matter and of collective change.

The program uses four different, independent CA systems. One for each shaft of the loom. Every new row of the pattern, or the drawdown is thus dependent on the state of four different CA, the current tie-up and the movements taking palace in front of the camera.

Computer vision

As a way of involving the audience in the creation of the patterns and the emergence of the CA systems, the treadling is navigated by the body movements of the participants. The choice of using 'optical flow' was made to keep the interaction dynamic and fluid with a focus on motion. The system is based on the Farneback method where the direction and speed of a moving object is calculated or estimated by comparing two frames recorded by the camera.

After some problems compiling Iplimages the choice fell on using the ofxCv addon instead of ofxOpenCv.

The image is scaled/decimated to make the calculations less expensive. Allowing for a larger resolution input image but keeping the frame rate up.

A couple of small notes is that a small (but variable) "gravitation" or "easing" towards the centre (in the X axis) is used to further increase a sense of flow or current. Also, the update rate is not constant but significantly increased when motion is detected to heighten a sense of responsiveness and reaction by the system. A way to involve and engage the audience in another wise perhaps too abstract and confusion interaction. The movement is also kept mirrored, a personal choice founded on other interactive and game experience. It is possibly not working for everyone.

  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image
  • gallery-image

The main idea behind this work is twofold. A study into weaving and weaving drafts paired with an exploration of time, patterns, co-creation and emergence. Both deriving from the same source, bound together by questions of the relation of analogue and digital. The risk of the very specific workings behind weaving drafts, the abstract level of interaction and focus on unpredictability of the result may most likely add up to some feelings of confusion and perhaps even frustration from an audience. This is one of the main aspects of concern and future development I perceive with this project. Also, more work needs to be put into thinking with different colours of warp and weft, different kinds of draft (i.e. for other kinds of looms) and other ways of visualising the process.

As I am already doing experiments with thermal printers and real time analogue output from this program. There is also a plan for future progressions within those lines. The idea is interactively generating a pattern which then is printed as a weavable draft and given to whomever was part of the creation.

And finally, the most exciting way forward is to make weaves of these drafts, the ultimate way of pushing this work into the abyss.

Source code


"Optical Flow Test," Adrian Sheerwood, Accessed April 15, 2020.

"Elementary Cellular Automata," Tomas de Camino, Accessed, April 1, 2020.

"Nature of Code, Chapter 7. Cellular Automata," Daniel Shiffman, Accessed April 1, 2020. Chapter

"Optical Flow," Theo Papatheodorou, Workshops In Creative Coding, 2020.

"ofxThermalPrinter", Patricio Gonzalez Vivo.

"ofxCV", Kyle McDonald.

"ofxPS3EyeGrabber", Christopher Baker.