Weaving as Coding: Complexity and Nostalgia

For readers unfamiliar with the process of weaving, terms that first appear below in bold typeface are explained in the Weaving primer/glossary section between the Footnotes and Recipe.

I first faced a loom in summer 2017 at the Haystack Mountain School of Craft, during their Open Studio Residency, just before leaving.  I went to Haystack only planning to work in ceramics, but then you can’t really start any new clay during the last few days of a residency.  Wondering what else I could do to make the most of those final hours, I heard one of my fellow residents, Elaine K. Ng, say that she was planning to hop over to the weaving studio to learn how to set up a loom.  I was having stimulating conversations with fiber artists at our communal meals, so I decided to tag along.

For someone with a physics background a shaft loom is an engaging thing.  Kim Mirus—an incredible textile artist who we were so fortunate to have as our studio tech at Haystack that year—patiently stepped me through the process of reeling and threading a warp and laying in my first few picks.  The mechanical logic of shaft weaving felt limpid yet heterodox, mired as I was in a 1980s mindset towards computers and programming.  It was an enticing surprise.

Over the following two years I brought first a table loom and then a floor loom into my home office/studio, progressing idiosyncratically from weaving four-shaft classics to eight-shaft curiosities.1  I wove a set of curtains.  As fun as all this was, I fell into a sort of ennui towards the tight pattern scales in conventional drafts with manually-manageable shedding sequences.2  I wanted somehow to gesture more expansively over long stretches of cloth.  Experiments with pattern-weft improvisation in overshot drafts failed to satisfy.3  One day I gave in to the idea that I ought to be able to leverage some linear algebra know-how to find a way forward.  After a week of effort I gave up, but as I shelved my meandering pages of math I made a mental note that it could be fun to design a class that introduced basic concepts of information theory—as we know it in modern electrical and computer engineering—via shaft weaving.  My work in textiles turned towards shibori-dyeing4 cloth that I wove with natural-fiber warp and weft, shifting the contribution of the weaving draft to fine texture underlying larger-scale and more free-flowing gradations of dye.

Fast-forward another year or so and we’re in the first summer of COVID quarantine.  As a university educator I’m grappling with the likelihood of a full year of remote teaching, asking myself what I can contribute towards making it less of a lost year for students who choose to stay enrolled in spite of the difficult circumstances.  I come back to the idea of a hands-on weaving class with STEM learning goals and realize that I can use funds from a computer science grant to purchase some equipment.  I craft a syllabus that elaborates a few key themes from information theory, box up some warping boards and eight-shaft table looms, and ship them to five students with whom I’ll only interact via Zoom.  That initial remote version of the class took place in autumn 2020; I subsequently taught an updated in-person version of it in winter 2023.

A primary theme of the class is algorithmic complexity.  If we ask the general question, “How can we quantify the complexity of a pattern,” one compelling idea from information theory is to refer to the length of the shortest computer program that faithfully produces it—more “complex” patterns require longer computer programs to generate them.  In conventional engineering classes we normally develop this idea by talking about the abstract theoretical model of a Turing Machine.  In my weaving class we take a more experiential approach — after students have spent eight or nine weeks immersed in threading and weaving twills, overshots, and loom-guided laces on their table looms,5 I show them the four pixelated images of weaveable patterns in Figure 1.  I then ask them to rank-order the four patterns in terms of which look the hardest to weave, i.e., would involve more tedious threading and shedding sequences.

Pixelated images of four weavable patterns.

Figure 1: Pixelated images of four weavable patterns.

In classroom conversations, drawing from their hands-on weaving practice, students reach consensus that patterns c and a would be the most complex to execute, while d would be the least.  We then look at the sizes of the .GIF image files for these four patterns on my computer and find that the sizes of the files decrease in corresponding order: 14432 and 14002 bytes for files c and a, respectively; 13647 for file b; and 9326 bytes for file d.  The punchline is that patterns that are more complex to weave on a shaft loom require more space to store on a computer, because the corresponding image files fundamentally contain more information.  This exemplifies a fundamental connection between the complexity of generating a pattern and the compressibility of a file that represents the pattern as binary data.  Something oblique perhaps about the value of labor.

