Files
AV-Live/iphone-arbody/README.md
T
L'électron rare 7d0711b3f6 feat(av-live-body): wire ArkitOSCListener :57129
Receives /body3d/kp from iPhone ARBodyTracker on the diagnostic
port (57129, distinct from Python's 57128 fuse input). Plumbed
through ContentView -> BodyView -> Skeleton3DRenderer so the
ARKit joints can be overlayed alongside Multi-HMR mesh.
2026-05-14 12:32:53 +02:00

1.8 KiB

ARBodyTracker — iPhone OSC emitter for AV-Live

Streams ARKit ARBodyAnchor joints (91 per body) over OSC/UDP to GrosMac:

  • :57128 → Python IphoneOSCListener in data_only_viz/ (drives ArkitFuse + cam-z lock)
  • :57129 → Swift ArkitOSCListener in launcher/AV-Live-Body/ (diagnostic overlay)

Optional LiDAR depth (ARFrameSemantics.sceneDepth) is enabled when the device supports it (iPhone 12 Pro and later).

Build & run

The project ships in two forms:

Form Path Use when
Swift Package app ARBodyTracker.swiftpm/ Quick local iteration. Signing has to be set manually in Xcode each clone.
Xcode project (xcodegen) project.yml + Config/*.xcconfig Reproducible signing across machines. Generate with xcodegen generate.

First-time setup (Xcode project flavour)

brew install xcodegen          # one-time
cp Config/Local.xcconfig.example Config/Local.xcconfig
# Edit Config/Local.xcconfig and set DEVELOPMENT_TEAM to your Apple Developer Team ID.
xcodegen generate              # writes ARBodyTracker.xcodeproj
open ARBodyTracker.xcodeproj

The generated ARBodyTracker.xcodeproj/ is gitignored — regenerate any time project.yml or sources change.

Updating

Add Swift sources under ARBodyTracker.swiftpm/Sources/ARBodyTracker/, then xcodegen generate to refresh the project. Both the swiftpm form and the xcodeproj reference the same source tree.

Signing

Config/Local.xcconfig (gitignored) holds DEVELOPMENT_TEAM. Config/Shared.xcconfig (committed) pulls it via #include?, falling back to no team if the local file is missing — the build will then fail with the familiar "executable is not codesigned" error, which is the correct signal that the developer needs to provision their own team ID before deploying to a device.