Side Projects
Personal work · 2024 — 2026Personal projects outside the engineering line. ← Back to selected works
River of Shadows
- 01Localised by machine vision, not markers — nothing was attached to the building.
- 02A dense photographic survey of the corridor processed into a 3-D feature map, with runtime 6-DoF pose matching live camera frames against it.
- 03Drift and re-localisation handled in repeating, low-texture corridors — the hardest case for feature matching.
River of Shadows
Work detailLocalised without markers. The building could not be modified, so the corridor was photographed densely and processed into a 3-D feature map; at runtime the device estimates full 6-DoF pose by matching live camera frames against it.
Why that corridor is the hard case. Sparse texture that repeats — every bay looks like the next. Pose locks onto the wrong bay, or drifts, and the overlay slides off the wall. The work was in deciding when to trust a match and when to discard it.
- Venue
- NYCU Administrative Building, Hsinchu
- Localisation
- Area Target visual SLAM · dense photographic survey → 3-D feature map · runtime 6-DoF pose estimation
- Failure modes
- Drift and re-localisation in repeating, low-texture geometry
- Stack
- Swift · ARKit · feature matching · spatial audio
- Role
- Solo — iOS development, localisation, composition, audience navigation
- Doc
- Video ↗
DAC Taipei
Circle of Confusion
- 01VR bound to a pneumatic apparatus — the headset and the physical rig run as one system, not two.
- 02CO₂ / O₂ delivery under valve control, driving the environment on a regulated respiratory cycle synchronised to the VR.
- 03Delivery lines leak-checked by soap test and pressure decay before the piece ran.
- 04A 3-D printed haptic mechanism designed to mount on the headset within its weight and balance limits.
Circle of Confusion
Work detailGas side. Two supplies, regulated delivery and valve control on a repeating cycle, phase-locked to what the viewer sees. Holding a steady rhythm is a matter of valve response, line volume and settling time — the commanded profile and the delivered profile are not the same curve.
Stated plainly. This is gas handling and flow fault-finding at atmospheric pressure. It is not vacuum or plasma process experience, and is not offered as such.
- Venue
- Digital Art Center, Taipei
- Gas system
- CO₂ / O₂ delivery · valve control · regulated respiratory cycle
- Leak check
- Soap test · pressure decay
- Mechanism
- 3-D printed headset-mounted haptic unit, within mass and balance limits
- Not claimed
- No vacuum, plasma or hydraulic process experience
- Role
- Solo — concept, system, gas control, mechanism, composition
- Doc
- Video ↗
Side project
Moss Floating Layer
- 01A side project — a small terrarium breathing at its own pace against the velocity of Taipei's busiest retail district.
- 02Multichannel spatial audio system design and speaker layout for a permanent retail environment.
- 03Specified, integrated and commissioned on site, then handed to the venue to run unattended.
Moss Floating Layer
Work detailAudio for a room you do not control. A department store is a hostile acoustic environment: high ambient noise, hard reflective surfaces, an audience with no fixed listening position. Speaker layout was the whole problem — placing and aiming so the piece reads as spatial from anywhere, without bleeding into neighbouring tenants.
Handover. Commissioned on site, then handed over to run permanently unattended — which sets the real requirement: it has to come up correctly every morning with nobody technical present.
- Client
- SCOPE TECH
- Venue
- Shin Kong Mitsukoshi A9, Taipei
- Scope
- Multichannel spatial audio system design · speaker layout · retail AV integration · on-site commissioning
- Status
- Permanent · unattended daily operation
- Note
- Side project
- Doc
- Video ↗
Blender MCP Bridge
- 01A TCP socket server running inside Blender, so an external agent can build and modify scenes directly instead of me clicking through them.
- 02Incoming scripts are queued and executed on Blender's main thread via
bpy.app.timers— touching the API from the socket thread crashes the process. - 03Used to pull OpenStreetMap city data into a scene and render it procedurally, plus geometry and material studies.
Blender MCP Bridge
Work detailThe real problem is threading. Blender's Python API is not
thread-safe — call bpy from the socket's worker thread and the process
dies, sometimes several operations later. The server accepts on a daemon thread but
never touches the scene there: scripts go onto a lock-guarded queue that a
bpy.app.timers callback drains on the main thread. That one indirection
is the whole design.
Why build it. The same reason I instrument anything — describe the scene once and have it constructed repeatably, rather than rebuilding it by hand every time I change my mind.
- Transport
- TCP socket,
127.0.0.1:65432, length-framed JSON - Concurrency
- Daemon accept thread · lock-guarded script queue ·
bpy.app.timersdrain on the main thread - Scene data
- OpenStreetMap import — footway, pedestrian and railway layers
- Render
- Blender 5.2 LTS · Cycles · GPU compute
- Role
- Solo — server, protocol, scene pipeline











