Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 2026.10.12 instead.
Reason given by maintainers: Withdrawn; use 2026.8.31 instead.

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-path to set a custom online-IK URDF first.
  • wuji_glove/1.subscribe_async.py: subscribe to glove streams with async/await. Pass --hand-model-path to 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 hand model calibration with terminal guidance or API-style callbacks.
  • wuji_glove/6.set_stream_rate.py: lower the glove's raw pose output rate at runtime with subscription.set_rate() on emf_poses; derived streams follow automatically.
  • wuji_glove/7.tactile_calibration.py: run the recommended guided tactile-calibration flow.
  • wuji_glove/8.tactile_contact_view.py: independently observe the live tactile_binary contact grid after calibration. It is not a calibration workflow.
  • wuji_glove/9.tactile_residual_view.py: observe the continuous signed tactile_residual grid after calibration and apply an adjustable contact threshold.
  • wuji_hand_2/5.export_flash_logs.py: export the device's on-flash log history to a JSONL file.
  • wuji_hand_2/6_opposition/opposition.py: stream either side's recorded four-finger motion at 1 kHz.
  • wuji_hand_2/7.mit_sweep.py: run the fixed joint-0 cosine sweep, or render the command sequence offline.
  • retargeting/0.retarget_session.py: map hand keypoints (21×3) to a joint command with RetargetSession — no hardware needed.
  • retargeting/1.teleop_real.py: live teleoperation — drive a Wuji Hand / Wuji Hand 2 from a Wuji Glove. This example uses RetargetSession, and you can replace the glove read with any (21,3) keypoint source. It lists the SDK users and asks which one to teleoperate under. Press Enter to keep the current user, pick the default user for the built-in hand URDF, or pick a named user to use that user's calibrated hand model. An uncalibrated named user falls back to the built-in URDF.

Wuji Hand 2 Motion Examples

Example 7 is a standalone source file. Example 6 is a standalone bundle that contains opposition.py and Right and Left replay data. Copy the complete 6_opposition/ directory to use that example.

Both entries accept no command-line options. They auto-connect one device, require all 20 joints online, enable the hand, ramp from the current pose to the trajectory start, and then send a fixed command sequence. Example 6 selects and streams one replay file from device handedness.

Choose Example 6 or 7

Example Motion Output
7.mit_sweep.py Moves joint 0 through a fixed 0.02 rad, 101-command cosine sweep while the other joints stay at zero Ramps to the start pose at 1 kHz, publishes the sweep at 50 Hz, then disables and disconnects
6_opposition/opposition.py Streams the connected side's recorded thumb opposition Ramps to the start pose at 1 kHz, publishes 30,000 recorded commands at 1 kHz, then disables and disconnects

Example 7 is the smaller motion check. Example 6 replays a complete recorded four-finger motion.

Run Example 7

Run the fixed supervised motion:

python examples/python/wuji_hand_2/7.mit_sweep.py

Example 7 sends a fixed 101-command cosine sweep. Joint 0 moves from zero to 0.02 rad and back to zero. The other 19 joints remain at zero.

Run Example 6

Auto-connect one Hand 2 and replay the recording selected by its handedness:

python examples/python/wuji_hand_2/6_opposition/opposition.py

Example 6 selects data/right.replay or data/left.replay from device handedness. It validates the file header and length before enable, then streams every recorded qpos once at a fixed 1 kHz command rate. The recorded sequence itself adds no interpolation, resampling, smoothing, or recovery motion; before it starts, the example ramps from the captured current pose to the first recorded frame over about one second. The final recorded frame is the return to Open.

Cleanup Behavior

Normal completion disables the hand after the final command. An error or interrupt stops further commands and adds no recovery motion. Both examples disable the connected hand, close their publishers, and disconnect the device. Runtime and cleanup errors return 1. Ctrl-C returns 130.

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

MIT

Metadata

Release files for wuji-sdk 2026.9.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for wuji-sdk 2026.9.14
File
wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.34+ x86-64 Details
wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.34+ ARM64 Details
wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.34+ x86-64 Details
wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.34+ ARM64 Details
wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.34+ x86-64 Details
wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.34+ ARM64 Details
wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.34+ x86-64 Details
wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.34+ ARM64 Details
wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.34+ x86-64 Details
wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.34+ ARM64 Details

Total release size: 105.0 MB

Release files / wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_x86_64.whl

Download URL wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_x86_64.whl
Size 10.5 MB
Tags CPython 3.14 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
e4bd41d12a1a22a54c2c48dc7f5580354d2783987c382ae80cbc7b2f9af4aeb1
BLAKE2b-256 checksum
How to use checksums
6dbbcadaf667c73101c1d3a004dccec3cfea0a9af6f624eb64b592d075115fe0
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_aarch64.whl

