Yesterday I dipped my toes in the now raging currents of American activism. Alongside millions of men, women, and children, we rallied to the #WomensMarch, a full-throated, univocal rejection of Donald Trump and his ilk.

While the signage ranged from merrily goofy to violently hostile, three images stood apart. I speak of course of Shepherd Fairey’s breathtaking “We the People” project: Defend Dignity, Are Greater Than Fear, and Protect Each Other.

We The People

There’s raw power in these images. Each is a portrait of American individuality. Each exudes a quiet serenity and hidden strength. They are somehow so alike, yet also so remarkably distinct. At a glimpse they appear angelic, but on closer inspection they bear the unmistakeable contours of human experience. Impossible to explain, but do I detect at least a modicum of sadness behind each expression?

A good–but admittedly artificial–way to further examine the portraits’ unity and disunity is to watch them fade into and out of each other. This can be accomplished with the brilliant magick package, courtesy of rOpenSci. I’m sure there are websites that could do the same, but creating a gif that morphs each portrait into a cycle was just a few lines of code. See below:


pic_urls <- c("",

pics <- c(image_scale(image_read(pic_urls, "300x400")))
face_morphs <- image_animate(image_morph(pics, frames = 45), fps = 10)
image_write(face_morphs, "faces.gif")

I could stare at the result for hours, which I eventually tweeted out yesterday:

Sidebar: I actually couldn’t rely on the tidyverse here. purrr::map coerced the pics into a list that couldn’t be recognized by image_morph, or image_animate.