20:00 Tap to start

Unveil Studio

Interactive installations & real-time media — Simone Franco, Berlin

Scan to follow along on your phone

A selection

Works

01 / 03

ZKM / Schlosslichtspiele Karlsruhe — DM Award, 1st Prize

Particles Ensemble

First prize at the DM Award Karlsruhe (Kulturamt, Media Art Is Here, with ZKM) — concept and production by Overlapping Studio Berlin. By night, the palace façade itself becomes an interactive stage: visitor movement is tracked and turned into particle systems that grow denser and more alive as more people join in. Media scenography by Simone Serlenga, real-time motion design by Simone Franco.

Camera control ran over the VISCA protocol: with AI as a co-pilot, a real-time system was built from scratch to drive the camera straight out of TouchDesigner. The whole project is free to dig into on Patreon.

VISCA-controlled PTZ camera TouchDesigner VISCA control panel Live tracking grid overlay

The technical part: tracking a moving crowd across a 28+ metre tracking area (the Karlsruhe Castle façade itself runs over 130 metres), from one single camera. AI vision was thrown at it — YOLO, Depth Anything, segmentation — and it failed, even against a 3D-simulated crowd built specially to test it. No AI could do that. So: just brains — this frame minus the last frame is the shape the particles emit from.

02 / 03

with Quattrolinee

Graphic Days

A massive LED wall turned into a touchscreen via LIDAR tracking. Love notes collected online, released as letters into a particle simulation: hold one still for three seconds and a whole phrase reveals itself.

The technical part: talking to a web database is the most boring task in this whole field, and there was no time to learn it properly. So: a small multithreaded, async sync server, vibe-coded on the fly, that fires a bang back into TouchDesigner the moment it's done. Every phrase in the database made it onto the wall, one at a time.

Performance leaned hard on the CPU — the GPU on site wasn't great, so the whole system ran on Bullet physics instead, and a lot of patience. Each letter stayed a letter while you tracked it; stand still over one, and it turned into a collider that grew, pushing the surrounding letters aside and slowly revealing the phrase underneath. Every reveal spawned a few new particles into the mix — the crowd grew denser through the day, then reset empty again each morning. The neat discovery along the way: feedbackCHOP and feedbackTOP are, at the core, the exact same trick.

03 / 03

Immersive AI Exhibition

Hokusai

An immersive show built around Katsushika Hokusai — yes, the one with the Great Wave. Every backdrop was generated with InvokeAI — a genuinely excellent tool for building rich, controllable AI backgrounds, well worth supporting. The paintings themselves were brought to life locally with Wan2.1 through ComfyUI, on a single RTX 4090.

The technical part: 62GB of RAM, 24GB of VRAM, both maxed out — the machine locked up solid, but kept rendering anyway. Every animated painting: 1024×1024.

Between commissions

Personal Projects

Real-Time AI Pipeline — NPU / iGPU / dGPU

Morpheus Cam

A webcam feed turned into a live hallucination: depth pulled from your own body modulates the noise seed of a Stable Diffusion Turbo pipeline, running straight on the NPU. Every chip on the laptop earns its keep — NPU, iGPU and discrete GPU, three different pieces of silicon, one single frame.

See the source on GitHub ↗

Three chips, one frame:

NPU · XDNA2Runs Stable Diffusion Turbo at fp32 — the actual hallucination.
iGPU · Radeon 880MDepth Anything v2 on the webcam feed, plus the TAESD decoder on every SD latent.
dGPU · RTX 5070Flow-interpolates consecutive SD frames into bursts, so the hallucination feels alive at ~30fps.
Live prompt and modulation controls Morpheus Cam hardware dashboard — NPU, iGPU, dGPU utilisation Windows Task Manager — NPU, GPU and CPU all under load at once

The receipts: NPU, iGPU and dGPU all pinned near 100% at once. AI is finally why you paid for all that silicon.

The technical part: this doesn't travel well. Two conda environments, a specific NPU SDK, a hard-coded device ID for hybrid AMD+NVIDIA laptops — clone it onto anything else and it won't boot. Same class of hardware — an AMD Ryzen AI NPU paired with an NVIDIA GPU — and it's worth a try.

Real-Time WGSL Compute Shaders — AMD iGPU · SHM / Spout / NDI

wgsl-shm

Fourteen WGSL compute shaders running on the AMD integrated GPU — the chip nobody asks about — dispatched straight into TouchDesigner, OBS or Resolume over shared memory, Spout or NDI. A browser panel drives every parameter live over WebSocket, and the shader source itself can be hot-swapped mid-performance. Built to become a proper VJ instrument.

See the source on GitHub ↗