Data compression is, itself, a second principal theme of the class.  I center this topic as we first learn how to read block drafts, which we do in the context of loom-guided laces in the book by Strickler.6  For the aims of this article, rather than fleshing out the pedagogical details let me instead jump back to my erstwhile quest for threadings that support “graphically macro” forms of improvisational weaving.  While working through the Strickler chapters on Bronson lace, it finally sank in for me that block drafts of this type allow you to divide your warp ends into groups that can be independently switched between tabby and lace-spots “on the fly.”7  One night doing class prep I put this together with memories of an old red-LED travel alarm clock and cobbled together a seven-segment LED weaving draft in FiberWorks.  A version of this draft (requiring seven shafts; eight treadles on a floor loom) is provided in the Recipe below; Figure 2 shows a photo (displayed in two orientations rotated by 180°) of my first sample woven on my table loom.  I had the draft (the “information”) already back in 2020, and started trying to weave a sample in late 2022 but wasn’t able to make it look right because I made an unwise choice of yarn to use as weft.8  Getting to the product in Figure 2 required an alternative idea about the weft yarn that didn’t occur to me until a year later, but I’m sure a more experienced weaver would have known better from the start.

Sample of the seven-segment LED draft, shown above in an orientation that reads as the numerical digits 07734 and below in an orientation that reads as the english word “hello.”

Figure 2: Sample of the seven-segment LED draft, shown above in an orientation that reads as the numerical digits 07734 and below in an orientation that reads as the english word “hello.”

Those of us old enough to remember sitting in a schoolroom with an LED/LCD hand-held calculator are probably familiar with calculator words; in this sample I attempted to produce one via shaft-loom weaving.  With the high contrast of a red warp and black weft—emulating an old-fashioned seven-segment LED display—the weave really needs to be wholly weft-faced to look right.  Even with a suitable choice of weft yarn it took me a little while to get the hang of doing this so you can see the packing improve from the left side of the upper image (early picks) to the right side (final picks).  This photo shows the sample just off the loom, without any type of wet finishing.

A third theme I highlight in my class is the idea of nested layers of coding, which I try to extend from the engineering context towards media studies following the work of Kristen Haring.  In the first few weeks of the syllabus I have the students read several papers on layers of topological and material coding in Andean khipus; now that I have the Figure 2 sample to work with, I’ll plan in future iterations of the class to ask my students to unpack its layers as well.  At the very base there is the binary over-under of all woven structures; using a draft such as mine, the warp ends are divided into five switchable sets (plus some fixed always-tabby spacers)9 that implement an overlain binary code of tabby versus lace-spot weave structures; by choosing appropriate shedding sequences one can then use this structure-switching to create patterns that mimic the ten decimal digits of seven-segment displays; by choosing appropriate digit sequences one can weave patterns that also read as English words when the cloth is rotated; by choosing suggestive warp and weft colors, and weaving in a very weft-faced way, one can produce cloth that recalls the vintage paradigm of calculator words with its accompanying nostalgic sentiments for viewers of a certain age.  As early parts of the class syllabus introduces students to Jacquard, Babbage, and Lovelace, I hope they’ll immediately appreciate how this kind of textile artifact embodies further historical entanglements of weaving and computing.

I wonder how the “lo-fi” aesthetic of calculator words—tied as it is to a clever, almost subversive repurposing of a display strategy constrained by techno-industrial wherewithal of its time—may relate to Svetlana Boym’s notion of reflective nostalgia, especially when materialized via thoughtfully designed patterns hand-woven on an ancient type of loom, swimming against the tide of generative AI and digital fabrication.  I’m no luddite, but seeing the “hello” sample come together on my little table loom kindled a precious feeling of limpid, heterodox satisfaction.  As emerging technologies remove so many long-standing difficulties from the creative process, perhaps we could focus a bit less on what we think we are gaining and a bit more on what we may be losing.  Will we forget how it feels to overcome a processual impasse that has vexed us for years?  As makers, will we lose the urge to strive?

I circle back to the notion of algorithmic complexity.  “Ask a generative AI for an image of fireflies in a temple garden, in the style of ukiyo-e; upload the file to a digital jacquard weaving service.”  One can execute this program in mere minutes—how marvelous is the resulting yardage?  This helps me remember how thrilled my students are when they harvest their first eight-inch mats of plain weave from their looms.

This work has been supported by the National Science Foundation (award CCF-1918549).


1. Many familiar fabric structures, with distinct structural variants and endless possible color combinations, can be woven on a loom with four shafts.  This leads some weavers to think of more intricate fabric structures, which might require up to sixteen or even thirty-two shafts to weave, as fanciful.  Others lean into the diametric appeal of pushing the boundaries of complex many-shaft weaving, with eight-shaft structures representing a sort of gateway… 

2. The cycle and rhythm of hand-weaving is simple at its core, however, the most straightforward threadings and the simplest shedding sequences (for which it is not too difficult to keep track of which step of the sequence you are at while weaving) tend to produce structural patterns that are like tilings of the cloth with small tiles — think of a tiling a wall with small tiles, of which you only have a few types to work with.  Depending on your aesthetic tastes, you may develop a yearning as a weaver to do something more like gesturally painting that wall (your fabric structure) with bold and irregular strokes. 

3. A basic principle of overshot drafts is to separate the functions of making your cloth structurally stable (not too loose, such that it would easily snag or grossly deform) and creating visible patterns through the process of shaft weaving.  Often this is done by alternating two different weft yarns/colors (for example by alternating between two different shuttles in subsequent iterations of the basic weaving cycle), with one weft yarn used to establish a background plain weave, and the other to superimpose a looser unconstrained pattern.  This strategy can lend itself to a sort of improvisational weaving, in which the background plain weave remains unaltered but the weaver improvises the shedding sequence for the pattern weft only — an approach that in practice feels a bit like scribbling (as an indirect consequence of the types of threadings used in basic overshot drafts).

4.Shibori here refers to traditional Japanese methods of “tie-dying”.

5. Twills, overshots, and loom-guided laces are distinct categories of traditional weaving drafts.  In my class, students first thread their looms for weaving twills and weave twills for a while, then re-thread their looms for weaving overshot drafts and weave those for a while, then finally re-thread their looms for weaving loom-guided laces and weave those for a while, including for their final projects.  Each re-threading of the loom takes a novice several hours of meticulous work and presents many opportunities for making mistakes that need to be identified and corrected.  The progression from twills to overshots to laces represents increasing complexity in the threading and weaving processes.

6. Drafts in the category of loom-guided laces are often represented in both pedagogical books and online weaving resources using a block notation.  I like to include these because reading and understanding a block draft requires procedural thinking skills related to those required for writing computer programming code, and exercise concepts that also underlie computational data compression.  I find that students who may consider themselves averse to math or programming classes can be sufficiently motivated to learn to read block drafts if they are sufficiently motivated by the appeal of weaving lace structures on their table looms.

7. This is to say, that the type of threading utilized in Bronson Lace drafts can be adapted to support a weaving procedure in which the weaver can improvisationally decide, while they are weaving, to switch between tabby (another term for plain weave) or lace structures for rectangular patches within the fabric.  In practice this feels like laying down rows of cards on a table (as an analogy to weaving) with free choice of which contrasting face of each card should be up — this is meant to contrast with the sense of scribbling described in footnote 3.

8. I initially tried using a thick fuzzy (and somewhat stiff) yarn as the weft, which did not lend itself to achieving a truly weft-faced cloth structure.  As noted in the Recipe below, I switched to a much more supple weft yarn with much better results.

9. See footnote 7; the “five switchable sets” and “tabby spacers” represent five groups of flippable cards (where every card within a given group must show the same face) plus several cards that always have to show their tabby (as opposed to lace) face in the rows I describe in my card-laying analogy for weaving.  In the seven-segment LED fabric structure, the switchable sets represent segments of the LED that could be chosen by the weaver either to appear “on” (red/warp color) or “off” (black/weft color) as the cloth is being woven.

Weaving primer/glossary

For readers unfamiliar with weaving, please find below a brief narrative description of the weaving process as it relates to my article, followed by some definitions of specific terms.  You may find it most helpful to consider the narrative alongside a video showing the weaving process on a table loom (for example this YouTube video).  The Wikipedia entry on weaving also has a few diagrams that help to establish the basic distinction between warp and weft.

In traditional weaving on a shaft loom, a set of yarn segments – the warp ends – are stretched within a plane parallel to the ground, oriented so that they all run to/from the weaver, with roughly equal spacing between them.  Each warp end is threaded through one shaft of the loom, with the loom having at least two (and typically four to sixteen) independent shafts.  To weave cloth, the weaver repeats a cycle of first raising a subset of the shafts to pull the corresponding warp ends up above the initial plane, passes (typically using a shuttle of some kind) weft yarn across the set of warp ends through the vertical opening between the raised subset and the rest, packs (typically using a reed or sword beater) the newly-lain weft yarn against the accumulated weft segments from previous iterations of this sequence, and finally lowers the raised subset of shafts (or changes the raised subset of shafts to jump directly into the next iteration of the cycle).  Different weave structures are achieved according to how the warp ends are threaded through the several shafts (with any such scheme referred to as “a threading”), and the weaver’s choice of which shafts to raise during each iteration of the weaving cycle (with the sequence of such choices referred to as the shedding sequence).  The combination of a threading scheme and a shedding sequence, which together produce a specific cloth structure, is referred to as a weaving draft.  Weavers have developed various notations for recording and communicating weaving drafts, including some (e.g., block drafts) that incorporate data compression schemes.

Warp – yarn segments running along the length of a cloth, which are arranged by the weaver in the process of setting up their loom, before weaving.  Each yarn segment of the warp is called an end.

Shaft – mechanical elements utilized in certain types of looms, including table looms and floor looms, which are used to selectively raise/lower subsets of all the warp ends.

Draft – see narrative.

Weft – yarn segments running across the cloth, which are arranged by the weaver during the process of weaving.  Each weft crossing of the cloth is called a pick.

Treadle – a foot pedal incorporated in floor looms (a floor loom will typically have two to twelve treadles) that is mechanically connected to a subset of the shafts, such that weaver can raise this subset of shafts altogether by stepping on the corresponding treadle.

Weft-faced – refers to a manner of weaving in which the weft yarn largely hides the warp yarn on the “top” face (whichever face is meant to be viewed) of the cloth.

Packing – refers to how densely or loosely the sequence of weft picks are beaten against one another.

Pick – see Weft.

Wet finishing – refers to a common practice of soaking and lightly agitating cloth in water after it has been cut off the loom, in order to allow the warp and weft yarns to shift and settle to relax displacements associated with uneven tensions/friction built up in the process of weaving.

Shedding sequence – see narrative.


What You’ll Need: a table loom with at least seven shafts (heddle counts are 42 heddles on shaft 1, 24 on 2, 2 on 3, 6 on 4, 2 on 5, 6 on 6, and 2 on 7) or a floor loom with at least seven shafts and at least eight treadles; a reed suitable for sleying 84 ends at 12 EPI; red warp yarn (this draft calls for 84 ends and I reeled 3 yards per end for my compact table loom, hence roughly 252 yards) suitable for weaving at high warp tension (I used 8/4 carpet warp); a shuttle (for this type of narrow cloth I found it most convenient to use a simple stick shuttle); black weft yarn preferably supple to help achieve weft-faced weave (I used 10/2 mercerized cotton, and for weft-faced weaving you may want to plan for 14” of weft yarn per pick and the maximum picks-per-inch that your weft yarn will pack to — I ended up with roughly 40 weft picks-per-inch and a total weave length of 14” for the draft below, hence roughly 218 yards).

As noted in the article text, we only require five sets of warp ends to be switchable between tabby and lace-spots in order to be able to weave patterns that emulate the digits of a seven-segment LED display.  In Figure 3 these warp regions are labeled 3, 4, 5, 6, and 7 using boldface red numerals along the left edge of the simulated cloth—warp ends in this image run left-to-right, and progressing from left to right in the simulated cloth represents sequential weft picks.  Weaving warp region 3 as lace or tabby turns the top horizontal bar on or off; region 4 controls both the upper-left and upper-right vertical bars; region 5 controls the middle horizontal bar; region 6 controls the lower-left and lower-right vertical bars; and region 7 controls the bottom horizontal bar.

Diagram and key for the seven-segment LED draft.

Figure 3: Diagram and key for the seven-segment LED draft.

The text lines in the upper-right part of Figure 3 provide a key for how to weave decimal digits.  There is one text line per digit (displayed as a boldface blue numeral); each text line has the format of a sequence of pick-pairs (labeled t, 3, 4, 5, 6, 7, 37, 46, and 357) separated by periods.  The pick-pairs are spelled out in the lower-right part of Figure 3.  For example, the pick-pair “46” is a pick with shafts 1, 4, and 6 raised, followed by a pick with shafts 2, 3, 4, 5, 6, and 7 raised.  In order to weave a “spacer” region between digits a sequence of “t” (tabby) pick-pairs is used.  As the fabric needs to be quite weft-faced to look like red LED segments displayed against a black background, you will almost certainly need to adjust the number of repeats within the LED/lace segments and spacer/tabby segments as you weave.  Think of the key in Figure 3 as a starting guide.

The sample shown in Figure 2 can be reproduced using the threading and shedding sequence shown in this PDF (generated from a FiberWorks draft with the cloth type specified as weft-faced; the simulated cloth appearance as balanced weave is shown in this PDF).  Again, you will likely need to adjust the number of repeats in segments/spacers according to warp tension and weft packing—once you see how the pattern works you can just do this by eye.  For the sample shown in Figure 2, the warp is 8/4 cotton carpet warp at 12 EPI in a 12-dent reed and the weft is 10/2 mercerized cotton.

Hideo Mabuchi @ Stanford University: Department of Applied Physics (Professor); Program in Modern Thought and Literature (Committee in Charge); Stanford Arts Institute (Denning Family Director). https://hideo.world

Leave a Reply




This site uses Akismet to reduce spam. Learn how your comment data is processed.