wuji-sdk (Python)
Python SDK for Wuji series devices. Provides automatic device discovery, connection management, and real-time data streaming for Wuji Glove, Wuji Hand 2, and other Wuji peripherals. Features a type-safe semantic API with native async/await and callback-based subscription support, multi-channel MCAP recording, and rich hand tracking data including joint angles, skeleton, and fingertip poses.
For detailed documentation, see the Wuji Docs Center.
Looking for the C SDK? See the C SDK README.
Installation
pip install wuji-sdk
Quick Start
import time
from wuji_sdk import SdkManager, DeviceType
manager = SdkManager.instance()
# scan() reports each device's type, so connect only the glove.
gloves = [d for d in manager.scan() if d.device_type == DeviceType.WujiGlove]
if not gloves:
print("No Wuji Glove found")
exit()
glove = manager.connect(sn=gloves[0].sn, device_name="glove")
sub = glove.tactile().subscribe_with_callback(
callback=lambda frame: print(f"Max pressure: {max(frame.data):.2f}")
)
time.sleep(10)
sub.close()
More examples: examples/python/.
Examples
wuji_glove/0.subscribe_callback.py: subscribe to glove streams with callbacks; pass--hand-model-pathto set a custom online-IK URDF first.wuji_glove/1.subscribe_async.py: subscribe to glove streams with async/await; pass--hand-model-pathto set a custom online-IK URDF first.wuji_glove/2.recording.py: record glove data to MCAP.wuji_glove/3.offline_pipeline.py: run hand tracking from offline frames.wuji_glove/4.user.py: inspect, create, and switch local SDK users.wuji_glove/5.calibration.py: run IK calibration with terminal guidance or API-style callbacks.wuji_glove/6.emf_poses_rate_divider.py: lower the EMF pose output rate and compare affected stream rates.wuji_glove/7.tactile_calibration.py: run the recommended guided tactile-calibration flow.wuji_glove/8.tactile_contact_view.py: independently observe the livetactile_binarycontact grid after calibration; it is not a calibration workflow.wuji_glove/9.tactile_residual_view.py: observe the continuous signedtactile_residualgrid after calibration and apply an adjustable contact threshold.retargeting/0.retarget_session.py: map hand keypoints (21×3) to a joint command withRetargetSession— no hardware needed.retargeting/1.teleop_real.py: live teleoperation — drive a Wuji Hand / Wuji Hand 2 from a Wuji Glove (an example built onRetargetSession; swap the glove read for any(21,3)keypoint source).
Retargeting
Map human hand keypoints to Wuji Hand joint commands. Retargeting works out of the box — numpy is the only extra dependency (keypoint/qpos arrays):
pip install wuji-sdk numpy
The SDK exposes the pure retarget interface — one frame at a time, supply keypoints from any source:
import numpy as np
from wuji_sdk import Handedness, HandModel, RetargetSession
# The hand model selects the builtin tuning config internally — no config path to manage.
session = RetargetSession.for_hand(HandModel.WujiHand2, side=Handedness.Right)
# A synthetic open right hand, (21, 3) in meters, MediaPipe landmark order —
# replace with your real keypoint source (camera / glove / replay).
# (All-zero / degenerate frames are rejected with an exception.)
keypoints = np.zeros((21, 3), dtype=np.float32)
for finger, x in enumerate([-0.04, -0.03, -0.01, 0.01, 0.03]): # thumb..pinky
for k in range(4):
keypoints[1 + finger * 4 + k] = [x, 0.03 * (k + 1), 0.0]
keypoints[1] = [-0.03, 0.02, 0.01] # thumb CMC nearer the palm
qpos = session.step(keypoints) # -> (20,) joint command (firmware order)
Driving a hand live (read → retarget → send) is plain application code built on
this interface — see retargeting/1.teleop_real.py for a complete glove → hand loop.
Retargeting is available on Linux x86_64 / aarch64.
License
Metadata
Release files for wuji-sdk 2026.8.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 99.8 MB
Release files / wuji_sdk-2026.8.3-cp314-cp314-manylinux_2_34_x86_64.whl
| Download URL | wuji_sdk-2026.8.3-cp314-cp314-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.14 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
9827960f32cef434311790ff80e7ca0f1124c759e2b836ca1f8f742dce17ef2a
|
|
BLAKE2b-256 checksum How to use checksums |
28d2d9b418586e7b1fcfa717cea0096e642f305967404f00de478a94e4c76880
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp314-cp314-manylinux_2_34_aarch64.whl
| Download URL | wuji_sdk-2026.8.3-cp314-cp314-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 10.0 MB |
| Tags | CPython 3.14 Linux glibc 2.34+ ARM64 |
|
SHA-256 checksum How to use checksums |
04ae638dd83df4e35c3883c5e60b0c9311c6512a16df774503639a9575010edf
|
|
BLAKE2b-256 checksum How to use checksums |
705f5587837ea13a3cbfce836d024590300a344116cc967a2d877200c5138bc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp313-cp313-manylinux_2_34_x86_64.whl
| Download URL | wuji_sdk-2026.8.3-cp313-cp313-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.13 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
e1e8eb97a5bd8a01dab315a3aa7023d77aae8e022db4d2912fb85f477b0dd872
|
|
BLAKE2b-256 checksum How to use checksums |
f9ce9896e0d6056e0bc8b9f2f3edd0ac0b94cb828cf6990b768b00afd7d6bdb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp313-cp313-manylinux_2_34_aarch64.whl
| Download URL | wuji_sdk-2026.8.3-cp313-cp313-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 10.0 MB |
| Tags | CPython 3.13 Linux glibc 2.34+ ARM64 |
|
SHA-256 checksum How to use checksums |
bdcc002153f5b43284bf9fc98be0ec2bb460d66bf733c3ffed8fb9a4b2f8a8a9
|
|
BLAKE2b-256 checksum How to use checksums |
b0b7c9e6cd160e5651b7428892c6e462c8639251b592f530f3aeb0eb13d990d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp312-cp312-manylinux_2_34_x86_64.whl
| Download URL | wuji_sdk-2026.8.3-cp312-cp312-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.12 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
8acaf6a90e42c78f9523bf007f8c298cee6bfbeddb200550906bf0e069e63da8
|
|
BLAKE2b-256 checksum How to use checksums |
b03e03f7828d5df7ff1850a09b5c9e9106b464b1ba2b24492573781da4eccb3c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp312-cp312-manylinux_2_34_aarch64.whl
| Download URL | wuji_sdk-2026.8.3-cp312-cp312-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 10.0 MB |
| Tags | CPython 3.12 Linux glibc 2.34+ ARM64 |
|
SHA-256 checksum How to use checksums |
7c870ac502b0bb318fa365eb7f9e13b6b368aec919e05d3161e0ccb8f8a6299c
|
|
BLAKE2b-256 checksum How to use checksums |
92a3f6ed368863e703ef1bc0fbbab4efabca8af4d291dbedc3d61d6daa0abcb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp311-cp311-manylinux_2_34_x86_64.whl
| Download URL | wuji_sdk-2026.8.3-cp311-cp311-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.11 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
60d2c58e1e83b92a853da1078916a4eca36e503de489590e9097f8ba65fb6417
|
|
BLAKE2b-256 checksum How to use checksums |
365231dfb261803f729f0455808ee3aa56a04eedfa587c4d71121bf9f2d3e4a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp311-cp311-manylinux_2_34_aarch64.whl
| Download URL | wuji_sdk-2026.8.3-cp311-cp311-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 10.0 MB |
| Tags | CPython 3.11 Linux glibc 2.34+ ARM64 |
|
SHA-256 checksum How to use checksums |
616371e294ce6eccaf3b3ba893b4589ebcb62d0615687b42d790f31b7abc4d66
|
|
BLAKE2b-256 checksum How to use checksums |
359092b3e8fa6cafaea53e3153e4f01acf6dfac413080875af82a08c800c151c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp310-cp310-manylinux_2_34_x86_64.whl
| Download URL | wuji_sdk-2026.8.3-cp310-cp310-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 9.9 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
221656b2282f12561cdf7744b0f64800dfae5e45f837326fd53f4109c82b4161
|
|
BLAKE2b-256 checksum How to use checksums |
4433e127536e05dddcd4c4ee94abf2a88bbce74077c9e28f6c9f6b63cb055412
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency logRelease files / wuji_sdk-2026.8.3-cp310-cp310-manylinux_2_34_aarch64.whl
| Download URL | wuji_sdk-2026.8.3-cp310-cp310-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 10.0 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ ARM64 |
|
SHA-256 checksum How to use checksums |
2f1e241365f69ba1570900f32176c4dcffbd39e58d15c8447146a78d3315314c
|
|
BLAKE2b-256 checksum How to use checksums |
7704757012254d1f591aa935ccef476925c50d2261fb8e73647c5b24f2d824fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 3, 2026.
Transparency log