One pipeline, three stages:

Control · WebSocket + OSCBrowser panel, OSC and TouchDesigner all write into the same parameter state — last writer wins, on purpose.
Compute · wgpu, AMD iGPUCompiles a WGSL shader and dispatches it every frame, up to 4K — hot-reloading source without a restart.
Transport · SHM / Spout / NDIShips the frame straight into TouchDesigner, OBS, Resolume, or anything listening on the LAN.

The numbers: 4K plasma at up to 140fps, 4K raymarching at 60fps — on the integrated GPU everyone ignores, the one that came free with the CPU.

Fractal shader with the live control panel Fractal shader, zoomed in

Handy for a VJ set: control runs over WebSocket and OSC on the LAN, so one panel can drive several machines at once. Turn an old PC into a dedicated NDI background generator — or finally put every GPU in your laptop to work, live.

For sale

The Shop

Custom TouchDesigner Operator — C++ / CUDA / XPBD

ClothPOP

A custom POP for TouchDesigner that turns incoming point geometry into real-time simulated cloth — an XPBD solver running entirely on the GPU in CUDA, no CPU fallback. Stretch and bending, pins, welded seams, self and object collision, rigid clusters, volume and inflation, all painted as point attributes upstream. Signed, licensed, shipping.

Get it on Lemon Squeezy ↗

What's under the hood:

XPBD SolverStiff, stable cloth at interactive rates — substepped, compliance-based, fully on the GPU.
Attribute-drivenPins, mass, welds, collision groups and rigid clusters are just point attributes — paint them upstream with any SOP or POP.
Self & Object CollisionGPU spatial hash, per-point radius pulled straight from the mesh — no global radius to tune.
Rigid ClustersShape-matching rigid bodies live inside the same simulation, two-way coupled with the cloth.
Volume & InflationClosed meshes hold pressure; open ones get capped automatically so inflation still works.
ClothPOP draped cloth panel, pinned top row ClothPOP volume and inflation on a closed mesh ClothPOP rigid spheres colliding with draped cloth

The technical part: fast enough to disappear. Wire any POP chain that outputs primitives straight into it — pins, welds, collisions, rigid clusters are just point attributes painted upstream, nothing to rig, nothing to configure — and the plugin does the rest. Plug and play, and cloth simulation stops being an engineering problem.

Custom TouchDesigner Operator — C++ / CUDA / OptiX

RTX Render TOP

A GPU path tracer built as a native TouchDesigner operator — not a rasterizer with ray-traced shadows bolted on, the real thing. Geometry comes in through a POP or SOP, never a TOP: this thing eats attributes, not pixels. Up to 100 analytic lights, HDRI environments, emissive geometry, volumetrics, PBR materials — all denoised with DLSS Ray Reconstruction. Signed, licensed, shipping. Not a tech demo.

Get it on Lemon Squeezy ↗

Five SDKs share one frame:

OptiXOwns the acceleration structures and the path tracer itself — compiled once, running across every GPU generation.
CUDARuns everything else: accumulation, post-fx, the DLSS G-buffers.
NGXDenoising, on its own temporal history.
TouchDesigner SDKThe host contract — parameters, per-frame execute, the texture handoff.
CPythonEmbedded — it builds the material ID for every look. The renderer takes a real material library, not just a colour per object.

The same tricks modern videogames run on — just less forgiving:

SERReorders bounce rays before shading, so the GPU stops chewing through scattered work.
DLSS Ray ReconstructionRebuilds a clean image straight out of the path tracer's noisy samples.
DLSS Super SamplingFills in the resolution without giving up detail.

All of it running on a small mountain of extra buffers, with BRDFs that only behave if they follow very specific rules.

RTX Render TOP live in TouchDesigner Cornell box GI validation render Rtxrender TOP parameters and material looks

The technical part: every getPar call has to run before TouchDesigner's beginCUDAOperations. Get that ordering wrong and the cook lock deadlocks — the single hardest rule in the whole codebase, and the one that will find you at 2am.

RTX Render TOP — Under the Hood

One Frame, Geometry In To Pixels Out

01 GEOMETRY INPUT POP / SOP · TD SDK CPU ROUND-TRIP default POPGPU ZERO-COPY toggle · CUDA 02 ACCEL STRUCTURE GAS build / refit · OptiX 03 LAUNCH PARAMS camera · lights · jitter 04 OPTIX LAUNCH RenderShaders.ptx · closest-hit ×4 DLSS-RR DENOISE default · NGX PROGRESSIVE ACCUM. bypassed by default 05 POST-FX bloom · ACES · RCAS 06 OUTPUT blit to TD texture
01 / 06