Leo Park / reel · v4
01/Cold open· 09
Brooklyn, NY · REC
navigate · Home · End
00 · Cold open
Taking work · Q3 2026 Brooklyn, NY 2 slots Q3 Creative Technologist · WebGPU 2022 — now

LEO.
makes pixels move.

Installations, browser-native tools, and the odd commissioned shader. I build things that respond to you — permanent pieces for cultural institutions, open-source libraries that keep the work honest. Brooklyn studio, anywhere with a good soldering iron.

Years shipping11
Installations14
OSS stars4.6K
Commissions / yr6
SWIPE
01 Reel
Reel · loopSELECTED · 2022 — 2026
WebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mappingWebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mapping
Field of Signals · MMCA Seoulglint · WebGPU libPaint with MusicSerpentine 2024 · entrance pieceField of Signals · MMCA Seoulglint · WebGPU libPaint with MusicSerpentine 2024 · entrance piece
Park StudioGoogle Creative LabFIELD.ioUnity TechnologiesPark StudioGoogle Creative LabFIELD.ioUnity Technologies
InstallationWebGPU computeOpen-sourceCommissionsGenerativePermanentResearchTeachingInstallationWebGPU computeOpen-sourceCommissionsGenerativePermanentResearchTeaching
02 Live demo
02 · Live demo · fluid.wgsl
02

A fluid simulation on the browser.

Canvas1920 × 1200Buffers3
60 fps · M2 Max
fluid.wgsl · compute · 256 workgroups

Navier-Stokes — in 120 lines of WGSL.

A compute-shader fluid sim running full-viewport at 60fps on a modest laptop. Velocity + pressure fields live on the GPU the entire frame — no CPU roundtrip. This is roughly the same pipeline shape I use for installation work: compute first, present late, composite everything in one pass.

120Lines of WGSL
3Storage buffers
60fps · 4K canvas
1.2msGPU frame budget
// pass 2 of 3 — advect velocity
@compute @workgroup_size(8, 8)
fn step(@builtin(global_invocation_id) id: vec3u) {
  let p = sample(id.xy);
  write(id.xy, advect(p, "stam-1999"));
}
03 About
03 · Editor's note
03

What I actually do.

Words220Est. read1 min
"Installations are the stress test. Open-source is the lab notebook."

I build things that respond to you — installations, tools, and the web version when a client has no budget for hardware.

My work sits between graphics engineering and studio practice. About half of it is commissioned for a gallery or a brand; the other half is open-source tooling that keeps the first half interesting. The installation work funds the library work. The library work makes the installation work possible.

The studio is small by choice. I take 5–7 commissions a year, ship one OSS release a quarter, and teach one workshop each summer. Everything else is noise.

04 Career
04 · Career · horizontal
04

Where I've shipped.

Range2015 → nowStops4
'22
Park Studio
Founder & Principal

Solo practice with two rotating collaborators. Commissions for MMCA, Leeum Museum, Serpentine Pavilion 2024. Running glint (3.4k stars) + noise.kit (1.2k stars) on the side.

14Commissions shipped
WebGPUInstallationOSSCommissions
'19
Google Creative Lab
Senior R&D Engineer

Generative-AI prototypes pre-Gemini. Lead engineer on "Paint with Music" — a browser instrument that reached 2.2M unique visitors in the launch month.

2.2MUsers reached
WebGLCreative AIPrototyping
'17
FIELD.io
Creative Developer

Generative branding + interactive data viz. Shipped the Deutsche Bank 150 identity system across print, digital, and an 18m LED wall. Worked with Nike, The Economist, Somerset House.

18Client projects
GenerativeBrandingLED
'15
Unity Technologies
Graphics Engineer

Shaders team — contributed to the Universal Render Pipeline shader graph + post-processing v2. Two patent filings on screen-space reflection techniques. Left to go indie.

2Patents filed
ShadersC#URP
05 Work
05 · Selected work
05

Selected work.

Window2022 — 2026Pieces12
Permanent
Project · 00

