Skip to main content

Crowdsourced egocentric manipulation data for robot learning - zero custom hardware

Project description

Flexa

Crowdsourced egocentric manipulation data pipeline for robot learning.

Turn iPhone recordings into robot training data. Zero additional hardware required.

Paper Dataset Demo

Install

pip install Flexa

With GPU support (for local object detection + hand pose):

pip install Flexa[gpu]

With simulation (for MuJoCo replay):

pip install Flexa[sim]

Quick Start

Download and explore the dataset

from Flexa import download_dataset
import h5py

# Download from HuggingFace
path = download_dataset("Flexa/pick-mug-v5")

with h5py.File(path, "r") as f:
    ep = f["episode_0"]
    qpos = ep["observations/qpos_arm"][:]       # (270, 7) joint positions
    ee = ep["observations/ee_pos"][:]            # (270, 3) end-effector XYZ
    actions = ep["actions/target_qpos"][:]       # (270, 7) target joints
    print(f"Mug lift: {ep.attrs['mug_lift_cm']:.1f}cm")
# -> Mug lift: 17.7cm

Process a new recording

# Parse .r3d file from Record3D
Flexa process recording.r3d --object mug --output ./my_dataset

# With cloud GPU processing (GroundingDINO + HaMeR)
Flexa process recording.r3d --cloud --output ./my_dataset

Use as a library

from Flexa import parse_r3d, spatial_trajectory
from Flexa.export import to_lerobot_hdf5, to_rlds_json

# Parse iPhone recording
data = parse_r3d("recording.r3d", output_dir="parsed/")

# Generate robot trajectory (after hand pose extraction)
traj = spatial_trajectory(
    hamer_results="parsed/hamer_results.json",
    object_poses="parsed/object_poses_3d.json",
)

# Export to LeRobot format
to_lerobot_hdf5(traj, qpos_data, "output/data.hdf5")

Pipeline Architecture

iPhone (.r3d)
    |
    v
[1. Parse] ──> RGB frames + LiDAR depth + camera poses
    |
    v
[2. Detect] ──> GroundingDINO: open-vocab object detection
    |
    v
[3. Hand Pose] ──> HaMeR: 3D hand mesh reconstruction (93.7% coverage)
    |
    v
[4. Retarget] ──> Spatial trajectory: hand motion -> robot EE targets
    |
    v
[5. Export] ──> LeRobot HDF5 | RLDS JSON | Raw JSON

Key Results

  • 18.1cm clean mug lift in MuJoCo simulation from a single iPhone recording
  • 93.7% hand pose coverage via HaMeR (no wearable sensors needed)
  • $0 contributor hardware cost (core tier: iPhone with LiDAR only)
  • 9-55x cheaper than teleoperation-based data collection

Supported Formats

Format File Use Case
LeRobot HDF5 data.hdf5 HuggingFace ecosystem, policy training
RLDS JSON episode.json RT-X, Octo, Open X-Embodiment
Raw JSON raw.json Custom pipelines, analysis

Citation

@article{nyamekye2026Flexa,
  title={Flexa: Crowdsourced Egocentric Manipulation Data at Consumer Cost},
  author={Nyamekye, Christian},
  journal={arXiv preprint arXiv:TODO},
  year={2026}
}

License

CC-BY-4.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flexa_ai-0.2.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flexa_ai-0.2.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file flexa_ai-0.2.0.tar.gz.

File metadata

  • Download URL: flexa_ai-0.2.0.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for flexa_ai-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f4c1374a4f27a3b5ce9672adf58dc786cf22aadd73c31ea47f79004c5fd3105e
MD5 1efde802adc288cc97b07b7b9e44d55a
BLAKE2b-256 02f28890a6272f89363ca181509b86710ac458ab0077b73d533b8f7c9c42ab3c

See more details on using hashes here.

File details

Details for the file flexa_ai-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: flexa_ai-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for flexa_ai-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5753572f5d0a5c520f448a58078089daa1c9c59391f2d7d3a16c9c25ea3ad00b
MD5 691a815c81bf06f62261ec962d524675
BLAKE2b-256 9896a9391780a24055676435d03e4eccf5bd264297f7ae9e0b9841670b4fff6d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page