> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wuji.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Streams Overview

This page lists every data stream Wuji Glove outputs: **raw data** captured directly by the glove hardware, and **post-processed products** solved by SDK algorithms.

## Shared SDK Capabilities

Install, connection, and subscription are shared across products and come from the Wuji SDK (`wuji_sdk`, `pip install wuji-sdk`). This section links to those docs instead of repeating them:

| Capability | Wuji SDK docs |
| - | - |
| Install and environment | [Quick Start](/en/docs/wuji-sdk/quick-start/) |
| Device discovery and connection | [Device Connection](/en/docs/wuji-sdk/device-connection/) |
| Data subscription and output rate | [Data Subscription](/en/docs/wuji-sdk/data-subscription/) |
| Common data types | [Common Data Types](/en/docs/wuji-sdk/data-reference/) |
| SDK user management and data import/export | [Device Parameters](/en/docs/wuji-sdk/device-params/#sdk-user-management) |
| Time synchronization | [Time Synchronization](/en/docs/wuji-sdk/time-sync/) |
| Data recording | [Data Recording](/en/docs/wuji-sdk/data-recording/) |
| C API | [C API Reference](/en/docs/wuji-sdk/data-reference/) |
| SDK-side logs and troubleshooting | [Troubleshooting](/en/docs/wuji-sdk/troubleshooting/) |

For source and releases, see the [wuji-sdk repository](https://github.com/wuji-technology/wuji-sdk).

<Info>
  All data frames share the same [FrameHeader](/en/docs/wuji-sdk/data-reference#frameheader), which contains a sequence number and device timestamp. For `timestamp_us` semantics, the sync mechanism, and accuracy, see SDK [Time Synchronization](/en/docs/wuji-sdk/time-sync).
</Info>

## Available data streams

The data streams fall into three categories by how they are produced:

* [Raw data](#raw-data): captured directly by the glove hardware and the input for every product. It can be saved alone and recomputed into all products afterward with the [offline pipeline](/en/docs/wuji-glove/offline-pipeline), with the same result as real-time computation and significantly lower CPU usage during capture.
* [Post-processed products](#post-processed-products): solved by SDK algorithms on top of the raw data.
* [Global resources](#global-resources): device-level coordinate transforms published independently of the data streams.

<span id="raw-data" />**Raw data**

<table>
  <thead>
    <tr><th className="nowrap">Data stream</th><th className="nowrap">SDK method</th><th className="nowrap">Type</th><th className="nowrap">Default output rate</th><th>Description</th></tr>
  </thead>

  <tbody>
    <tr><td className="nowrap">Tactile</td><td className="nowrap"><code>glove.tactile()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/tactile#tactileframe">TactileFrame</a></td><td className="nowrap">120 FPS</td><td>24×31 calibrated pressure matrix from the piezoresistive array</td></tr>
    <tr><td className="nowrap">EMF poses</td><td className="nowrap"><code>glove.emf\_poses()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/hand-tracking#emfposearray">EmfPoseArray</a></td><td className="nowrap">120 Hz</td><td>5-finger positioning poses from the EMF modules</td></tr>
    <tr><td className="nowrap">IMU</td><td className="nowrap"><code>glove.imu\_palm()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/imu#imudata">ImuData</a></td><td className="nowrap">800 Hz</td><td>Dorsum IMU angular velocity and linear acceleration (raw, no orientation)</td></tr>
  </tbody>
</table>

<span id="post-processed-products" />**Post-processed products**

<table>
  <thead>
    <tr><th className="nowrap">Data stream</th><th className="nowrap">SDK method</th><th className="nowrap">Type</th><th className="nowrap">Default output rate</th><th>Description</th></tr>
  </thead>

  <tbody>
    <tr><td className="nowrap">Tactile zones</td><td className="nowrap"><code>glove.tactile\_zones()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/tactile#tactilezones">TactileZones</a></td><td className="nowrap">120 FPS</td><td>Pressure data aggregated from <code>tactile</code> by hand region</td></tr>
    <tr><td className="nowrap">Tactile point cloud</td><td className="nowrap"><code>glove.tactile\_point\_cloud()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/tactile#pointcloud">PointCloud</a></td><td className="nowrap">120 Hz</td><td>Tactile 3D point cloud generated from <code>tactile</code></td></tr>
    <tr><td className="nowrap">Contact detection</td><td className="nowrap"><code>glove.tactile\_binary()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/tactile#tactilebinary">TactileBinary</a></td><td className="nowrap">120 FPS</td><td>24×31 binary contact map inferred from <code>tactile</code> (1.0 contact / 0.0 no contact / -1.0 invalid taxel)</td></tr>
    <tr><td className="nowrap">Contact residual</td><td className="nowrap"><code>glove.tactile\_residual()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/tactile#tactileresidual">TactileResidual</a></td><td className="nowrap">120 FPS</td><td>24×31 signed contact residual inferred from <code>tactile</code> (per-taxel <code>measured − predicted baseline</code>, threshold it yourself)</td></tr>
    <tr><td className="nowrap">Fingertip poses</td><td className="nowrap"><code>glove.tip\_poses()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/hand-tracking#fingertipposes">FingertipPoses</a></td><td className="nowrap">120 Hz</td><td>5-finger fingertip poses solved from <code>emf\_poses</code></td></tr>
    <tr><td className="nowrap">Joint angles</td><td className="nowrap"><code>glove.hand\_joint\_angles()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/hand-tracking#handjointangles">HandJointAngles</a></td><td className="nowrap">120 Hz</td><td>21 DoF hand joint angles solved from <code>emf\_poses</code> (thumb 5 + other four fingers 4 each)</td></tr>
    <tr><td className="nowrap">Hand skeleton</td><td className="nowrap"><code>glove.hand\_skeleton()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/hand-tracking#handskeleton">HandSkeleton</a></td><td className="nowrap">120 Hz</td><td>21 MediaPipe keypoint skeleton solved from <code>emf\_poses</code></td></tr>
    <tr><td className="nowrap">IMU fusion</td><td className="nowrap"><code>glove.imu\_data\_palm()</code></td><td className="nowrap"><a href="/en/docs/wuji-glove/sdk-data-reference/imu#imudata">ImuData</a></td><td className="nowrap">800 Hz</td><td>Complementary-filter fusion of <code>imu\_palm</code> raw data, adding orientation</td></tr>
  </tbody>
</table>

<Info>
  The tactile frame (`tactile`), tactile zones (`tactile_zones`), EMF poses (`emf_poses`), and the raw IMU streams support runtime output rate tuning: call `sub.set_rate(hz)` on a subscription handle to request a lower output rate — the device quantizes it, returns the rate in effect, and `0` restores the default. Although the table above lists `tactile_zones` as aggregated by zone, the device produces it directly, so it can be tuned independently. Derived streams (`tip_poses`, `hand_joint_angles`, `hand_skeleton`, `tactile_point_cloud`, `imu_data_palm`, and so on) follow their source rate and can't be tuned on their own. See [Output Rate Tuning](/en/docs/wuji-glove/sdk-data-reference/hand-tracking#output-rate-tuning).
</Info>

<span id="global-resources" />**Global resources**

<table>
  <thead>
    <tr><th className="nowrap">Data stream</th><th className="nowrap">SDK method</th><th className="nowrap">Type</th><th className="nowrap">Output rate</th><th>Description</th></tr>
  </thead>

  <tbody>
    <tr><td className="nowrap">Static TF</td><td className="nowrap"><code>manager.tf\_static()</code></td><td className="nowrap"><a href="/en/docs/wuji-sdk/data-reference#frametransforms">FrameTransforms</a></td><td className="nowrap">1 Hz</td><td>Fixed frame relationships</td></tr>
    <tr><td className="nowrap">Dynamic TF</td><td className="nowrap"><code>manager.tf()</code></td><td className="nowrap"><a href="/en/docs/wuji-sdk/data-reference#frametransforms">FrameTransforms</a></td><td className="nowrap">800 Hz</td><td>IMU-driven dynamic transforms</td></tr>
  </tbody>
</table>

C SDK equivalents: `wuji_subscribe_tf(...)` / `wuji_subscribe_tf_static(...)`, callback signature `WujiFrameTransforms`, device-independent. For the full C API reference, see [Wuji SDK · C API Reference](/en/docs/wuji-sdk/data-reference/).

## Example Code

Runnable, complete examples ship with the Wuji SDK.

| Resource | Location |
| - | - |
| Python examples | [`examples/python/wuji_glove/`](https://github.com/wuji-technology/wuji-sdk/tree/main/examples/python/wuji_glove) |
| C examples | [`examples/c/wuji_glove/`](https://github.com/wuji-technology/wuji-sdk/tree/main/examples/c/wuji_glove) |
| Teleoperation example | [`examples/python/retargeting/`](https://github.com/wuji-technology/wuji-sdk/tree/main/examples/python/retargeting) |
| Offline pipeline example | `examples/3.offline_pipeline.py` in the SDK package |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.