Golan Levin: I am pleased to introduce our next presenter, Kate Compton. Kate Compton, also known as GalaxyKate on social media like Twitter, is a long-time generative artist, inventor, programmer, and Assistant Professor of Instruction at Northwestern University. She wrote the first paper on procedural platform game levels, generated the planets for the video game Spore, created the language Tracery, which runs over ten thousand community-made bots on Twitter, and invented an early phone-based augmented reality system. Her mission is to design artificial intelligence to augment human creativity and to create tools that bring AI into the hands of poets, artists, kids, and weirdos. Kate Compton.
Kate Compton: Hi. So yeah. As I went out on a walk today I had an idea for a talk, so I decided to throw out the talk that I also hadn’t written yet and write a new talk. So I’ll be presenting on Tracery today, but also some ideas that I had about Tracery. This is okay. I’m a chaos agent. It just kind of happens.
So, this is a tool I’ve working on. This is called artbot.club. I’ll talk a little bit about this later but I just kind of wanted to show y’all an example of Tracery for people who hadn’t experienced it yet. Tracery is really great if you would like to generate some interesting text. So this is a grammar that I wrote that is basically—like, you can think about it as running Mad Libs for computers. So this is a thing that generates patrons for a hipster restaurant simulator I’m making. And you can see that I’ve got a whole bunch of different types of people. And then things that people might have, like an overstuffed backpack or an accordion, or carrying a briefcase, carrying a boom box, etc. And you can see that kind of generating a number of different people.
I like that Tracery often surprises me with what it generates. So, here I’ve generated a number of things. But I got “a cheerful tourist covered in mud and a feminine lumberjack dressed entirely in lavender.” And then also kind of interesting ones like “dozens of gold-eyed supermodels” that cause you to create stories. The best one that this particular grammar ever generated was “an angry nun in a wedding dress” who came into my little hipster simulated restaurant and ordered a glass of wine and left. And I still think about her sometimes. So yeah, that’s kind of like, Tracery is you have a grammar and you’re generating stuff. And this is artbot.club which I’ve been working on.
So yeah, I want to show you my talk. So, I don’t have notes because…chaos talk. But yeah, so I thought a lot of folks tonight, especially would be…you know, between Everest and Electric Zine Maker and the other work like Zonelets, it’s a lot about bringing new people into not only open source but being able to make their own work and host their own work in kind of independence. So it’s about bringing people in to some of the nice things that open source art tools can do for you.
And then I wanted to kind of footnote that by saying also, sometimes we should let people go. And what does it mean to let a user go? And this is not— Like, I’m not speaking about like oh, I have a problematic user or I have a bad member of my community; I’m gonna push them out the door. But what does it mean to kind of have open doors that people can wander in and out of your project on. And you can see where my slides are if you want to copy them.
And yes, it is very much under construction. And let me see if I can also bring up chat so I can have chat open. Nope, I can’t have chat open while I’m screen sharing with Google, so that’s…that’s fine. So somebody’ll have to pipe up if there’s anything important that I need to hear in chat.
So yeah, this is Tracery. As I showed you before, it’s really great for generating text. And people have also used it to generate basically things that are representable by text. So like, SVG artwork. There is somebody who used it to generate programs for a music visualizer so they could DJ a club in London.
A little bit about the history of Tracery. It was developed originally for a class assignment and then I open sourced it and pretty much just like, didn’t do anything more with it. And then somebody named v buckenham in London, who I’d met only once at a park, created this wonderful site called Cheap Bots, Done Quick! where you could upload your grammar— So a grammar is just a JSON object, which I’ll talk a lot about later. You can log in with Twitter, open up Cheap Bots Done Quick, paste in your JSON object, and have a bot running. And it used to be that was all you needed to do and now like, Twitter will actually ban you pretty frequently, which is kind of obnoxious.
But one of the really amazing things about Tracery is that I made it when I had just learned Javascript. It managed to be like, mostly bug-free. But because it’s a very small library and it doesn’t do anything terribly complex, it ended up being able to run largely without me. And so it spawned this massive community that is completely distributed. So there’s all these wonderful Tracery ports to different languages, and there’s multiple ports to several languages. This is not like a centrally-organized thing, it’s just people encounter Tracery, start using it, make their bots, and often make things that attach to Tracery or that Tracery attaches to.
And then I just wanted to shout out the really wonderful funding and support from the STUDIO for Creative Inquiry, but also the Center for Research in Open Source Software at UC Santa Cruz, which has been funding me. And what I’m actually doing in exchange for that money— I am still working on Tracery. I won’t be talking about that during the talk, but I will be talking about like, why Tracery works for the past six years. But I have been like, building a social network and working on Tracery2 and Chancery, and it turns out that in doing that mostly I wrote a lot of code that told me what code I shouldn’t be writing.
I’m also wrote this zine if you want to learn more of my thoughts on open source software, which is basically information that I got from actually the convening for open source tools for the arts which Golan held a couple of years back.
But yeah, Tracery as mentioned before, it’s these little kind of JSON objects, or they could also be Javascript objects. And you feed those into a grammar and then you generate syntax with it. So that’s the way that Tracery runs. And as mentioned before you can also edit stuff in artbot.club and see it generate not only in plain text but you can also see it generate in this kind of recursive view which I think people find helpful for understanding what Tracery is doing.
So Tracery, the way people use it, here’s two really great examples. Here’s Tanya Short, who’s a professional game designer talking about how she uses it with the concept of grammars in teaching and for commercial games. And here’s somebody who says “I made the terrible bot of my dreams and I hope to make it even more horrible soon.” So I think that there’s a really nice range of people building things kind of intentionally and professionally, and also shitposting a little bit, and also just kind of…like, because Tracery is often so wild and uncontrollable it’s really fun to let it be a creative partner in your process.
One of my top users, Nora Reed, has talked a lot about how Tracery changed what they were able to make. So they’re are non-coder; they identify as a non-coder. And they’ve like— Yeah, I’ll talk later about that. And they made over a hundred bots, including one that’s fairly Internet famous called Endless Screaming. And Endless Screaming, all it does is it screams. So this is a grammar that makes little screams. And then it can also have conversations with you. So you can @ @infinite_scream. This is made using Cheap Bots Done Quick with Tracery. So Endless Screaming is hosted on Cheap Bots; Cheap Bots has a feature where you can toggle on that you want people to be able to @ it and you can say what you want it to say in response. So you can in fact go on Twitter right now and have a long conversation with Endless Screaming where you just scream back and forth.
So yeah, if you want to learn more about Tracery, if you take nothing else from tonight, go to artbot.club and…I don’t know, try it out. It’s still under construction. But if you want to learn more about things that people have made with Tracery, botwiki.org is actually really great. You could search for “Tracery” and find lots of stuff that people have made there.
So things that people have made with Tracery. You can make Twitter bots. But you could also, because of the way it’s been ported to so many languages because it’s also in…like you can use it in Javascript really easily, you can port it to Roblox and Lua. You can use it as a prompt for AI Dungeon. So people are making their own bots.
These are a couple of really interesting physical ones. People use it in printers and art installations. So it’ll print out new prompts, it’ll print out poems. This is Anastasia Salter. They made this quilt generator. Well, they initially made a Twitter bot, and then they used the Twitter bot to make sort of quilt-like shapes and print those out and put those in a gallery. So yeah, I think it’s really interesting that Tracery tends to be…not only does it make good stuff, it connects well with other things. Like, why does it play well with others? And in fact my first kind of big win with Tracery was v buckenham’s Cheap Bots Done Quick, which is like, not actually Tracery it’s just running with Tracery. And so this was like, the first thing that Tracery did that was good was connect to a larger piece of software.
And it’s really interesting that Tracery plays well with others, but also because I’m building a platform, because I’m building new languages on top of Tracery and building interesting expansions of the language, I want to know how do I keep that property going?
So Tracery, very unintentionally was very distributed. And this is largely because it was like…somewhat abandonware, or maybe just because it was what it needed to be when I first made it. And I didn’t have to update it much. Or I was too busy to be tempted to update it. It doesn’t have really central organization or an up-to-date site. There’s no like, Tracery Foundation. There’s not even a site that I kind of maintain periodically. I shipped it and didn’t update it. So ports are entirely self-directed, not staff-directed.
And tutorials are largely made by community members for community members. So this is one that a bunch of historians who run the Programming Historian site— A historian is basically talking to other historians saying “Hey, here’s this tool. Why would you make a Twitter bot with Tracery? And what does that mean for our historian practice?” So I thought that was really interesting, like, community members talking to themselves.
There’s also very— Because I built it when I had just learned Javascript and I hadn’t learned the right way to do Javascript yet, there’s no build process. There’s no dependencies. It’s just a single…or like a couple of Javascript files that you include.
So what made that work, and how do you make a sort of headless slime mold-style open source project? I’ll cover some things I felt were important.
So sometimes we talk about retention in open source projects. Less so in the sort of scrappy, independent world, but especially when you’re talking about open source projects in the Silicon Valley-style sense of open source software projects, where projects like Vue and React are open source. They’ll often talk about retention, and how do we get people, how do we bring consumers and users into our product.
Because of course we want to keep users, right? We want to get new users, and we want to keep the old ones from leaving. And there’s some great ways to keep people from leaving. They can’t leave us if their project will fail without us. Or if they can’t build a competitor. Or if we have their data hostage. And so when I looked for user retention images, I found all these really great stock photos of like— Okay, there were a lot with magnets. So magnets are an important part of process here. But there’s this sort of horrifying little puppeteer of a disembodied hand reaching through a door that says “OK.” And then I love this one. It’s like, do you want to keep your users? Why not put them in a bell jar so they’ll be safe forever.
So I’d like to pitch anti-retention as a pattern that we should be looking into. And anti-retention, I like to think of it as like kind of down here the summary is “you can take your ball and go home.” If you are not suited by the way that I run Tracery, you can build your own Tracery, you can build alternatives to Tracery. A lot of people do this. So I get a lot of— When I see Tracery being used places it’s like “Well Tracery didn’t quite work out for me so I built a Tracery-like thing that had these features that I needed.” And I think that’s amazing.
So a couple of patterns that make this work are you can remove it from a project without rearchitecting the project. So it’s not like a load-bearing pillar, or it’s a pillar that you could swap out with something else and have it still work.
The data is human-readable, and I’ll talk about that too. Things like you can edit it anywhere. So, if I have a tracery editor like I have at artbot.club, that’s great. That’s a really nice editor. It’s very posh, it can do lots of cool things. You can still edit in like…Microsoft Word might not work but like, you could still edit it in a text editor.
Importantly, you can also send it to friends in an email or post it in a forum. There’s no like, data structure that I have to maintain on a cloud. If I want to send you this thing, it’s not an NFT that I have to put up on a blockchain and somehow transfer to you to give you my code. I can just like, email it to you. I could probably print it out on a sheet of paper and have you just like, type it back in like if we were a 1980s-style programming magazine. We could just like, put our grammar in BYTE magazine and have you paste in other people’s grammars.
You can build a competitor in your preferred language with your custom features.
And importantly, you can keep your own data. So you can download your data… Like, if we have a hosting site, you can download your data. Or if Tracery stops working for you, you can look at your grammar and say like, how else would I interpret this grammar, and you could build your own interpreters for your data structure. So you don’t even need Tracery the library. You can rebuild new things that deal with the Tracery data.
So why would you do this? Like, why would you say like “Oh users, please leave my project?”
Flexibility. So, flexibility is nice. I think this is what makes a lot of the sort of weird places that Tracery ends up getting to viable. So projects grow and change, especially art projects. And they develop different needs. And when a user outgrows your tool it’s actually a really beautiful thing.
They may also need to use your work in a way that you didn’t anticipate. So I often break open source projects. Because a lot of them rely on the fact that you might have an Internet connection. So I was using ml5 in a project that I was showing at a Burning Man-like event in a forest. And because it was a Burning Man-like event in the forest, it did not have Internet. And so one of the things that ml5 was doing was actually like okay, I include the ml5 library and then it calls out and downloads a giant model of the human body so that you can do body tracking on it. But I wasn’t going to have that so I end up downloading that model and then somehow rerouting that call in the ml5 library itself. So I actually edited the ml5 library so that it was calling a different model so that I could use it offline. So that’s often the thing that people have to do if they’re using your library in different ways that weren’t expected.
Resilience and preservation are also a big one. Because you might not be around forever, or want to host things forever. Or your project gets taken over by hostile forces or bought out by somebody. Or fifty years pass, and all we have is that printed out BYTE magazine of your grammar. So even if all we have is a printed out BYTE magazine of your grammar, or you know maybe you made a zine with your grammar in it and historians have that, all the silicon in the world has long since rotted away, they can still say “Oh, look at this grammar. It’s human-readable. I can kind of understand what they were going for with this art piece. And maybe I can build an interpreter to recreate this lost language of Tracery. I can type this stuff in and I can kind of bring it back.” And that’s not something you can do with a Flash file. There’s no Flash file you can print in a zine and then have people re-understand what was going on in that Flash file.
So isn’t this just open source? There are in fact plenty of open source projects that use non-human-readable data formats, that are too big to port meaningfully, that lock projects into frameworks. Like if you’ve ever tried to break up with React, you know that it’s very difficult to break up with React. But can we move it closer to anti-lockin patterns?
And I’ll just talk about three patterns real quick. So one of them is portable data. This is actually not something I learned from open source, this is something I learned when I worked on Spore. So in Spore, you can see over on the right I have this like…it was called a spoffit. This is a creature I made in Spore. And this is actually a PNG file. And even today, you can drag this thing into an old running copy of Spore, if Spore still runs anywhere, and actually in the PNG they are invisible pictures up in the upper left-hand corner that steganographically encode your Spore creature data. So even if Spore doesn’t run, it’s not human-readable but you can still get the Spore data out of this creature.
It was also really great, because that meant that people could drag their PNGs into any place that would host a PNG. So even in the very early ages of like 2007, the Something Awful forum…for its many flaws and interesting properties, actually ended up having one of the best Spore communities, because people could drag their creatures into it and then basically…they were like dragging and dropping save files in a forum environment. So I thought that was really interesting as they like…oh, how easy is it for your user to drag and drop a Bitsy file, or can I trade Electric Zine Maker files with my friends over IM?
So JSON is really great. I haven’t yet figured out how to embed JSON in a PNG but it can’t be too hard. JSON is really nice because it can also turn into a Javascript object. And so if your user like me has CORS-constrained situations like you don’t wanna have a server, because servers are hard, if you just want to have an HTML file you can edit and then drag into Chrome, you can actually use Tracery with a Javascript object as your grammar and it’s not a big deal. And I can’t do that if I say want to upload a JSON file or any other sort of more complex data structure. So yeah. Nonhumans can also make converters between formats if they want to. So that’s neat.
Frameworks no, libraries yes. So frameworks are a style of program that wraps your program in additional logic. I put up the Wikipedia definitions here so you can see like okay, in a framework the framework is the main code and you are making a little modification on the inside of it somewhere. And in a library you are writing your own code and then these are just like a collection of resources. So you can kind of see who’s getting centered here if I’m using a framework versus a library. Like am I sort of hosted in somebody else’s giant machine, or am I kind of my own autonomous unit and bringing in information from outside.
This is really interesting because like, p5 I love to absolute bits. But it’s often taught as a framework. So if you have p5 and you’re teaching your students how to use p5 and they’re using it in framework mode, it’s really hard for them to then say like oh, I really love my program. I want to take this and put it in regular Javascript, or I want to switch it to use anything else like three.js or jQuery UI. But I use it as like basically a vanilla Javascript library, which it allows, which is wonderful. And it’s harder to set up. I think accidentally. This was not intentional. It is harder to set it up but I can also then use it to switch out with any other technology.
I was talking with some web art practitioner friends, and we were talking about like, what captures the feeling of you are an artist and you’re able to pick up and put down different art tools. Like I pick up charcoal and I use the charcoal. I pick up a pencil, I use the pencil. I collage some magazine images into it. And I think the closest thing that it comes to you is like using vanilla Javascript with libraries that I am treating very intensely as libraries and not as frameworks. Because I can put them down. Like I put p5 down all the time. I don’t have to use it for everything—I use it for almost everything but I don’t have to. And so the times when it’s not useful for me I can just set it down. So never trust a library, even p5, you can’t break up with.
This is one—again, half-baked ideas here. I was trying to think of like, why does Tracery feel fundamentally different than something like three.js which just had its ten-year anniversary and was talking about how many tens of thousands of lines of code and how many—I think there’s like a thousand—like, it was some ridiculous number of contributors for three.js. It’s like a massive project.
So why does Tracery feel different from that and what does that mean for us? So I’m kind of coming up with a word—like, songs versus sagas is two ways to evolve your open source project. So a saga is like you just keep adding stuff to it. It does something, and you add more things and you add more things. It’s got more libraries, the libraries get bigger, it can do everything. And it gets just like so many lines of code.
And a song is something that um…like a song is always small. Like no matter how long you work on a song for, it never gets more than three minutes. It’s not like you work on Smooth Criminal and suddenly it’s like twenty-five minutes long. No, you can work on Smooth Criminal forever and it’ll just become a more perfect form of three minutes.
And also because sounds are very small. So if your project stays small, like Tracery— So Tracery has stayed very small. Even if I’d kept working on Tracery— And I’ve kept working on Tracery2 and it’s actually just getting smaller. It got slightly larger than Tracery and now it’s almost about the same size as Tracery, even though it’s got a ton more functionality.
But one of the things that Tracery does really well is people cover Tracery. Because it’s a small library, you can make a Tracery…like you can basically do basic Tracery in about three lines of Javascript. We’d assign students to make a Tracery clone in C as an intro experience. So you can just make your own Tracery. Because it’s a very very tiny, short song it’s really easy to basically karaoke Tracery.
So yeah, that’s why we end up getting a lot of Tracery ports. These are basically just like…this is the cover mix of Tracery. And some of the covers are actually better than the original. I would consider that Allison Parrish’s Python Tracery is actually a nicer library than the original Tracery.
So yeah, I had a post that Golan liked about there’s different kinds of free software, in these were things that I have heard people mention, and “free as in piano” as well. So now there’s kind of two more dimensions of how to structure open source software. Are you a saga open source project, or are you a song open source project. And if you are a song and you notice yourself getting to like the six-minute mark, you notice that you are in fact not Alice’s Restaurant and try to scope that back. But if you’re a saga, just know that like, nobody’s going to cover you. If there’s a translation project it will be a massive academic undertaking.
And also that’s why it feels really great to me that I’ve rewritten Tracery2—this is not an exaggeration—probably twenty or more times. Because each time I practice it— I actually like, wrote the entirety of Tracery2 this weekend again. Actually Tracery2 plus Chancery. So I wrote two languages this weekend, it probably took about six hours. Because again these are very small songs that I’m just kind of like, working through for the twentieth time, removing very small notes and just kind of making them more pure and perfect. So eventually I kind of hope that people will be able to cover Tracery2 and Chancery as well in the same way that people were able to karaoke Tracery1.
So yeah, just some final thoughts before I finish up. We can also think about anto-retention not just as software but also as part of our community. So maybe we shouldn’t trust a field you can’t break up with. I like to think of this as like cats, if the door is closed they really need to go out. If you have a field like I can’t break up with or a tool that I can’t break up with, I really need to leave. But if you let me leave, then I’m actually happy to stay in there.
So yeah, maybe we should start thinking about open source development instead of being like a lifestyle calling. And Golan’s OSSTA group has has been really great for this. Like, we all do open source software but we don’t feel like open source people. And this is maybe to stereotype open source people. But like, there’s an open source community and they have a very particular flavor to them. And to be a person who makes open source software or open sources your software, you don’t have to be a lifer. And also there’s no “here” here. You don’t have to think about “do I belong here” because there’s no here. It’s just a set of design patterns that you can pick up or drop off. You don’t have to like, buy the beard and the hoodie.
So yeah. I’d like us to think, just kind of as a final takeaway, of the difference between clubhouses and takeout windows. So I’m droppin’ more metaphors on y’all. But there’s a book in I think circa 2000, early 2000s, called Unlocking the Clubhouse. And this book was about women who entered the CMU computer science department and whether or not they stayed in or whether or not they dropped out, with the premise that women dropping out of computer science was a bad thing and bad for gender parity and bad for the field in general.
And that’s…like, that’s good and important work to do, and the book is in fact really interesting and I think probably still relevant today. But also I think we need to change the framing a little bit, like shift the framing. Do we need to get everybody in STEM? So STEM is high-paying. Like, capitalist hellscape and all that, if you want to support your family and friends and stuff, then getting a well-paying STEM job is a good way to do that and there’s reasons to do that.
But our idea that like okay we’re gonna fix America by getting everybody into STEM classes that you often see in grants and funding opportunities, maybe we should consider like not doing that. Like maybe not everybody has to leave where they are and migrate to STEM. So maybe they don’t have to come into the clubhouse. Maybe they don’t have to become members and change where they are.
So think instead about takeout windows. So you have some tools like Tracery. Tracery’s a really great takeout window. A lot of people come in, use Tracery for a tiny little bit of code or maybe just make a single Twitter bot, and then they wander back off to doing their normal life. There’s an artist named Johnny Sun who writes books, like beautiful thought-provoking books about being sad and having anxiety and they’re like…it’s like Shel Silverstein for grad school anxiety. And he also made a little Twitter but, and he just made that little Twitter bot, and I don’t think he’s made any other Twitter bots and that’s fine. He came in, and made a really wonderful Twitter bot, and like…he got his takeout and left. So I think that’s a really interesting thing to consider. Like how easily can people come, take what they need, and go back to their communities like The Programming Historian.
So yeah, this is my personal motto that I’ve been working on for like a number of years and I think it’s pretty good: Bringing AI to the people that AI doesn’t deserve. Which kind of frames it as like okay, how do I bring tools to people or how do I provide a tableful of tools for people to take without my permission, that AI doesn’t deserve, that they don’t have to come to AI. The AI’s just a gift.
So yeah, I’ll minimize this and then— Okay cool, now I can see chat windows and I can stop sharing. So any questions?
Golan Levin: Thank you so much, Kate. I’ll manage some questions from the YouTube chat which I have here, and also from the Zoom chat. But first let me just say a few just…just “wow” kind of thoughts coming out of your presentation. First of all the small detail mentioned in passing of steganographically encoding metadata into PNG files for the purposes of data portability. Wow.
But more generally than that, and this is something that’s occurred to me through the process of sort of shepherding the Open Source Software Tools for the Arts residency group, is how much of what the work involves again as not coding but actually metaphor-building. I see this in the chat as well. You know, like Marina’s fried egg metaphor, right. Songs versus sagas, as you pointed out. The clubhouse versus the takeout window. As we talked about software that’s free as in speech or free as in beer, of course—these are well-known—but free as in puppy, free as in mattress, free as in piano, and I think we even talked about free as in Halloween candy, as different kinds of approaches to freeness.
I also loved about your talk the way in which sort of the freeness of the software is always sort of about how it’s given. But in talking about anti-retention and making a value out of that, you make a value out of taking. Which is very interesting. There’s a kind of egolessness in encouraging anti-retention, right. Take it, go fork it. Go cover it.
Kate Compton: They may forget where they got it. And that’s also a really really [indistinct] thing.
Levin: I think it’s a really laudable kind egolessness on your part, or on the developer’s part, as someone who’s sort of saying “Yeah take it, go do something with it. I don’t need a credit or something.”
So, I’m just gonna see if I can pull some questions out of here. “Love the anti-retention model as an orientation away from growth for the sake of growth. Also opens up more options for modes of consent.”
Compton: Mm hm.
Levin: Yeah.
Compton: Yeah, we often— One thing that I kind of wanted to bring out in my talk was we often don’t notice how easily poisoned we’ve gotten from the Silicon Valley language just because it’s so pervasive. That well of course we’ve forgotten why we want the numbers to go up and to the right. We just remember that that’s a good thing. So yeah. Like it’s hard to shake the mindset that we come in with.
Levin: Rules encode philosophies. And we can have other philosophies than the one that’s common in Silicon Valley. And I think that’s really evident in your presentation.