---
title: PhysCanvas
canonical_url: "https://www.modelscope.cn/datasets/ArteMe/PhysCanvas"
md_url: "https://www.modelscope.cn/datasets/ArteMe/PhysCanvas.md"
repository: ArteMe/PhysCanvas
last_updated: 2026-10-29
license: "Apache License 2.0"
storage_size: "864 GB"
downloads: 868
stars: 0
---

# PhysCanvas

> PhysCanvas - ArteMe 在 ModelScope 开源的数据集。PhysCanvas contains 1,000 unique dual-arm tactile manipulation episodes selected from the Tactile World Model training manifest. All observations were reconstructed from original acquisition videos, timestamps, robot…

ArteMe/PhysCanvas 是 ModelScope 魔搭社区上的数据集，存储大小 864 GB，采用 Apache License 2.0 许可。

- **Repository**: ArteMe/PhysCanvas
- **License**: Apache License 2.0
- **Storage size**: 864 GB
- **Downloads**: 868
- **Stars**: 0
- **Last updated**: 2026-10-29

Source: https://www.modelscope.cn/datasets/ArteMe/PhysCanvas

---

# PhysCanvas

PhysCanvas contains 1,000 unique dual-arm tactile manipulation episodes selected from the Tactile World Model training manifest. All observations were reconstructed from original acquisition videos, timestamps, robot states and Xense tactile point clouds, not from training-cache observations.

**Upload status:** the complete release is described by `checksums.json` (1,000 archives, 927,171,761,517 bytes). The initial upload is complete; see `UPLOAD_COMPLETE.json` for the verified inventory. The conversion is complete, but OXT organizer review and submission materials are not yet complete.

## Tasks

| Directory | Episodes | Aligned time points |
|---|---:|---:|
| bottle_cap_rollout | 250 | 58,894 |
| jimu_rollout | 250 | 56,097 |
| mofang_v2_rollout | 250 | 96,510 |
| shiguan_saizi_rollout | 250 | 61,394 |
| Total | 1,000 | 272,895 |

This release selects exactly 250 episodes per task from the 3,651-episode original-source export, with fixed seed `PhysCanvas-1000-20261028-v1`. Selection is without replacement and does not preferentially select short, successful or warning-free episodes. See `selection_manifest.json` for the reproducible SHA256 ranking and selected indices.

The original training manifest has 3,681 entries: 29 references resolve to duplicate raw episodes, and one missing raw episode was explicitly excluded. Archive numbers retain the original manifest index; gaps are intentional.

## Format

Each task directory contains `episode_XXXXXX.zip`. Each ZIP contains `episode_XXXXXX.zarr`, a Zarr v2 group with Blosc-zstd compressed chunks. ZIP itself uses ZIP_STORED. These files follow the OXT/FTP-1 array conventions. Refer to the [Open-X-Tactile website](https://open-x-tactile.github.io/) and [OXT contribution and quality-check tools](https://github.com/nolann030628/OXT-QC) for the data format and contribution process.

```
PhysCanvas/
  bottle_cap_rollout/*.zip
  shiguan_saizi_rollout/*.zip
  jimu_rollout/*.zip
  mofang_v2_rollout/*.zip
  previews/*.mp4
  checksums.json
  validation_summary.json
  README.md
```

Within each episode, T is the number of aligned reference time points:

| Group / field | Shape | Meaning |
|---|---|---|
| data/timestamps | T | Episode-relative seconds; Unix origin in attributes |
| data/camera_main_rgb | T,480,640,3 | RGB main camera |
| data/left_wrist_camera_rgb, right_wrist_camera_rgb | T,480,640,3 | RGB wrist cameras |
| data/{left,right}_arm_joints | T,6 | Measured arm joints, radians |
| data/{left,right}_hand_joints | T,1 | Measured gripper opening, meters |
| data/{left,right}_hand_joints_idx | T,1 | Gripper convention index 28 |
| data/{left,right}_tactile_data_gripper | T,2,400,700,3 | Two G1-WS Difference image streams per side |
| data/{left,right}_tactile_data_displacement | T,2,700,3 | Recorded dx,dy,dz; unchanged native SDK units |
| data/sub_task_instruction | T | Repeated high-level acquisition task description |
| meta/episode_ends | 1 | Exclusive end index T |
| alignment/ | varies | Original indices, Unix-ms timestamps, signed errors, drop statistics |
| source_streams/ | varies | Original timestamps, robot numerical streams and point clouds at native rates |
| extensions/ | varies | Aligned full point clouds, robot velocity/effort and native-frame end-effector poses |

Tactile groups include matching area, sensor and type fields. Sensor name is `G1-WS`; Difference is image data and displacement is numerical state. Full point clouds contain x,y,z,dx,dy,dz. No action commands were synthesized from observed states.

## Timestamp alignment

Use the common time overlap of all required streams and actual `left_wrist_0` tactile acquisition times as the master timeline. Other streams use nearest recorded observations. A reference row is dropped if any RGB error exceeds 50 ms, tactile error exceeds 75 ms, or robot-state error exceeds 20 ms. This is approximate temporal matching, not a claim of hardware synchronization. No observations are interpolated. Repeated nearest-neighbor selections and original timestamp duplicates are recorded. All source indices and signed time differences are retained. Read timestamps rather than assuming exact 10 Hz.

There are 3,154 dropped alignment reference rows in this 1,000-episode release; common-overlap boundary trimming is recorded separately. Difference images and tactile point clouds share the acquisition bundle indices. Source videos were decoded at native resolution, without training-cache resize/crop. Displacements were not clipped, rescaled or baseline-subtracted.

## Validation and limits

All 1,000 episodes passed the official metadata/structure precheck. Export verification included decoded-video/timestamp count equality, numeric-array and image readback checks, ZIP CRC, and destination SHA256. See `validation_summary.json`. There are 92 official precheck warnings; a pass does not imply absence of timestamp gaps or complete semantic validation.

- Recorded tactile images are SDK Difference images, not raw Rectify images.
- Displacement units remain the native SDK units; do not assume meters or millimeters.
- Tactile area IDs 0/1 currently follow pad 0/1 order; physical thumb/index mapping requires confirmation before claiming finalized OXT annotation.
- End-effector poses use each arm's own base frame and are placed in extensions; they are not standardized world-frame wrist poses.
- Four multimodal previews are samples, not a full-dataset visual acceptance test. VLM review and the remaining OXT submission materials are pending.

## Previews

Each `previews/<task>.mp4` is a full-length sample. Top row: three RGB cameras. Middle row: four tactile Difference images. Bottom row: numerical tactile displacement rendered as XY arrows with signed dz colors. Panel dt labels show original observation time minus reference time in milliseconds. Playback uses the actual relative timestamps with zero-order hold at 30 fps. `hold` shows the age of a held observation. Flow display scales are fixed within each video and documented in the adjacent JSON.

## Read an episode

Use Zarr 2.x:

```python
import zarr

with zarr.ZipStore("episode_002819.zip", mode="r") as store:
    episode = zarr.open_group(store, path="episode_002819.zarr", mode="r")
    t = episode["data/timestamps"][:]
    rgb = episode["data/camera_main_rgb"][0]
    tactile = episode["data/left_tactile_data_gripper"][0]
    displacement = episode["data/left_tactile_data_displacement"][0]
```

Alternatively, unzip the archive and open the extracted `.zarr` directory. The repository license setting is preserved from the dataset owner's existing repository configuration.
