I was happy to visit Kristina Andersen, Pei-Ying Lin, Femke Vorselen and colleagues for two weeks at the Wearable Senses Lab at TUe (Eindhoven University of Technology), funded as a visiting professorship by the Eindhoven Artificial Intelligence Systems Institute. It was a great opportunity for exchange, with Kristina having previously been an electronic music instrument designer and researcher at the legendary and much missed STEIM studio, and now running an experimental textiles soft lab as associate professor.
Some years ago, I was happy to contribute to an article “Digital crafts-machine-ship: Creative collaborations with machines” lead by Kristina, together with Laura Devendorf and Ron Wakkary. It shares nicely grounded reflections on makers and their machines as ‘crafts-machine-ship’, and re-reading it was a nice framing for my residency with Kristina.
We didn’t have clear aims, but it was clear that the lab’s TC2 loom would be a focus. It is designed for prototyping, in that the tensioned vertical warp threads can be individually ‘lifted’ via computer software, but where the horizontal weft threads are passed by a human weaver. From my experience working as part of the PENELOPE project with Ellen Harlizius-Klück, I knew there are always surprises in translation between the 2D grids of weaving notation and the three dimensional structures of the resulting weaves. Still the magic of the textile sample made using the TC2 that Femke had made together with Milou Voorwinden, shown on the left below the 2D binary ‘up/down’ structure notated above it, was astonishing.
I spent some time getting used to the loom, trying out some patterns I’d prepared using Laura Devendorf’s AdaCAD software, using a bitfield plugin for it that I’d made. The results were quite nice, but although not as striking as the original 2D binary grid of the bitfield pattern that I used as a weaving pattern. Again, this shows a mismatch between a 2D view of weaving and the resulting three dimensional structure. If you treat a loom as a 2D printer rather than a machine for exploring woven structure, the result can be a bit disappointing.
With encouragement from Kristina though to ‘turn up the volume’ I tried weaving a bitfield pattern again, but this time replacing each ‘up’ and ‘down’ binary value with larger blocks of either ‘waffle’ or ’twill’ weaving patterns. This already looks more interesting I think, but also potentially has surprising structural outcomes, because once taken off the constant tension of the loom, waffle patterns shrink, creating three dimensional pockets (like a waffle..). I say potentially because I didn’t get to experience the textile off the loom yet. I’m looking forward to seeing how the areas of diamond waffle and diagonal twill interact when they settle into their ‘natural’ form.
The protocol for the TC2 loom is not publicly documented, but thankfully, Pei had already spent some time reverse-engineering and understanding the protocol, and it was surprisingly quick to reach the satisfying point where we could talk to the loom from a Python script, and hear the loom’s 1,320 pneumatic heddes lifting. Weaving structure is all about binaries (mainly up/down values) and so it wasn’t a surprise that the protocol was binary as well, although it was a challenge to map to the particular arrangement of heddles across the loom’s six pneumatic modules. Astonishingly, we somehow got it right first time, although couldn’t believe it and spent a long time looking for errors in our mapping.
In search of errors, I thought I’d run a cellular automata on the loom, in particular Wolfram’s rule 30. I imagined myself checking the mapping manually by looking at the threads and running the algorithm in my head. In practice that was too difficult for my tired brain but it was a fun exercise, at least. Errors were a bit of a running theme though, with the various knitting machines breaking down around the lab, sometimes in interesting ways, sometimes just not working. The loom had all the luck.
With the TC2’s protocol in hand though it was straightforward to expose it via the MQTT internet-of-things protocol (using the mosquitto server and the paho client libraries for python and javascript), allowing instructions to be sent straightforwardly and securely with a couple of lines of code. Some fun experiments with ‘liveness’ could begin.
One thing I wanted to try was to influence the weave with the rhythm of the weaver. In the below perhaps you can see a repeat every 128 stitches. Within this repeat, the number of white warps that are lifted (and therefore visible on this side of the textile) depends on the duration of time between successive presses of the loom’s footswitch (which lifts the warps for the next row). The lifted warps are spread out as evenly as possible, according to Bjorklund’s algorithm (made famous in algorithmic music as the method for creating ‘euclidean rhythms‘). You’ll also notice a diagonal pattern – this is a result of the pattern being shifted by one thread each row, in my efforts to avoid ‘floating’ threads.
It was fun trying to weave as metronomically as possible – the more regularity I had passing the weft and pressing the footswitch, the clearer the diagonal ’twill’ lines would become. The loom makes its sounds, as does the passing of the weft shuttle and beating the new row into the weave. At the top of the photo you can see more diagonals appearing than previously (in this kind of weaving, time goes ‘up’) – this is where I actually used a metronome app on my phone to help time my foot presses. However the loom itself intervened, by sometimes adjusting itself to move the fabric forward, so the timing could never be perfect. You can also see horizontal bands in the weave where I had issues with e.g. dropping the ‘shuttle’ or hitting some snags, which took time to resolve.
Again, with Kristina’s encouragement to ‘increase the volume’ I later tried the same experiment with larger units of ‘waffle’. Working with structural elements that exist across 10 rows, but changing the pattern every row, meant that the waffle patterns were corrupted unless I wove regularly. Working with larger structures rather than individual threads, I didn’t need to shift the pattern to avoid ‘floats’, so there are no diagonals here.
Another live experiment involved the Khipu-inspired tangible interfaces made by Dave Griffiths with support of Paola Torres Núñez del Prado. The image shows the khipu-inspired strands hanging down on the loom in a tree structure, representing a weaving pattern. For this I again employed the Bjorklund algorithm mentioned above, with three ‘inputs’ – a) the number of threads to lift, spaced out over b) a number of warps, and finally c) the number of warps to shift the whole pattern by. Each of these inputs could themselves be ‘patterned’ by being given more than one value to cycle around, row-by-row. By giving varying number of values for each input, an interference pattern could be set up, creating long-form patterns.
The result was a little disappointing, again this can happen when you treat weaving as a two-dimensional structure; the results can be less interesting in textile than on screen. But I decided to persevere, and eventually noticed that there was an interesting pattern of floating warp threads emerging. The interference pattern had created a long-form pattern that repeated only a couple of times across the 1320 warp threads. It was difficult to see, but by running my finger across it I could sense a nice rhythm to it.
A nice thing about experimental weaving is that it is self-documenting – every movement of the warp threads is recorded in the textile itself. To some extent I didn’t need to write down what I was doing, as it was all recorded in the textile. I took this a bit further and made a khipu with the same knots and structure as the electronic version, but purely out of yarn. I could then weave this into the textile to record the ‘source code’ of the weave that followed.
There were so many ideas flowing over the two weeks, for example one conversation with Pei was around how the khipu-inspired interface could be used to work to notate a kind of evolutionary algorithm to generate/breed her (incredible) knitted sea slugs.
We also had some fun with Luke Iannini’s excellent ‘recognition kit’ in the realtalk system I’d carried to Eindhoven with me, getting it to talk to the loom, and also thinking about recognising patterns in textiles to use them as language interfaces, as seen below.
Pei and I talked a lot about how to connect up her knitting software to the network, with tantalising possibilities of sharing patterns between knitting and weaving software and machines. These are very different structures (I like to think of knitting, weaving and languages like javascript as being equidistant), so this feels a bit ‘illegal’, but has to be tried! Certainly it would be fun to have interplay between the rhythm of a knitter and a weaver, perhaps the movements of one disrupting the other. The general feeling of flows of patterns moving around the lab, perhaps being transmitted from or replicated in a remote location (such as here in Sheffield) as ‘textile telematics’ seems to have a lot of possibilities. It will be fun to explore recent and historical precedents, such as the use of worksong to keep patterns in living memory, and transmit and synchronise patterns between people.
It was also great to run a couple of strudel live coding workshops while in Eindhoven, both at the University as part of my residency there, and at Baltan Laboratories with the local branch of Netherlands Live Coding Live (nice recap video here). Lots of enthusiasm from the younger generation!
This all really renewed my interest in weaving and textiles in general, and the collaboration with Pei and Kristina feels like it’s just beginning, so fun times ahead! It was also lovely to be resident in such an active lab, with a great ‘demo culture’, prompting a lot of great conversations with the people I met. Big thanks to them for hosting me, also for many of the above photos..