Hey guys,
I am building an interactive installation for my bachelor project.
Setup
-
Sensor: Luxonis OAK-D (standard model, not Pro).
-
OS: macOS Sonoma on Apple Silicon.
-
Python pipeline sends OSC/UDP to TouchDesigner.
-
TouchDesigner receives data via OSC In CHOP on 127.0.0.1 (line 8000).
Goal
-
Track one person in real time.
-
Send normalized position (x, y) to TouchDesigner.
-
Use those values to drive a particle/force system that originally used mouse coordinates.
Current Python OSC output (single-person mode)
-
/pose/frame → [frame_index, timestamp, has_person]
-
/pose/center → [cx, cy]
-
/pose/keypoints → [num_keypoints, x1, y1, c1, …]
What is working
-
oscin1 receives OSC data.
-
I can see center-related values changing in oscin1.
-
Python debug output confirms detection sometimes works and returns centers.
Main problem
-
Data changes in oscin1, but downstream CHOPs in my existing network often become constant/frozen.
-
In my force chain, values can become fixed (e.g. constant tx/ty) even while oscin1 is updating.
-
My Circle TOP center is driven by CHOP expressions, but often goes out of visible range (e.g. center x < 0), so the marker disappears.
-
The old patch was built around mouse-based flow (mouse_coords, optical-flow style chain), and I am replacing it with OSC center input. The migration is unstable.
Observed behavior
-
Sometimes only oscin1 updates.
-
After mapping through rename/select/math/merge, values may stop changing.
-
When center values are outside expected range, visuals do not react correctly.
-
Detection can temporarily drop (center=None), causing intermittent motion unless I hold last valid center.
What I need help with
-
Best-practice TouchDesigner CHOP pipeline to reliably map /pose/center into a force/particle setup (single-person only).
-
Recommended way to avoid frozen values in downstream CHOPs when OSC In CHOP is updating.
-
Correct scaling strategy for converting incoming center values to my visual coordinate space (for Circle TOP and force coordinates).
-
Advice on replacing a mouse-driven chain with OSC input without breaking existing particle logic.
If helpful, I can share screenshots of:
-
oscin1 info channels,
-
current CHOP chain (rename/select/math/merge/force_coords),
-
circle1 center expressions,
-
and current OSC/CHOP parameters.
If anyone could help me, that would be really nice. Thank you, guys!!
Zoe ![]()