Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion examples/meta_quest/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,12 @@

import syncfield as sf
import syncfield.viewer
from syncfield.adapters import MetaQuestCameraStream, MetaQuestHandStream
from syncfield.adapters import (
BLEImuGenericStream,
MetaQuestCameraStream,
MetaQuestHandStream,
)
from syncfield.adapters.ble_imu_profiles import WIT_WT901BLE_200HZ

# Quest 3 IPv4 — copy from the Quest sender app's HUD ("Host" line) or
# check Settings → Wi-Fi → <network> → Details → IP address. Must be on
Expand Down Expand Up @@ -80,4 +85,32 @@
resolution=(1280, 720),
))

# Wrist IMUs — same two WT901BLE units used in examples/iphone_mac_webcam.
# Both advertise as "WT901BLE68", distinguished only by BLE address. Resolved
# via active-scan on 2026-04-14 in the iphone_mac_webcam example.
session.add(BLEImuGenericStream(
"wrist_left_imu",
profile=WIT_WT901BLE_200HZ,
address="5622CCC4-A621-96DC-A7B5-E7650370E8A3",
))
session.add(BLEImuGenericStream(
"wrist_right_imu",
profile=WIT_WT901BLE_200HZ,
address="6E22ED0E-72CD-0175-6F29-0BA8D502CBAB",
))

# Elbow IMUs — two additional WT901BLE units. Resolved via active-scan on
# 2026-04-14. Left/right assignment is arbitrary; swap if the side labels
# don't match what's actually strapped on.
session.add(BLEImuGenericStream(
"elbow_left_imu",
profile=WIT_WT901BLE_200HZ,
address="1CD2DCDE-CE20-905E-7D66-66E20FB01AB6",
))
session.add(BLEImuGenericStream(
"elbow_right_imu",
profile=WIT_WT901BLE_200HZ,
address="C7CA16B4-AFF6-CC54-C657-83836E96979A",
))

syncfield.viewer.launch(session)
16 changes: 11 additions & 5 deletions src/syncfield/adapters/meta_quest_camera/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
"""Meta Quest 3 stereo passthrough camera adapter.
"""Meta Quest 3 stereo passthrough camera adapter (streaming-only).

Public entry point is :class:`MetaQuestCameraStream`. Internal collaborators
(``QuestHttpClient``, ``MjpegPreviewConsumer``, ``TimestampTailReader``,
``RecordingFilePuller``) live in sibling modules and are composed by the
stream class.
Public entry point is :class:`MetaQuestCameraStream`. Internal
collaborators live in sibling modules and are composed by the stream
class:

* :mod:`.preview` — :class:`MjpegPreviewConsumer` that pulls one
``/preview/{eye}`` MJPEG stream per eye.
* :mod:`.mp4_writer` — :class:`StreamingVideoRecorder` that mux-passes
each JPEG into an MP4 container without re-encoding.
* :mod:`.http_client` — :class:`QuestHttpClient` for the small set of
control-plane calls (``/status``, ``/tracker/target``).
"""

from syncfield.adapters.meta_quest_camera.stream import MetaQuestCameraStream
Expand Down
59 changes: 0 additions & 59 deletions src/syncfield/adapters/meta_quest_camera/file_puller.py

This file was deleted.

Loading
Loading