SpatialAI SDK
Python SDK for VisionLibra ToF depth sensors and cameras.
Physical AI starts with Spatial Intelligence + AI Agents.
pip install spatialai
Five lines to spatial intelligence:
from spatialai import Camera
cam = Camera()
result = cam.detect_people()
print(result)
# {'people': 1, 'nearest_m': 1.42, 'positions': [...], 'source': 'simulator'}
Status — v0.3 (alpha)
| Feature | Status |
|---|---|
| Simulator (all products, depth frames included) | ✅ works everywhere |
| Spatial Mini / DM0301 over I²C (native protocol @ 0x41) | ✅ beta — Linux SBCs, pip install "spatialai[dm0301]" |
| Spatial Home / DMOS5030 over UART (protocol v1.4.4) | ✅ beta — any OS via USB-serial, pip install "spatialai[dmos5030]" |
load_model() + presence-core, occupancy-home-v1 |
✅ free, shipped with the SDK |
| Spatial Vision / Robot real backends (UVC) | 🚧 in development — simulator only for now |
| Remaining marketplace models, agents, fleet | 🚧 in development — load_model() raises with waitlist info |
Hardware backends are implemented straight from the DOMI datasheets and protocol docs with full protocol-level test coverage; they carry a beta label until validated on production modules.
Models
Two production models ship free with the SDK today:
from spatialai import Camera
cam = Camera("spatial-home", simulate=True)
cam.load_model("occupancy-home-v1") # room occupancy from depth CV
cam.load_model("presence-core") # presence/approach with debouncing
for frame in cam.stream(hz=10, duration=5):
occ = frame.models["occupancy"]
print(f"people={occ['people']} pets={occ['pets']} occupied={occ['occupied']}")
occupancy-home-v1 is classic depth computer vision — background estimation,
foreground clustering, person/pet size classification — so it needs no GPU and
runs on a Raspberry Pi. Announced models that haven't shipped
(people-tracking-v3, forklift-safety, …) raise ModelNotAvailableYet with
waitlist instructions instead of failing silently.
Simulator — works on any machine
Every device can run in simulator mode, which generates realistic distance and people-detection streams. It is the default whenever no hardware is detected, so the quickstart above always runs.
from spatialai import Camera
cam = Camera("spatial-vision", simulate=True)
for frame in cam.stream(hz=10, duration=3):
print(f"people={frame.people} nearest={frame.nearest_m:.2f}m")
Try it from the terminal:
spatialai demo # live simulated distance readout
spatialai demo --device spatial-vision
spatialai scan # look for real hardware on I2C
Real hardware — Spatial Mini (DM0301, I²C)
The DM0301 speaks its own register protocol at I²C address 0x41 (it is
pin-compatible with the VL53L4CD, but not protocol-compatible — don't use
ST drivers). Wiring on a Raspberry Pi: VIN→3V3, GND→GND, SDA→GPIO2, SCL→GPIO3,
XSHUT pulled high.
sudo raspi-config # enable I2C
pip install "spatialai[dm0301]"
from spatialai import Sensor
lock = Sensor("spatial-mini") # auto-detects the sensor at 0x41
print(lock.distance_m()) # 0.734
for reading in lock.stream(hz=20):
if reading.distance_m < 0.5:
print("presence!", reading)
Real hardware — Spatial Home (DMOS5030, UART)
Wire the module to any USB-serial adapter (115200 8N1 by default) and pass the port:
pip install "spatialai[dmos5030]"
from spatialai import Camera
cam = Camera("spatial-home", port="/dev/ttyUSB0") # COM3 on Windows
cam.load_model("occupancy-home-v1")
print(cam.infer()["occupancy"])
Defaults to 25×25 depth at 5 fps (fits 115200 baud). For the full 100×100
resolution pass resolution=(100, 100), baud=921600, fps=10.
API overview
Camera(device_id=None, simulate=None)— unified entry point..detect_people(),.stream(hz, duration),.distance_m(),.info()Sensor(device_id)— alias ofCameratuned for 1D sensors.spatialai.devices()— catalog of supported products.- Exceptions:
DeviceNotFound,HardwareNotSupportedYet.
Roadmap
Depth-frame backends for Spatial Home (DMOS5030A serial), Spatial Vision (DMOM2508CL) and Spatial Robot (DMAS2M001), on-device people tracking models, and the agent/fleet APIs. Follow along at visionlibra.adamaohappy.workers.dev/developer.html.
License
MIT
Release files for spatialai 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| spatialai-0.3.0.tar.gz | 25.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| spatialai-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.7 kB
Release files / spatialai-0.3.0.tar.gz
| Download URL | spatialai-0.3.0.tar.gz |
|---|---|
| Size | 25.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6f1891c06b55ad71492c3abffe2da5138e9f37afe43b87fc2cda1435accba917
|
|
BLAKE2b-256 checksum How to use checksums |
400fdc748272520a485eeba82ab72de44095e0c7add7238bfa3766cfaf90af19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / spatialai-0.3.0-py3-none-any.whl
| Download URL | spatialai-0.3.0-py3-none-any.whl |
|---|---|
| Size | 24.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0a73848d25f1d419bdefc3023ffd5c916d033298c731e610a12cf2fca7c2f410
|
|
BLAKE2b-256 checksum How to use checksums |
039ca9d067baa8772aedcae0ec5655fbab7027bb83a8d5a3708a2ae1e973b0a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|