ClientSDK Changelog
This page tracks the version history and changes made to the Aria Gen2 ClientSDK.
Version 2.4.0
Release Date: Jun 2026
New Features
Multi-Device Time-Aligned Recording & Streaming
Orchestrate multiple Aria Gen 2 devices from a single CLI invocation. Devices receive coordinated start/stop, and one device acts as a time-domain-mapping broadcaster so receivers can align timestamps to a shared clock.
Key additions:
recording start --all/streaming start --all— discover and orchestrate every connected device--broadcaster <serial>— override the default broadcaster (smallest-serial wins by default)--disable-time-domain-mapping— opt out of TDM when only coordinated start/stop is neededrecording stop/streaming stop— auto-stop all connected devices when no--serialis givenrecording sessions list/infoandstreaming sessions list/info— inspect multi-device sessionsrecording download --session <id>— download every recording in a session into per-device subdirectories- Sessions persisted as JSON at
~/.aria/multi-device-session/<id>.json
See Multi-Device Recording & Streaming for the full guide.
Unified Device Discovery
The connect() path now discovers Aria Gen 2 devices over the network (mDNS) and over USB simultaneously, so a device is found whether it is reachable over the network, over USB, or both.
Key additions:
- A single discovery pass spans both transports — no need to know in advance which one a device is on
- Devices reachable via both paths are de-duplicated by serial, so each device is listed only once
- When multiple devices are discovered, every serial is reported so you can disambiguate with
--serial
Country-aware Time-Domain-Mapping Channel Validation
The CLI now validates the time-domain-mapping channel against the connected glasses' regulatory region before forwarding it to the device, mirroring what the Aria companion app enforces.
Key additions:
- ETSI countries permit channels
0–2; FCC countries permit channels10–40 - Channel auto-picked per region when
--time-domain-mapping-channelis omitted (ETSI →0, FCC →10) - Multi-device sessions infer an empty country from any sibling that does report one (logged as a
WARNING); cross-region mismatches are surfaced as a hard error - Country code source: each device's
wifi_country_codefromHmdStatusResponse, surfaced via the newaria::sdk::DeviceStatus.countryCodefield - Behavioral break: existing scripts that relied on the silent default of channel
0in FCC regions will now error out with an actionable message pointing to the right channel
Per-Device Identity in Callbacks
Optional device_id parameter on every Python streaming callback. Auto-detected via inspect.signature() — declare device_id in your callback to receive the device serial; omit it to keep existing single-device behavior unchanged.
Key additions:
device_id: str | Nonekeyword argument on RGB, SLAM, ET, audio, IMU/IMU batch, magnetometer, GPS, phone-location, PPG, barometer, Bluetooth/WiFi beacon, eye-gaze, hand-pose, time-domain-mapping callbackshandler.device_serialproperty onStreamDataInterface- See Multi-Device Streaming Example for the pattern
Multi-Device Streaming Example
New Python tool multi_device_streaming_example.py — a headless HTTPS server that demonstrates how to receive RGB frames and time-domain-mapping offsets from multiple Aria Gen 2 devices in a single process and disambiguate them per device.
Key additions:
- Concrete reference for the new opt-in
device_idcallback parameter - Per-device aggregation pattern (thread-safe dicts keyed by serial;
threading.Lockfor cross-callback state) - Time-domain-mapping offset summary printed on shutdown for sanity-checking sync quality
- Use as a starting point for downstream tools (notebooks, custom dashboards, perception pipelines) that need per-device frames in one process
- See Multi-Device Streaming Example for the walkthrough
Multi-Device Streaming Viewer
New Python tool multi_device_streaming_viewer.py — a live Rerun visualization that receives RGB streams from N Aria Gen 2 devices, applies TDM-corrected timestamps for synchronized cross-device replay, and rebuilds its panel layout as devices connect and reconnect.
Key additions:
- mDNS-resolved HTTPS server (
oatmeal_server.local:6768) shared across all devices - TDM activation validation with per-device timing windows; fails fast on a broken receiver before the user spends minutes wondering why the timeline is desynced
--broadcaster <serial>to override the auto-detected broadcaster--expected-device-count <N>strict mode for scripted/CI runs--skip-tdm-validationescape hatch for partial-sync investigations- Inherits the persistent shared-cert workflow from
streaming install-certs - See Multi-Device Recording & Streaming for usage
Improvements
Python Type Stubs
The Client SDK wheel now ships sdk_gen2.pyi type stubs, giving editors and type checkers full autocomplete and signature information for the aria.sdk_gen2 module.
Key additions:
sdk_gen2.pyipackaged in theprojectaria_client_sdkwheel, alongside the existingsdk.pyi- IDE autocomplete, inline signatures, and static type checking (mypy / pyright) across the Gen2 SDK surface
Resilient Streaming Examples
The streaming example scripts now exit cleanly when a device connection drops, instead of hanging or crashing.
Key additions:
device_streaming.pyreports the error and exits cleanly when an initial connection failsmulti_device_streaming_viewer.pypollsserver.connections()to detect per-device drops, marks the affected device disconnected, and keeps the remaining devices streamingSIGINT/SIGTERMhandlers tear down servers and callbacks gracefully on shutdown
Bug Fixes
Custom Profile Upload
Fixed a failure that prevented some custom data-flow profiles from installing. Profiles carrying a top-level __type tag were rejected by the strict profile parser; the tag is now handled correctly, so aria_gen2 device profile --upload-profile <file> and device.set_data_flow_profile(...) accept them.
Version 2.3.0
Release Date: Apr 2026
New Features
Multi-Device Support
Refactored device connectivity to support connecting multiple Aria Gen 2 devices simultaneously.
Key additions:
DeviceTargetstruct bundling IP and serial for streamlined device identificationusb_network_devices()returnsList[DeviceTarget]for direct use withconnect()- CLI supports
--serialflag to specify a target device - Auto-prompts when multiple devices are detected
Real-Time Latency Measurement
Added real-time latency measurement to the aria_streaming_viewer.
Key additions:
- Re-enabled TicSync time synchronization
TimeSyncRefPython binding withcompute_latency_ms(),is_connected(), andis_valid()methods- CLI flags:
--show-latencyand--latency-offset-ms
Multi-Device Streaming Cert Install
The CLI streaming install-certs command now supports batch certificate installation across multiple devices.
Key additions:
--deviceoption for specifying target devices- Certificates generated once and installed on all specified devices