Python client for the Zendo motion-tracking WebSocket stream.
Project description
zendo-sdk (Python)
Python client for the Zendo motion-tracking WebSocket stream. Connect to a running Zendo instance and get typed quaternion and landmark events — no byte-parsing, no port hunting.
The package is a thin layer over the Rust zendo-sdk
crate (via PyO3), so decoding and the connection lifecycle are handled in Rust.
It imports as zendo.
Install
pip install zendo-sdk
Wheels are published for Linux (x86_64, aarch64), macOS (Apple Silicon and Intel), and Windows (x86_64), on CPython 3.10 and newer.
Quickstart
The client is synchronous and blocking: iterating it waits for the next frame. This keeps it ergonomic in notebooks and scripts.
import zendo
with zendo.connect() as client: # auto-discovers the port (5432-5435)
print(f"connected on port {client.port}")
for event in client:
match event:
case zendo.BodyQuaternions(frame):
print("hips:", frame.hips.w, frame.hips.x, frame.hips.y, frame.hips.z)
case zendo.BodyLandmarks(frame):
print("nose:", frame.nose.x, frame.nose.y, frame.nose.z)
case zendo.HandQuaternions(side, frame):
print(side, "wrist:", frame.wrist.w)
case zendo.HandLandmarks(side, frame):
print(side, "thumb tip:", frame.thumb_tip.x, frame.thumb_tip.confidence)
Without structural pattern matching:
import zendo
with zendo.connect() as client:
for event in client:
if isinstance(event, zendo.BodyQuaternions):
print(event.frame.hips)
Connecting
| Function | Behaviour |
|---|---|
zendo.connect() |
Scans ports 5432-5435 on 127.0.0.1, connects to the first Zendo found. |
zendo.connect_at(port) |
Connects to an explicit port on 127.0.0.1. |
zendo.connect_url(url) |
Connects to an explicit ws://host:port URL. |
To reach a Zendo on another machine, copy the address from Zendo's Settings:
zendo.connect_url("ws://192.168.1.42:5432"). The stream is plain ws:// —
unencrypted and unauthenticated — so only use it on a trusted network.
All three accept reconnect=True to transparently re-establish a dropped
connection with exponential backoff:
client = zendo.connect(reconnect=True, base_delay_ms=250, max_retries=10)
Types
Events are immutable dataclasses. Frames expose one attribute per joint or
landmark — frame.hips, frame.left_wrist, frame.thumb_tip — each a
Quaternion (w, x, y, z) or Landmark (x, y, z, confidence). Frames are
also iterable: for name, value in frame: ....
The package ships type information (py.typed) and is checked with
ty and linted with
ruff.
Offline decoding
zendo.decode_frame(data: bytes) decodes a single raw protocol frame into a
typed event — handy for replaying captures or testing.
License
Licensed under either of Apache-2.0 or MIT at your option.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zendo_sdk-0.1.3.tar.gz.
File metadata
- Download URL: zendo_sdk-0.1.3.tar.gz
- Upload date:
- Size: 56.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0edf901322aca297ca3015a28d3271ee23fb0eca0d8048adefa80277276878fb
|
|
| MD5 |
79e348eb6f9a10d9026f66c3863c97b6
|
|
| BLAKE2b-256 |
23f4f0a252109f70f392ca0bd52cbf2cc15f1e664366ee139cbcf9a6261a6553
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3.tar.gz:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3.tar.gz -
Subject digest:
0edf901322aca297ca3015a28d3271ee23fb0eca0d8048adefa80277276878fb - Sigstore transparency entry: 1632656525
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 395.7 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e6cfa1fff85903c41af394d27c784dc25d42239bf894245ab30e4d39758a0d52
|
|
| MD5 |
dc1237069d1b6c2080c01060deba4b94
|
|
| BLAKE2b-256 |
53e4ff1bef588d869bea6c1482296e8fff10ac1d8c3c266bb6e4f4b6b15332cf
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-win_amd64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-win_amd64.whl -
Subject digest:
e6cfa1fff85903c41af394d27c784dc25d42239bf894245ab30e4d39758a0d52 - Sigstore transparency entry: 1632656752
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 765.7 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a465d8f11327ab50dc24e0a882d624952c5beded25c71f0320eac058dc220d8d
|
|
| MD5 |
25131f1fffca070de1bf4ad247bed510
|
|
| BLAKE2b-256 |
31d1973a75f4f88649e36504c6f451520fe27c02db6880ecd5556f7b12113453
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-musllinux_1_2_x86_64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
a465d8f11327ab50dc24e0a882d624952c5beded25c71f0320eac058dc220d8d - Sigstore transparency entry: 1632656615
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 560.4 kB
- Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8e41151c80c950319697c2523e174f0a06b5f47207e08e51d1c6e51c37eaae0
|
|
| MD5 |
e3c47540ea892c879055cb55dceb0995
|
|
| BLAKE2b-256 |
6a2edf73110cdde97f307c1eaf00c2a85e2d8995f0fc23775ffe2dd9d0ca02f3
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_x86_64.whl -
Subject digest:
f8e41151c80c950319697c2523e174f0a06b5f47207e08e51d1c6e51c37eaae0 - Sigstore transparency entry: 1632656674
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 560.9 kB
- Tags: CPython 3.10+, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbe75d62cd8f4d6e4d12d18a39721f1a953fbc0dc50d6828a9cde8dbbb0cf039
|
|
| MD5 |
3e382f0f515bf2c1a5cc9a56a32d3f6c
|
|
| BLAKE2b-256 |
2e9385c163fa38a930655775d3375b624cec8278acd7558dcd0f9b3d07a37eb7
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-manylinux_2_28_aarch64.whl -
Subject digest:
bbe75d62cd8f4d6e4d12d18a39721f1a953fbc0dc50d6828a9cde8dbbb0cf039 - Sigstore transparency entry: 1632656714
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 499.0 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d31db670fc1855a01dff921c4bdf55d94ac3723d37e7253320285ab8674329d7
|
|
| MD5 |
86617da5c615a43fa89eb979ea13b7df
|
|
| BLAKE2b-256 |
5e357d0d3c842f67e0a4187fe6a9d39fc5750e8dcfdf12694ac00752f1b1fecb
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
d31db670fc1855a01dff921c4bdf55d94ac3723d37e7253320285ab8674329d7 - Sigstore transparency entry: 1632656641
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zendo_sdk-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: zendo_sdk-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 504.4 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e193088223873d887294ef57ef5156738865690dc2133bdb4e3624e55ec87c1
|
|
| MD5 |
36d54bb96c2cc96e07df8a876e5fb27d
|
|
| BLAKE2b-256 |
37326170e6541bf01b807469e26af07ce4611358b5282adcbfa191ce4e68fd7f
|
Provenance
The following attestation bundles were made for zendo_sdk-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
publish-sdk.yml on akina-health/zendo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zendo_sdk-0.1.3-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
0e193088223873d887294ef57ef5156738865690dc2133bdb4e3624e55ec87c1 - Sigstore transparency entry: 1632656570
- Sigstore integration time:
-
Permalink:
akina-health/zendo@56bfa01bb03d772240c6089554385213830090a3 -
Branch / Tag:
refs/tags/sdk-v0.1.3 - Owner: https://github.com/akina-health
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-sdk.yml@56bfa01bb03d772240c6089554385213830090a3 -
Trigger Event:
push
-
Statement type: