Live Coding Choreography with Terpsicode
Enabling agency for the human interpreter
Terpsicode is a mini programming language for live coding visual choreographic scores that utilizes dance terminology as the code. It was developed through a process of using images of dancers as a way to pattern shapes of the body. Not only does this language allow for live coding to become a way of creating choreographic scores, it also allows dancers to explore agency within this form of performance work. The human output and interpretation is of primary importance, rather than enactment of a fixed computational output in order to create a new computer-aided dance work.
Live Coding Choreography
Over the past decade or so, live coding practices have become increasingly present in the context of live-created electronic music, often performed on or with laptops, from solo to large ensemble configurations. However, by subscribing to definitions of live coding that refer to the computational systems and approaches and not the specific medium or outcome of the systems, it becomes easy to apply these concepts and technical tools to other performance practices, such as dance choreography.
Emma Cocker discusses live coding as “‘performing thinking’ in action and the performing of ‘thinking-in-action’” (Cocker 2016, 102). It is not always about the computer but rather about the use of it as a tool to create sets of rules on the fly. Live coding is not only about changing rules or code but also about improvising with code and compositional rules. In a sound-based live coding context, the composition evolves through the addition of new code, or by changing, pausing or copying existing code in order to transform the work into something entirely different: “The code is in constant change, often modifying itself” (Magnusson 2011, 21). In live coding, the act itself is in flux, in real time and developing as it unfolds. Live coders perform a thought process as much as they are performing a medium.
This approach to programming is quite different from typical software development. Live coding illuminates the ways in which programming can be an artistic practice, going beyond a mere supporting role and illustrating that software is itself a cultural artefact, not simply a commodity (Blackwell et al 2013). Live coding often does not have a tangible product — an art work, for example — at the end and the code itself is usually ephemeral. It is of the moment and in situ, just as many improvisational art practices are. But what is the code in this work? Notation? An instrument? In the work of live-coded choreography, it often becomes a performance score, to be further interpreted by a dancer (Fig. 1).
Within dance, one way of communicating the individual movements that are specific to and make up a work is the use of some form of notation. Scores containing these notations may be compared to musical scores in that they prescribe actions that, once executed, would constitute the performance of a work; however, in dance they are commonly used as a starting point for movement instructions that are to be performed by one or more dancers. Choreographer Jonathan Burrows discusses two approaches to dance scores, one being akin to a classical music score, where there are clear instructions for a piece, but the other being an inspiration for a performer: “what is written or thought is a tool for information, image and inspiration, which acts as a source for what you will see, but whose shape may be very different from the final realisation” (Burrows 2010, 141). Scores may be given to performers via speech, text, visuals or other means and may be created before, during or after a performance. Many dance improvisation artists work from scores or sets of guidelines or instructions meant to be interpreted in order to create movement in a given time and space. Olivia Millard describes how scores frame events in the work of artists such as Steve Paxton, Yvonne Meier and Anna Halprin. For example, Halprin would rate her scores on how “open” or “closed” a score was for the dancer from one to ten, with the most open being one. One of the purposes this served was to let the dancers know what to expect. In a very open score, giving it a number closer to one could signify: “Please don’t expect to be told what to do” (Millard 2016).
Improvised dance performance lends itself well to the realm of live coding due to the nature of how much a dance can alter from the score within a single performance. Unlike music or language, up to the present there is no widely accepted standardized “language” for transcribing dance. It cannot be replicated without being experienced, to see or feel a body moving through time (Birringer 2013). This inherent “liveness” and mistranslation of the original is magnified in performance contexts where live code is used simply as a medium to invoke reactions from dancers without rehearsed or premeditated thought, and when the programmer has relinquished firm expectations regarding the final outcome of their code.
Sometimes these scores are composed in a textual language and are meant to be read by the dancers while they are moving (Video 1). Sometimes they are aural instructions that are spoken aloud, resulting in a call-and-response performance, with dancers providing a bodily response to the choreographer’s speech. Graphics or image-based scores may be created through drawing. These various live-coded scores are not always digital and can be handmade prior to, or even during a specific performance. Pseudo-code may be used to live code a choreographic score, allowing the dancers to read the code, whereas the machine is not able to do so. Computer code may be used to trigger a score that is felt as a haptic device worn by a dancer. For example, costumes embedded with electronics could be live coded to send vibrations to dancers, who then respond with movement.
The score itself may be presented as a large video projection in the performance space (Fig. 1), or on small monitors for only the performers to view (similar to chamber music performance). There have been performances in which the score is created live on chalk boards (Collins 2011, 210) and others for which felt markers and overhead projectors were used to create and project the score. The score may be transmitted physically to be felt by dancers on their body through a wearable computing device. The means and medium of presentation of the code varies throughout live-coded choreography, but the dancers receive the information of the choreographic score as part of the piece.
It is quite common for there to be two types and roles of performer in live-coded choreography, although this is not always the case. Typically, there is one performer writing or coding the score and then one or more others interpreting the score as a dance. Both of these actions occur as part of the live performance in real time. Dancers in live-coded choreography follow the score as it is being created by the choreographing performer, who composes the score using algorithms in a specific “language”. These algorithms are simply sets of rules that may be made by the performer who is writing with computer code, pseudo-code or other means of scoring. Performers must respond to these changing sets of rules as they are developed, altered and adjusted live in front of an audience. They read, react and respond all in one embodied moment. Part of performing a live-coded choreography is this response and the interpretation of the information being received.
There is a transparency in the creation process that is absent from many dance performances. The “public thought” aspect of live coding is very apparent in this work. One sees the piece emerge not only from a changing score, but also from the dancer’s work in creating movement. It is meant to highlight for the audience the complexity that emerges through improvising and responding to the changing rule sets for the dance. This is not to say that all aspects of movement and code emerge solely on stage in that moment. But it rather underlines that decisions are being made as an integral part of the work.
Terpsicode is a mini programming language developed by the author for live coding dance performance scores. It explores the idea of utilizing still images of dancers as a way of forming discrete units for creating patterns over time. These patterns in turn become composed through algorithmic processes. The language itself is meant for a choreographer to utilize when creating work, building off of algorithmic choreographic tools by artists such as Myriam Gourfink (2013), Wayne McGregor or William Forsythe (deLahunta 2014).
Pseudo-code was utilized as a means to determine if the language had the ability to convey choreographic information, from the programmer to the computer, in a way that still worked with the domain-specific ways that choreographers communicate with performers. For example, terms such as “retrograde” or “coin flip” expresses language that choreographers understand but must be broken down for computers to be able to process them. Writing the pseudo-code (Fig. 3) was useful in determining how pattern structures, timing and rhythms, and movement combinations could be created, as well as what text fragments the computer must be taught.
Version 1.0 of Terpsicode was used to create several performances, using just the movement terms that referred to the images that had been tagged. For the first performance using Terpsicode 1[1. Danced by Tara Baker and live-coded by Kate Sicchio during AlgoMech, a Festival of Algorithmic and Mechanical Movement held at Sidney and Matilda (Rivelin Works) in Sheffield (UK) on 17 May 2019.] in collaboration with dancer Tara Baker, a 20-minute performance was improvised using a limited lexicon from the mini language, which included such terms as: fall, duck, walk, stomach_spiral and flick. Each word displayed the first tagged image in the directory for that term for a default time of three seconds. As the words were added via the live coding language, images were added into a cycle of pictures within a web browser. If a number was added on screen to follow a term, the current image would remain on display for that number of seconds. The coding was performed in the console of the browser next to where the picture appeared. The order, pattern and timing of the images were determined by the live coding.
Even with a limited number of images, a developing language and a lack of real compositional terms available for the performance, a piece was beginning to unfold in this improvisation. The dancer was given the instructions to begin the piece by copying the images and transitioning from shape to shape. The order and pattern of the images was demonstrated clearly during the first minutes of the work. However, as the piece progressed, Baker was told to respond to the images, giving her more freedom to interpret the shapes or use the images as a starting point for further exploration in her movement.
This approach of strictly following the score versus opening it up for interpretation also affects the live coding of the images. The opening must consider the speed of changes and the complexity of patterns. The live coder must be aware that speeding up too quickly could make it challenging for the dancer to follow. This may mean that certain shapes are not created or a score that is impossible to perform is created. This in itself is not an issue, as it can lead to creative problem-solving by the dancer, but such a decision should be made as a conscious choice by the live coder. After the performers have gained familiarity with the process, the score becomes more of an inspiration for the dancer, and the live coder is less in control of the output and therefore able to play more with possibilities for the dancer to explore. These ways of interpreting and working with the visual score resonate with the definitions above from Burrows (2010). Live coding becomes an exploration of what may be possible but is not necessarily a representation of what will actually be performed, because the output is meant to be danced by a human, who has agency within this work to make the final decision on what movement is created.
In subsequent performances of Terpsicode 2[2. In February 2020, Terpsicode was performed by dancer Phoebe Brown at the International Conference on Live Coding at University of Limerick and by Kyla Sandy at Virginia Commonwealth University.], the vocabulary for the movement images was expanded and each movement term had a directory of various images. These terms included: angle, crawl, crouch, downward dog, duck, fall, flatten, flick, fold, forward, hunch, kneel, lengthen, lie_spiral, lift, lunge, lying_down, plank, plie, reach, relax, rise, roll, run, sit_cross, slide, spiral, stomach_spiral, throw_back, updog and walk.
Alongside the increased vocabulary, the web interface used in the original performance was replaced by an electron web app. The new interface presented the code larger and below the images. This made it possible for the code to be more visible to both the performer and audience. For example, as the dancer was performing their interpretation of an image for the word “lunge”, that word would also appear on the screen. The dancer then becomes faced with a choice of reading words that imply actions and direct movement or simply responding to the images. While the code projected into the performance space reflects the process of the creation of the score, it can also become part of the score itself. This gives the dancer an opportunity to make discussions and interpret the system as a performance score and not just follow along to the images on the screen.
In November 2020, Terpsicode was updated to include more dance compositional terms and timings, rather than just the movement terminology as found in version 1.0. These additions to the language have really developed the patterning of images beyond loops of gestures into more highly composed phrases of movement.
Some of the new terminology includes global changes to the order of looping images. “Retrograde” will reverse the order. “Accumulation” will start with the first image, then first and second, then first, second and third, and so on. “Deceleration” is the reverse of “accumulation”, showing all images first. There are ways to control the speed of change for the images, using both specific numbers and predetermined lengths that are qualified using such terms as “sudden” or “sustained”. There are also ways to add indeterminacy and chance procedures, for example by introducing a “coin flip” that instructs the programme to choose between two images.
These new commands in the language have really developed the choreography in new ways that allow for an expanded range of possibilities that can be generated quickly and visually for the dancers. Sometimes in rehearsal it is easier to show the dancer a retrograded phrase rather than ask them to work it out completely on their own. Combinations of movement terms can be seen in many different ways. The use of algorithms allows for the breaking of habits through the suggestion of new combinations and timings of movement, allows for the generation of new material and also provides a space for playing with improvisational movement ideas.
Human Agency and Live-Coded Choreography
With the output of live-coded choreography being not only a computer-generated performance, but also a human-computer collaboration, dancers can move beyond the role of “serving” the machines and can thereby gain agency and the capacity to act in an environment in a personal, creative manner. This capacity is the decision-making process that informs the dancers as they execute movements; the environment is the resulting choreography, or dance work.
This idea of agency is found in the pioneering, algorithm-based choreographies by other artists, such as Analivia Cordeiro, who created scores with computers in the 1970s. Her work used images of stick figures to represent the positions of bodies in space. As with Terpsicode, in Cordeiro’s work the dancers move from image to image during the performance and “the dancer is free to describe the trajectory connecting the positions” (Cordeiro 2016, 25). The dancers use the computer scores as starting points and find movement through these scores.
Why is agency so important in this type of artistic work? Live coding is, among other things, about transparency of human decision — public thought and challenging rule-based systems. This means that not just the choreographer but the dancers too should be afforded the privilege of expressing their own creative — human — thoughts. They are not a machine but are simply responding to a machine, much like a live coder. They are co-authoring the work in real time and the work becomes an improvised duet for coder and dancer, rather than a single choreographer creating the work on the performer.
In Terpsicode, this agency may be seen by the audience in different moments. First, the dancer may connect one image to another with movement in between that is not explicitly prescribed by the choreographer or shown by the computer. This “tweening” relies on the dancer to create motion based on shapes as presented by an algorithmic process. Another way the audience may notice the agency is more apparent because of the projection of the visual score in the space: the dancer is simply not always doing the same actions as those depicted on the screen. This suggests to the audience that the dancer has taken inspiration from the score and is not strictly replicating the shapes that appear. It is a choice that is a response to the score, not just a reproduction of the images through the shape of the live dancer’s body. It is also a result of an algorithmic process that is then also further considered by a human process. Both are thinking-in-action and demonstrating the performance of thought through live coding.
Terpsicode is a computational language for choreography that allows live coding of dance in order to encourage the performers to exercise their agency over the creation of movement in an open process. It lends itself to definitions of live coding that focus on the process of decision-making, performing action and public thought. Through a convergence of computers, coding and bodies, dance scores are created and performed in real time with improvising and rule-based systems varyingly informing, directing and inspiring the live process of dance.
February 2021, April 2022
Birringer, Johannes. “What Score? Pre-choreography and post-choreography.” International Journal of Performance Arts and Digital Media 9/1 (May 2013) “Live Coding,” pp. 7–13. http://doi.org/10.1386/padm.9.1.7_1
Blackwell, Alan, Alex McLean, James Noble and Julian Rohrhuber. “Collaboration and Learning Through Live Coding.” [Seminar]. Leibniz, Germany: Schloss Dagstuhl — Leibniz Center for Informatics, 15–20 September 2013. http://www.dagstuhl.de/13382 [Accessed 28 December 2021]
Burrows, Jonathan. A Choreographer’s Handbook. Routledge: London, 2010.
Chicau, Joana. “Bringing Choreographic Thinking into Interface Design: Developing new ways of navigating through physical & digital environments.” Official website. http://joanachicau.com [Accessed 28 December 2021]
Cocker, Emma. “Performing Thinking in Action: The meletē of live coding.” International Journal of Performance Arts and Digital Media 12/2 (2016), pp. 102–116. http://doi.org/10.1080/14794713.2016.1227597
Collins, Nick. “Live Coding of Consequence.” Leonardo 44/3 (June 2011), pp. 207–211. http://doi.org/10.1162/LEON_a_00164
Collins, Nick, Alex McLean, Julian Rohrhuber and Adrian Ward. “Live Coding in Laptop Performance.” Organised Sound 8/3 (December 2003), pp. 321–330. http://doi.org/10.1017/S135577180300030X Available at http://www.researchgate.net/publication/228811209_Live_coding_in_laptop_performance [Accessed 1 January 2022]
Cordeiro, Analivia. Human Motion: Impression / Expression. First Edition. Self-published. Frankfurt, 2016. Available on the author’s website at: http://www.analivia.com.br/wp-content/uploads/2019/08/ANALIVIA-NOVA-VERSÃO-MAIO-2019.pdf [Accessed 28 December 2021]
deLahunta, Scott. “The Choreographic Resource: Technologies for understanding dance.” Contact Quarterly 35/2 (Summer 2010), pp. 18–27. http://contactquarterly.com/cq/vol-35-no-2
Gourfink, Myriam. L’Innomee (2003). http://www.myriam-gourfink.com/lInnommee.html [Accessed 28 December 2021]
Magnusson, Thor. “Algorithms as Scores: Coding live music.” Leonardo Music Journal 21 (December 2011) “Beyond Notation: Communicating Music,” pp. 19–23. http://doi.org/10.1162/LMJ_a_00056
Mateas, Michael and Nick Montfort. “A Box, Darkly: Obfuscation, weird languages and code æsthetics.” DACC 2005. Proceedings of the 6th Digital Arts and Culture Conference (Copenhagen, Denmark: IT University of Copenhagen, 1–3 December 2005), pp. 144–153. Available at http://nickm.com/cis/a_box_darkly.pdf [Accessed 28 December 2021]
Millard, Olivia. “What’s the Score? Using scores in dance improvisation.” 2016. Available on the Australian Dance Council website at http://ausdance.org.au/articles/details/whats-the-score-using-scores-in-dance-improvisation [Accessed 28 December 2021]
McLean, Alex. Live Coding Research Network, 2014. http://toplap.org/live-coding-research-network [Accessed 28 December 2021]
Live Notation Unit. Symposium and performance of live coding and live art (Bristol, UK: Arnolfini, 27 July 2012). http://livenotation.lurk.org [Accessed 28 December 2021]
Roberts, Charles. “Code as Information and Code as Spectacle.” International Journal of Performance Arts and Digital Media 12/2 (December 2016) “Live Coding,” pp. 201–206. http://doi.org/10.1080/14794713.2016.1227602
Sicchio, Kate. “Hacking Choreography: Dance and live coding.” Computer Music Journal 38/1 (Spring 2014) “Live Coding,” pp. 31–39. http://doi.org/10.1162/COMJ_a_00218
_____. “Programming Paradigms for the Human Interpreter.” ICLC 2019. Proceedings of the 4th International Conference on Live Coding (Madrid, Spain: Medialab Prado, 16–18 January 2019). http://iclc.toplap.org/2019 [Accessed 10 September 2019]. http://doi.org/10.5281/zenodo.3931791
TOPLAP Contributors. “TOPLAP Manifesto [Draft].” TOPLAP — Transnational Organisation for the Parsimony of Live Artistic Programming. 2005–. http://toplap.org/wiki/ManifestoDraft [Accessed 28 December 2021]