Field of Signals · MMCA Seoul

WebGPU · Three.js · 48-panel LED · depth sensors

Permanent interactive installation for the MMCA lobby. Visitor silhouettes get translated into a real-time field of animated glyphs across a 48-panel LED wall. Opened 2024, runs daily.

Year · 2024
Scale · Permanent
Outcome · 48 panels · 60fps
OSS
Project · 01

glint · WebGPU lib

TypeScript · WebGPU · MIT

Tiny animation library for WebGPU scenes. 3.4k stars, used in three published papers + the Three.js examples. Maintained alone — PRs merged on Sundays.

Year · 2023 →
Scale · 3.4k ★
Outcome · 82 releases
Project · 02

Paint with Music

WebGL · Magenta · Tone.js

Browser instrument where canvas marks generate music in real time. 2.2M uniques in launch month. Webby nomination. The demo still runs.

Year · 2021
Scale · 2.2M uniques
Outcome · Webby · nom
Project · 03

Serpentine 2024 · entrance piece

Unity · depth sensors · projection mapping

Motion-responsive light piece at the main pavilion entrance. Eight overhead depth sensors translate footfall into ambient sound + projection. Ran the full Summer programme, 214k visitors logged.

Year · 2024
Scale · Summer run
Outcome · 214k visitors
06 Stack
06 · Stack
06

Tools in the kit.

PrimaryWebGPU · TS · RustSideUnity · TouchDesigner
WebGPU Shaders Three.js TS / Rust Installation TouchDesigner C / GLSL Teaching
WebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mappingWebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mapping
WebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mappingWebGPUWebGLThree.jsShaders (WGSL · GLSL)TypeScriptRustUnityTouchDesignerArduino · ESP32Projection mapping
WebGPU / WGSL
4y
Three.js / WebGL
9y
GLSL shaders
10y
TypeScript
11y
Rust
3y
Unity · C#
8y
TouchDesigner
5y
Projection mapping
6y
OSS maintained · 2 libs · 4.6k ★
Talks · 14 talks
Teaches · SCI-Arc · yearly
07 Process
07 · How I work
07

How I work.

Cadence5 — 7 / yrRateon request
01
Scope narrowly. Overshoot later.

First week is always a single tight prototype — the kind that would survive if every other idea was cut. If that one runs, everything else we add is upside.

Week 1 · prototype
02
Compute first.

Physics on the GPU, CPU as a conductor. Nothing that renders more than once leaves the card. This is the rule that makes installation work possible.

Week 2 · architecture
03
Write it twice.

First pass is throwaway. Second pass keeps the one lesson from the first. Shipping is the third pass — and by then there are no surprises.

Weeks 3 – 5
04
Ship on a curve — not a cliff.

Permanent installations get a soft-launch period — two weeks where the piece runs but I am still there. Zero exceptions. That fortnight is where it earns the right to stay.

Launch window
05
Own the runtime.

I keep a one-year maintenance SLA on every permanent piece. If a panel flickers at 3am, that is my phone. It is baked into the commission.

Year 1 · care
06
Release the tools.

If a pattern shows up on three commissions, it becomes an OSS library. glint came out of MMCA. noise.kit came out of Serpentine. The next one is already in progress.

Every 3 / 4 pieces

"The browser is a gallery with four billion visitors and a latency budget. Treat it that way."

SignedLeo ParkApril 2026
Brooklyn, NY
08 End reel
08 · End reel
Back to the top of the reel

Got a weird idea? Send it.

Commissions open for Q3 2026 — two slots. Teaching bookings for summer. Everything else: ask and we will see.

BaseBrooklyn, NY
Time zoneET · GMT-5
Typical replywithin 24 hours
StudiedM.Sc Computer Graphics · Aalborg University, Copenhagen
StudiedB.Eng Interaction Design · Hongik University, Seoul
LanguagesEnglish · Korean · German (B2) · Japanese (basic) ·
ENDSELECTED · 2022 — 2026 · v4