Download URL wuji_sdk-2026.9.14-cp314-cp314-manylinux_2_34_aarch64.whl
Size 10.5 MB
Tags CPython 3.14 Linux glibc 2.34+ ARM64
SHA-256 checksum
How to use checksums
1c1f3fa7856755b3dbff87c4c3e95cf081406b3bde1bfbb222619ce2f5c16bd9
BLAKE2b-256 checksum
How to use checksums
d8eb0d5100a8d0034b6d30056c3f53b51632fe82f0e8a7fa450878fbaf23d9d9
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_x86_64.whl

Download URL wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_x86_64.whl
Size 10.5 MB
Tags CPython 3.13 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
d78a759a5b8ff3605d10f8feedc146093f1ca629b02773ed1d61e4d988c0c0f5
BLAKE2b-256 checksum
How to use checksums
02e73935ffaea9cddfd3ac7584dc4074924f5c802d94d6a54faaf198738ffac2
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_aarch64.whl

Download URL wuji_sdk-2026.9.14-cp313-cp313-manylinux_2_34_aarch64.whl
Size 10.5 MB
Tags CPython 3.13 Linux glibc 2.34+ ARM64
SHA-256 checksum
How to use checksums
3347efcc9cb86930df88d0dbeef6e06307d6e67af54680445fc1e5bcf1f1d741
BLAKE2b-256 checksum
How to use checksums
c0f73d60413bfc64ea13c4cd9dd98fe117ccb3e7d8675fa0dd576d06de239fac
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_x86_64.whl

Download URL wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_x86_64.whl
Size 10.5 MB
Tags CPython 3.12 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
dd3f2989800e767bec783d10a1823529a865097d9d602c8730e05f9375eda776
BLAKE2b-256 checksum
How to use checksums
8a37811ec30296107f85738bad727157d06d41f42874e5669eacd8735044494c
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_aarch64.whl

Download URL wuji_sdk-2026.9.14-cp312-cp312-manylinux_2_34_aarch64.whl
Size 10.5 MB
Tags CPython 3.12 Linux glibc 2.34+ ARM64
SHA-256 checksum
How to use checksums
0d4a794bb45a8001efec8025fa17124de331b879518d92456fe42fbd5c321995
BLAKE2b-256 checksum
How to use checksums
cc1b75b17e96e3fe9a9507b3f7ff1f8cc91236a619550ffd7470b3230c56f63b
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_x86_64.whl

Download URL wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_x86_64.whl
Size 10.5 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
d059f14d1b63beb19b04bcb43ede270d995406e853c881d56a94af0df112d13b
BLAKE2b-256 checksum
How to use checksums
7702d55f2fa6de7a5fd64d3767bd2f9a40c2c52fde6c9b247ecf46501e4d53d1
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_aarch64.whl

Download URL wuji_sdk-2026.9.14-cp311-cp311-manylinux_2_34_aarch64.whl
Size 10.5 MB
Tags CPython 3.11 Linux glibc 2.34+ ARM64
SHA-256 checksum
How to use checksums
ce4a0ca1870280ee8eba3aa25c6350907e6c7f7f84bcea1387d330a736fe5b8d
BLAKE2b-256 checksum
How to use checksums
d63356e631471321907c0470b8df409955c7f1899f6529dc6b62571b8496e1c3
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_x86_64.whl

Download URL wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_x86_64.whl
Size 10.5 MB
Tags CPython 3.10 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
1c387f469d71abcc727539ae07dfb04ff63fa2eae5ca5fc805ff6a8aca9fd3d2
BLAKE2b-256 checksum
How to use checksums
d3e96fb45c40ed0b5db1cd8abfaf9793d48b71f0820d431062eb6252e043488f
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 Sep 14, 2026.

Transparency log

Release files / wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_aarch64.whl

Download URL wuji_sdk-2026.9.14-cp310-cp310-manylinux_2_34_aarch64.whl
Size 10.5 MB
Tags CPython 3.10 Linux glibc 2.34+ ARM64
SHA-256 checksum
How to use checksums
de9616c42130ee318aa70ce07a24a906b7a9513255d601ed43c75c3889f8c0a0
BLAKE2b-256 checksum
How to use checksums
f89d0dadf1433df3ebd4415efe29129c46ca8f555dd656eaac75bcdc2551b8e1
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 Sep 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.9.14 This release

10 release files

0.8.0

10 release files

0.6.0

10 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page