Espresso Drone: turning cafe rhythm into a city instrument
Mar 18, 2026 · live
Espresso Drone started as a loose triangle: fluid dynamics, maps, and sound.
At first the concept split in two directions. One path looked like a standalone audio plugin. The other looked like an art piece. I chose art, but kept the audio ambition high so it would not collapse into “nice graphics plus polite wallpaper pad.”
Live piece
https://www.unusable.ai/espresso-drone/
Pre-build setup
Before there was a real prototype, the only concrete thing was a learning target: understand fluid simulation behavior well enough to shape it, not just watch it.
From there, the project was framed with a few constraints:
- use real city geometry
- tie event cadence to real social behavior
- keep UI minimal and performance-safe
- iterate in short loops with hard checkpoints
That combination ended up carrying most of the project.
Build method: short loops, real checkpoints
The development rhythm stayed tight:
- implement
- listen
- look
- adjust
- repeat
No giant specification phase. Each pass was treated like instrument calibration.
Sequence was roughly:
- prove simulation, rendering, and audio can coexist
- replace placeholder blocks with real map/building data
- tune for expression, not only technical correctness
- remove non-essential controls and views
Most quality came from accumulation, not one heroic algorithm.
From abstract boxes to real places
Early geometry was placeholder blocks. Good for debugging, bad for meaning.
We moved to real city data and locked two areas:
- Copenhagen center (around Helligaandskirken)
- Roskilde center (around Domkirken)
Capture radius was tuned repeatedly for composition and event density. Too wide made activity feel thin. Too narrow made repetition obvious.
Current scale keeps enough structure for readable flow while preserving collision density for musical behavior.
Event logic: espresso cadence over random emitters
Random emission looked alive but felt arbitrary.
So the emitters were tied to cafe behavior and simple espresso-serving assumptions.
Pipeline:
- collect coffee-serving locations per area
- build an editable timing sheet per location
- add jitter around base intervals
- apply hour-of-week multipliers with correct local timezone handling
That was a major turning point. Copenhagen and Roskilde started to differ in cadence as well as geometry.
Visual language: remove softness, keep structure
A big shift came from subtracting decoration and committing to strict monochrome structure:
- dark background
- dim filled buildings
- sharp fluid marks
- impact-driven building-edge activation
The building-hit response also changed. Instead of full-outline flashing, edge activation now travels from collision points. Impacts read as directional events, not generic highlights.
Audio language: less smear, more harmonic structure
Audio went through a rewrite.
Early synth/portamento behavior felt smeared in the wrong way. The final direction moved to cluster-based sine behavior with harmonic evolution linked to simulation state.
Key choices:
- quantized pitch space (minor pentatonic center)
- collision and field-driven voice behavior
- evolving harmonic masks
- spatial spread tied to scene position
The target was never melody. The target was a breathing harmonic field that thins, regroups, and shifts weight while staying tied to visible motion.
Release polish
Final polish was mostly subtraction:
- one mode only
- fullscreen framing with fixed aspect behavior
- startup city chooser
- preload/ready gating before interaction
- close/reopen session control
- cleaner deployment bundle for publishing
By release, the piece behaved like a stable performance surface.
What this taught me
This project began with no fixed visual destination and no fixed sonic destination. It was mostly a public-data exploration plus a fluid-dynamics learning exercise.
The first useful simulation behavior looked random. Once that existed, the concept became easier to bind into something personally meaningful. Coffee made that part straightforward.
Using a coding agent as both sparring partner and builder made it possible to stay in a creative-director role: exploring aggressively, curating results, and tuning toward taste rather than spending all energy on mechanical implementation.
Espresso Drone ended up as a civic breathing model disguised as an art map: coffee activity becomes pressure, pressure becomes collision, collision becomes light and harmonic motion.
That chain is the piece.