Short-lived portraiture for the era of the social-web: this interactive piece plays out the self-foregrounding dynamics of the social web in a physical installation.
Clone or download
Pull request Compare This branch is 16 commits ahead, 3 commits behind kylemcdonald:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Hacking together BaristaBot and Kritzler to make a bot that draws your portrait with a wall plotter.

It's built with openFrameworks and makes use of the following addons:


This app demonstrates how to extract a collection of paths (vector<ofPolyline>) from a webcam image in real time (every time you hit the space bar) using coherent line drawing with thresholding and morphological thinning, followed by a slow technique for extracting connected components in a way that focuses on longer paths.

Play a bit with the parameters for controlling coherent line drawing: black, sigma1, sigma2, tau, halfw, smoothPasses. Once you get these set up for a given lighting environment they should be fairly fixed and not require any tweaking for different people.

The thresh setting is post-CLD but is an important number to tweak before the results are thinned. After thinning, a collection of paths is generated using the minGapLength and minPathLength. minGapLength determines how big a jump is between two pixels before it's considered a "gap" (i.e., two disconnected lines). minPathLength determines how many pixels a path must contain in order to be included in the final collection. This helps remove very short paths (noise).


  • tries to threshold somehow, maybe prethreshold


  • level of detail, freq of image
  • if both low, super detailed and jittery data
  • if sigma2 or both high, all features will be swirly lower freq
  • both high yields thick lines, most dominant edges; also ghost lines


  • kind of related to high pass HDR look
  • value of 1 (high) will create edges everwhere it can imaging


  • high thresh gives more lines (more black), low gives less


  • some measure of local vs. global complexity
  • low gives lots of swirls, high gives longer lines


  • tries to make contours smoother, low number is sharper


This app is based on firmataExample. It's modified to control a stepper motor via arduino and the EasyShield stepper driver.


Contains Arduino firmware, currently this is just Standard Firmata