Skip to main content

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

Metadata

Release files for flexa-ai 0.2.0

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

Source distribution (sdist)

Source distribution for flexa-ai 0.2.0
File Size Uploaded Provenance Actions
flexa_ai-0.2.0.tar.gz 11.9 kB Without provenance Details for flexa_ai-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for flexa-ai 0.2.0
File Interpreter ABI Platform Actions
flexa_ai-0.2.0-py3-none-any.whl Python 3 none any Details for flexa_ai-0.2.0-py3-none-any.whl

Total release size: 24.2 kB

Release files / flexa_ai-0.2.0.tar.gz

Download URL flexa_ai-0.2.0.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f4c1374a4f27a3b5ce9672adf58dc786cf22aadd73c31ea47f79004c5fd3105e
BLAKE2b-256 checksum
How to use checksums
02f28890a6272f89363ca181509b86710ac458ab0077b73d533b8f7c9c42ab3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / flexa_ai-0.2.0-py3-none-any.whl

Download URL flexa_ai-0.2.0-py3-none-any.whl
Size 12.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5753572f5d0a5c520f448a58078089daa1c9c59391f2d7d3a16c9c25ea3ad00b
BLAKE2b-256 checksum
How to use checksums
9896a9391780a24055676435d03e4eccf5bd264297f7ae9e0b9841670b4fff6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Security for flexa-ai 0.2.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

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