Chapter 4
Dragons and Princesses.

“Perhaps all the dragons in our lives are princesses who are only waiting to see us act, just once, with beauty and courage. Perhaps everything that frightens us is, in its deepest essence, something helpless that wants our love.”
― Rainer Maria Rilke, Letters to a Young Poet

This essay covers a series of failed collaborations, confusing princesses for dragons.

In my attempts at unsettling my role as the natural and assumed center of the creative process, I added chance and forms of randomness to my network of tools. I included randomly selected lines of some texts, and loosened my grip on the specific numbers that needed to be included in the programs that affected the outcomes. I let go, but only a little, only within boundaries that I very deliberately set. Images were randomly selected (but from an archive I selected), the text block was randomly placed (but with parameters to stay fully on the page), the dimensions of the text block were randomly selected (but within a range that would prevent negative numbers and therefore backward text), the colors, the shape of the page, the overall aesthetic; all of it was at my direction. I had let go to some degree, I had loosened my grip, but it was still my show; the letting go was still well within my control.

The programs that I had been writing were self-contained and narrow in what was required of them. They incorporated code from various communities, employing solutions other coders had developed to problems I was facing. They occasionally reached out into the internet to download a photograph, but they generally existed entirely on my computer. What was achievable with chance and randomness was fantastic, and I had only really begun working in that space, but what I hoped for was something past chance. I saw the possibility to move past randomness towards real collaboration in a new set of tools: machine learning and artificial intelligence. I saw various ways to link up my projects—to extended the creative network of agented actors, to redefine what a collaborator was—to the machine learning tools that Google and others had been developing was being developed by groups like ML5. Using and collaborating with these tools I saw an opportunity to create work with inputs that had much more say than math.random() had been about to express.


The first project was a failure, but I had set it up to fail. It was a failure in the sense that the output was clearly nonsensical, and I had set it up to fail mostly to make fun of it. The Bad Art Generator project uses a machine learning dataset called ImageNet (ImageNet is a massive collection of images tagged by hand that was used to train an image identifying algorithm) and a randomly selected photograph to create the output. The program downloads a random picture from and then the algorithm uses the ImageNet dataset to attempt to identify the subject(s) of the photo. What the algorithm can do is actually fantastic; its ability to even remotely identify the content and subject of an image it has never encountered before is a huge accomplishment. But it’s also often stupid and wrong, ridiculously so. It reminds me of a scene from The Simpsons episode “Last Exit to Springfield” (Season 4 episode 17): I am in the role of Mr. Burns chastising his monkeys for grammar errors.

The program’s image identification is often wrong; it is hamfisted in its reductions and assumptions, lacks any nuance or cultural understanding, and seems hopelessly foolish. It can be all of those things. It can also make something like a profound statement, making a connection I had never made, seeing something new and different in an image I did not care about, or think twice of.

This was my first exploration of a real letting go, of something like a collaboration as I have come to understand it. The implications of this scared me more than I had thought it would. The collaboration was there; I could have chosen to trust the process, trust the network, trust that we were going to make something exciting and new. Instead, I withdrew that trust and turned to easy laughs at the expense of the nonhuman I claimed to be collaborating with. I mocked it for not being perfect and sheltered myself from caring about the outcome by making its failure the point. The text at the top that reads “hi person, buy this” was decided on and added in by me (not generated by the code) in a mocking fashion, using the bland and non-specific language that can make ImageNet sound silly. “Buy this” was also used to make the output seem clunky, crude, and unrefined (the opposite of what I want people to think of my clever and insightful work.) I then dressed it all up in a sort of youthful pose of something that looks like graphic design. The acid green, the stroked text, the system default Helvetica; a bunch of graphic design looking stuff to distract a viewer from what I had actually done and my intent.

The technical aspects of the project are a very teamwork oriented back and forth communication (the team being me, the code I wrote, the image archive unsplash, and the machine learning dataset ImageNet). The code adds a random number to the URL that is passed to the image archive site, and then downloads the photo. ImageNet then makes a guess about the content of the image and returns a text array of likely terms and percentages related to that guess. The program then takes that text information and determines the maximum size of the text in the font I selected to fit on the final output size (the percentages are ignored).

