Flexa
Crowdsourced egocentric manipulation data pipeline for robot learning.
Turn iPhone recordings into robot training data. Zero additional hardware required.
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.