DawDreamer is an audio-processing Python framework supporting core DAW features such as audio playback, VST MIDI instruments, VST effects, and parameter automation.


C++ TouchDesigner plugin for VSTs and JUCE.

Escher Spiral Tiling

Escher Spirals at 60 FPS in TouchDesigner.

Boids @ 120 FPS

“Boid” simulation at 120 FPS in TouchDesigner, using compute shaders and dynamic object avoidance.

Real-time Salient Object Detection

C++ TouchDesigner plugin running U^2-Net at 30 FPS.

Van Gogh

Van Gogh is part of a series titled Radiosity. A light-collecting raymarching algorithm enables real-time rendering of dynamic 2D scenes.

Weighted Linde-Buzo-Gray Stippling

GLSL compute shaders, the jump-flood algorithm, and a weighted voronoi particle relaxation algorithm combine to yield real-time animated stippling art.

TensorFlow Sinkhorn Algorithm

Optimal transport of particles in real-time with the TensorFlow C++ API.

Face Space

Real-time lookup of similar face landmarks from 2000 album art images.


Google Magenta’s Onsets-Frames, refactored for TensorFlow 2.


C++ TouchDesigner plugin for real-time style transfer with PyTorch.


C++ TouchDesigner plugin for real-time face landmark detection.

Multi-Scale Truchet

Real-time Multi-Scale Truchet Patterns in TouchDesigner.

KD-Tree Layers

Loading a K-D tree on the GPU to instantiate and distort geometry in real-time.


Loading a K-D tree on the GPU to instantiate and distort geometry in real-time.

Binary Gradient

For 3 months in 2018, I was a Creator In Lab at the Asia Culture Center in Gwangju, South Korea.

Hexagon Generator

Real-time GLSL hexagon subdivision algorithm.

Escher Tiles

Interface for creating and automatically coloring Escher Tiles.