The result is an intentionally terrible advertisement. If this project succeeds at something it’s making fun of AI, and also capitalism.


This was an experiment in trust with the network and its actors/objects. In these projects I aimed the image selection at the MET’s online database of images. In the two versions discussed here I used ImageNet to run an image classifier in one and PoseNet (which attempts to build out a wireframe model of a person based on one image) in the other. In this project I never produced a final output that I would consider done, I abandoned the project before I got that far along.

These tools were fascinating to be using. Not many designers seemed to be working in this space, and it felt somewhat unexplored; it felt like I could try something genuinely new. But I was also afraid that in a new space where I could try and create something new I could also legitimately fail. In that fear of real failure, I again took control away from the network and my tool-collaborators. I still did not trust them. I was still testing them, and wary of them. I was looking for and hoping to call them out on their failures. I secretly hoped to show that my humanness meant something more when looking at art, that I would see beauty and be free of judgment about the limits of what is acceptable in shape and form. I thought I would catch the network in a compromised ethical space making assumptions and categorizations that would show that it was, in fact, monstrous and bad. I assumed AI and machine learning were dragons, and that my work would show that I was right not to trust in it. It would show that I was right to pull back my care, to take care, to tread carefully. Unsurprisingly I got nowhere.


I abandoned this project because I found it to be too ethically fraught. But it really raises a lot of these questions about trust and care in our collaborative networks. I withdrew from the technologies due to a lack of care and a lack of trust in what it was doing. I could not find (at the time) anything of value in this network. I guess you can’t care about everything, but I suppose that if you can, holding that trust and care should be your aim. Then you are at least prepared for some type of negative result. Maybe if Victor Frankenstein held tha belief that he should have cared for and trusted, in some manner, his creation then he would have understood its response better.

The FaceAPI Javascript module I used was ported for use in P5JS by the community group This module is trained on images of faces to detect and predict the location of landmarks on people’s faces (like noses or eyebrows or mouths etc.). My initial project idea was to make a poster that would be bespoke to the viewer. Different parts of the poster’s content that rely on number inputs, such as type height or leading or location, would pull the information from values generated by the mapping of the module. That was the initial plan; I had not given the details a lot of thought. It was possible; I had not seen it before, it would be a good showcase of the collaboration.

ML5JS is a progressive and caring community. They are committed to a sort of radical transparency about the work they create and share. They have introduced a version of a biography that they include with each tool to let people interested in engaging with those tools have a fuller understanding of them. For FaceAPI, by default, they did not implement the complete code as it was developed. “The ml5.js implementation of face-api does not support expressions, age or gender estimation.” These aspects of the tool are so flawed in concept and implantation they have chosen to avoid them, but not to retreat fully from the relationship. They have chosen to spend the time and energy to care for the network, to see possibility, to maybe create something of value.

Even with this limited and cared for implantation of FaceAPI I pulled back. I abandoned the network and retreated to ethically solid ground. The first thing I built was the headline function. Using your camera, the module would measure the distance from the bottom point of your top lip to the top point of your bottom lip, and then it would take that value and create a text-height value to apply to the Headline (in this case, it is the placeholder text that reads Headline.) The implications of what I was going to have to do next occurred to me at that point. I was going to have to give values to different measurements from the faces of audience members participating in the creation of the poster. The idea of giving a literal value to aspects of facial features was enough to end the project at that point. I could find no value in the algorithm. Its flaws seemed unfixable.

I often think about this project. I walked away from it for being a monster in my eyes. My knee-jerk reaction was to pull away and dismiss it as broken and flawed. But what the community at ML5JS does is more like the trust and care, the careful and caring trust, that I have come to embrace in my current work with machine learning. They have worked with technology; they have cared for it and made it better. The poet Rainer Maria Rilke once wrote, “Perhaps all the dragons in our lives are princesses who are only waiting to see us act, just once, with beauty and courage. Perhaps everything that frightens us is, in its deepest essence, something helpless that wants our love.” I think about this project, and I think about that idea of dragons that are really princesses, of monsters that actually just us, but unloved—and I wonder about the dragon I saw there and feel like I need to try again. I need to be open to the possibilities that come with keeping doors open, even just a crack.

The end.

Chapter 5 — Floating on Oceans.