Video (version with sound coming soon):


Sketch (warning, if you've given p5 webcam permissions it will start automatically.)

I enjoyed many hours of suffering with my original idea, which was to make the body melt by moving its pixels around. Unfortunately, using pixel setting and getting slowed my code to a near unusable speed. The body segmentation model, bodyPix with part segmentation, was also not fast or accurate enough for what I wanted. And finally, to make a two-dimensional area 'melt' convincingly would require lots of complicated math/physics - like how I was trying to make my blobs from deliverable three bounce correctly, but even more complicated. This probably requires something like a physics engine.

Instead, I decided to learn how to use 3D primitives in p5. There aren't many of them, but a lot can be accomplished with toruses and ellipsoids. I learnt how to position them using transform() and rotate(), use different textures, and set/position the lights. I also delved a bit into learning sound by creating an oscillator whose amplitude and frequency change as you open your mouth or move side to side, respectively. I even learnt about the limitations of the camera in p5, and had to do various weird tricks just to make the background rainbow (I could also have displayed the webcam video, but it would be distorted unless I used the orthogonal camera.)

The visual aesthetic of this piece is nothing of great interest, but ideally it will make the viewer feel like a singing egg trapped in a rainbow dreamscape. Listen to the slightly pitched-down anime girl soundtrack, and augment it with your own special song. Kick back and relax.

Physical sketches:


This is a clock that counts down to your expected death according to data from the Social Security Administration. The statistics are highly generalized, taking into account gender and birthdate but not other important factors like health, substance usage, and country of origin. Nonetheless, the project is intended to reflect both anxiety about mortality and the persistence of the passage of time.

As a self-improvement exercise, this clock might help the viewer think more zen-like thoughts. As you stare longer and longer, the status bar creeps upwards. If you stare long enough, you may even be able to watch another fraction of your cohort die. As long as you're still alive, you're not losing the game.

I set out to learn a great deal of things with this project. I did not successfully implement an API, load a custom font, or fill in a complex bezier shape, but I definitely tried. I didn't manage to convey much about digital immortality, only regular mortality. I did some semi-successful math, as long as you don't think too hard about leap years. Everything else I did do can be seen in the p5 code.

Here is one analog sketch, and one digital sketch which never made it to the main code :'(



Digital Shaman Project / デジタルシャーマン・--ロジェクト from Etsuko Ichihara on Vimeo.

This project takes human-robot interaction and chatbots in a surprising direction. The robot itself (which can be any commercially available robot, like Pepper) acts as a shaman for those mourning a deceased friend or relative. It wears a lifelike mask of the deceased person's face, and imitates their gestures, mannerisms, and speech to engage in simulated conversation for 49 days after their death. From the perspective of Turing's Test, the robot is in a sense becoming the deceased for a short period.

According to Buddhist tradition, the consciousness of a deceased person takes 49 days to travel from one life to the next. Therefore, upon reaching this milestone the program shuts down. The mask falls to the floor, and hopefully, the friends and relatives of the deceased have had time to process their death and begin the healing process.

Not only is this project interactive, it also has to do with clocks and time. The tablet UI affixed to the robot's front counts down to the moment when the program will stop, the deceased person's 'second death.' I am interested in how countdowns, especially as they invoke human mortality, usually create feelings of anxiety, hopelessness, and doom. This project, on the other hand, creates more of a sense of peace and wistfulness. It explores ambiguities about death, resolving emotional turmoil without resorting to simplistic conclusions like 'the deceased will live on in your heart.'

Oh, and the photos imply you can play some variant of that plastic boxing robot game with... the dead people robots. Yay!?


I first spent a long time making this the wrong way, with a dx and dy for each object that incremented cx and cy with each call of the draw function. Mistake! That was not the purpose of the assignment, but it gave me good practice.

I also got a decent amount of trig and geometry practice by borrowing Golan's triangle-circle arc transformation code, to implement the bouncing guys as circles who would transform into triangles and back as they bounced (see sketches.) However, this didn't provide the naturalistic bouncing I wanted so I deviated from my original plan. Ultimately, I never got the squishy effect I wanted, this probably required a more complex simulation of the bouncing entity that took 3D volume, gravity, and density into account.

The easing algorithms I chose were quadratic for squishing width / height(the simplest option that was more interesting than linear,) and smoothStep for bouncing / movement. In real life, the effect of gravity is closer to a parabola, but I liked how smoothStep looked.

I don't think this piece is conceptually strong or memorable, but I did learn a lot. Now that I have a better handle on p5 and animation, I can hopefully start making more interesting work.

p5 sketch

Paper sketches:


I think technology and culture are tightly interwoven. Culture shapes which problems we think are important to address, research, and develop new technology to solve. Technology often gives rise to the metaphors we use to talk about culture (I keep seeing articles about how everything used to be compared to steam engines, but now it's all compared to computers with metaphors like putting together a vitamin stack or the human mind being software while the brain is hardware or whatever.) I can't help using these metaphors because they're the predominant framework of the age I was educated in. I do wonder, though, whether I'll still be stuck on the same topics in 30 years.

Maybe this makes me a boring person, but I like having a framework to understand what I'm looking at, so I appreciate last-word art for that. First word art is interesting by definition, because novelty creates interest. But without hindsight, it's difficult to tell what's merely interesting from what's interesting and meaningful. I think this is why many artists fall into the trap of making art with cutting-edge tech purely to show off their mastery of the tech. I suppose a lot of the art which I am drawn to, including some work with neural networks, is a hybrid of first- and last-word art. The works use very new technology to approach ancient, memorable questions in a novel way.


For this post, I'll be discussing Daniel Brown's Dantilon: The Brutal Deluxe (2016.) The title might refer to the Brutalist architectural style of the rendered fractalline buildings. Though I don't know anything about architecture, I am interested in dream landscapes both neurobiological and artificially generated. In the waking brain, hippocampal place cells fire in response to a specific known location and orientation. More mysteriously, they also fire during sleep, when the body itself is still, but new and old memories flit through the hippocampus on their way to longer term storage. That specific place cells exist calls into question the sense one typically has of knowing unquestionably where one is located. To me, computer-generated landscapes take on the sense of dreamlikeness when they inspire a sense of familiarity, like a dredged-up memory, while simultaneously inducing discomfort and displacement.

The imagery here appears to have been created with a three-dimensional fractal (probably a recursive function drawing any of a selection of features at a given level, from the blocky planes that make up the 'walls' of the buildings down to their individual window detailing.) The work has a fairly high effective complexity, as every instance (at least that the artist included in the album) is perceptually unique. It does, however, skew more towards order than chaos. The rules of the generator are strict enough that all the architecture seems physically possible and remains photorealistic, albeit somewhat gravity-defying.


1a. An Example of Effective Complexity

The human brain is biased towards total order: many rules governing brain organization lead to strong similarity between brains. These rules govern how neurons will be constructed, and how they will be linked together in patterns of excitation and inhibition that ultimately give rise to predictable output, e.g. the same(-ish) perception given a constant stimulus. But a brain with too much order could accomplish no more than an 80's-era AI expert system. The formation of unique memories in a newly-formed, 'blank slate' brain (which leads to learning) could be seen as an expression of chaos within the orderly system.

1b. The Problem of Meaning

Can and should generative art be about more than generative systems?

This problem is particularly conflicting to me because I'm interested in the mistakes that come out of a generative process. I like things that didn't come out as intended, like a GAN-bred puppy with three eyes. In that way I am interested in generation itself, how mutations are introduced, and how society turns against these unfortunate 'failed' instances of an algorithm. But, unlike the 'purity' of the process  Galanter describes, where the artist has no particular goal in mind, I am always obsessing over making exactly what I wanted to make. Ideally, I would want generative art that I make to reach a point between the purely generative sublime and the dirty, ordinary world of meanings and signs.



  1. This piece has a white background with a square-shaped cluster of short black lines within it. There is a consistent margin along the top and sides of the square, with extra space at the bottom to accommodate the inscription.
  2. The square makes up 93.5% of the width of the artwork, and 91% of the height of the artwork.
  3. The margin is approximately 3% of the width of the square.
  4. The extra space at the bottom is equal to 14.5% of the width of the square.
  5. The square is made up of an invisible 56x56 grid. It's not clear how this would scale, because all the iterations I can find are the same size. Would the number of rows and columns increase with a consistent margin, or would it scale proportionately so there are still 56 rows and columns of larger lines? 56 is about 10% of the square width in pixels.
  6. Each point on the grid is the midpoint of one of the lines. The points are NOT the endpoints of the lines (thanks Golan.)
  7. The length of each line is approximately 3.4% of the width of the square.
  8. The angles of the lines range from 0 to 2π radians.
  9. However, each iteration seems to have a slight horizontal or vertical bias (more lines are oriented with an acute or obtuse angle, respectively, with respect to the orientation of the artwork.)
  10. Approximately 7% of the lines are missing in clusters or 'interruptions'.
  11. The clusters are fairly low frequency - around 3 or 4 large clusters (10+ lines missing) will appear in a given iteration.
  12. In the bottom right corner, one can make out the artist's name and a date penciled in cursive handwriting.
  13. The artist's name is inscribed V. Molnar 20% of the time, V.M. 60% of the time, and missing 20% of the time.
  14. The year is inscribed 100% of the time.
  15. The month is inscribed only 20% of the time.


I needed help to discover that the line's midpoints originated from the grid, and not their endpoints. I implemented debug keys to refresh the composition (r) and to color-code the Perlin noise distribution (c.)

The distribution of 'interruptions' in my piece doesn't quite match the original artwork. Though I was able to adjust their spatial frequency to a satisfactory point, Perlin noise creates slightly blobbier gaps relative to the more rectangular or 'jagged' gaps in Molnar's work.

I tried implementing the piece without Perlin noise, by generating a fixed area's worth of randomly placed rectangles (while total area is less than 10% of the composition, make more rectangles), and only rendering lines that didn't intersect with those rectangles. However, this involved a triple for loop that immediately crashed my computer. There is probably a syntax error somewhere. The secrets of Molnar's implementation continue to elude me.

I'm also left with an outstanding question about the scale of the work. As canvas size increases, would Molnar want the number of rows and columns to increase, or would everything increase proportionally?



Link to Sketch