LeRobot Diffusion Policy PushT closed-loop evaluation
LeRobot Diffusion Policy PushT closed-loop evaluation. Source-pinned, bounded simulation with explicit goal checks; no physical execution.
lerobot-diffusion-pusht | Record version: 1.0.0
Record JSON | Markdown recipe | Complete search index
Fetch and prepare
curl -fsSL https://hub.superfastrobotics.com/skills/lerobot-diffusion-pusht/skill.json
curl -fsSL https://hub.superfastrobotics.com/skills/lerobot-diffusion-pusht/README.md
python /PATH_TO_SKILL/scripts/rsh.py inspect lerobot-diffusion-pusht --json
python /PATH_TO_SKILL/scripts/rsh.py prepare lerobot-diffusion-pusht --project ./experiment --expected-source-commit b883328e6c95681ca90a18b102e4ae5e1f91e2bf --expected-record-version 1.0.0 --plan --json
Inspect the requirements, then remove --plan to prepare a project. Preparation verifies the archive SHA256 and preserves exact source pins. --install-deps explicitly installs dependencies. Run the returned simulation command separately.
Environment
- Runtime
- lerobot 0.3.3
- Robot
- pusht-2d-pusher
- Controller
- diffusion_policy
- Observation
- rgb_pixels_and_pusher_state
- OS / architecture
- linux / x86_64
- Python
- >=3.10,<3.11
Compatibility status: source_reviewed
96x96 RGB observations and 2D pusher state, consumed by the original frozen checkpoint; no object-state oracle or retraining.
Requirements
- Linux x86_64; CUDA GPU, tested on A100 40GB
Headless. EGL libraries are required for MuJoCo imports; PushT uses SDL dummy video. No interactive display.
Packages: lerobot==0.3.3, torch==2.7.1, torchvision==0.22.1, torchcodec==0.5.0, diffusers==0.33.1, gym-pusht==0.1.8, numpy==1.26.4, pymunk==6.11.1
Direct runtime versions are pinned and measured. The receipt retains the complete environment freeze; prepare records the installed environment. System drivers are separate host requirements. Linux device dependencies may build evdev from source; an available C compiler and explicit dependency-install permission are required.
External API keys: none.
Invocation
Executable interface
{
"version": "1",
"kind": "task",
"abstraction_level": 2,
"execution_domain": "simulation",
"language": "python",
"input_transport": "json_file_or_inline",
"output_transport": "json_stdout",
"output_selector": "outputs",
"conventions": {
"linear_unit": "m",
"angular_unit": "rad",
"time_unit": "s",
"coordinate_frame": "PushT native 2D pixel arena; no exposed metric pose",
"joint_order": "not_used",
"quaternion_order": "not_used"
},
"input_schema": {
"type": "object",
"required": [
"seed"
],
"properties": {
"seed": {
"type": "integer",
"minimum": 0,
"maximum": 10000
}
},
"additionalProperties": false
},
"output_schema": {
"type": "object",
"required": [
"maximum_coverage",
"steps",
"environment_success",
"cuda_inference"
],
"properties": {
"maximum_coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"steps": {
"type": "integer",
"minimum": 1,
"maximum": 300
},
"environment_success": {
"type": "boolean"
},
"cuda_inference": {
"type": "boolean"
}
},
"additionalProperties": false
},
"preconditions": [
"Use the exact recorded source, Linux Python 3.10 environment and pinned direct packages.",
"No physical robot, network actuation or external robot credentials.",
"Policy internal pixel coordinates are not relabeled as metres. The public JSON exposes only seed, dimensionless coverage and steps. CUDA GPU and public pinned checkpoint required."
],
"postconditions": [
"All reported checks must be true and all output numbers finite.",
"Success covers the declared goal and frozen cases, not arbitrary tasks or physical hardware."
],
"failure_codes": [
"invalid_input_or_environment",
"execution_failed",
"task_failed"
],
"composition": {
"depends_on": [],
"automatic_frame_conversion": false,
"automatic_hardware_execution": false
}
}
Entrypoint: python run.py
{
"argv": [
"{python}",
"{recipe_dir}/run.py",
"--source-dir",
"{source_dir}",
"--example"
],
"inputs": {
"seed": 0
},
"outputs": {
"format": "single JSON object",
"payload_selector": "outputs",
"schema": {
"type": "object",
"required": [
"maximum_coverage",
"steps",
"environment_success",
"cuda_inference"
],
"properties": {
"maximum_coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"steps": {
"type": "integer",
"minimum": 1,
"maximum": 300
},
"environment_success": {
"type": "boolean"
},
"cuda_inference": {
"type": "boolean"
}
},
"additionalProperties": false
}
}
}
Success: All declared goal and finite-state checks pass; exit 0 with task_complete. Original PushT success flag and measured object/target overlap >=95%; no accuracy claim beyond the three retained seed episodes. Checkpoint license: Apache-2.0, preserved at its immutable model revision.
Timeout: 1200 seconds. Terminate the adapter at the recorded timeout. No physical hardware is opened.
Failure modes
- Invalid input or source checksum
- Different pinned package version
- Unavailable runtime/driver
- Goal not reached within bounded steps
Source and license
- Repository
- https://github.com/huggingface/lerobot
- Authors
- Original lerobot contributors (preserve pinned LICENSE)
- Commit
b883328e6c95681ca90a18b102e4ae5e1f91e2bf- Archive SHA256
cf58261f6dbf614168337530f78f761929fb2d4d1b91e90f4f5f17209138aa40- License
- Apache-2.0
- Hub commit
ce1d44c01f1a9f707f055da0888068fe32390e62
- LICENSE
- README.md
- pyproject.toml
- src/lerobot/__init__.py
- src/lerobot/__version__.py
- src/lerobot/calibrate.py
- src/lerobot/cameras/__init__.py
- src/lerobot/cameras/camera.py
- src/lerobot/cameras/configs.py
- src/lerobot/cameras/opencv/__init__.py
- src/lerobot/cameras/opencv/camera_opencv.py
- src/lerobot/cameras/opencv/configuration_opencv.py
- src/lerobot/cameras/realsense/__init__.py
- src/lerobot/cameras/realsense/camera_realsense.py
- src/lerobot/cameras/realsense/configuration_realsense.py
- src/lerobot/cameras/utils.py
- src/lerobot/configs/default.py
- src/lerobot/configs/eval.py
- src/lerobot/configs/parser.py
- src/lerobot/configs/policies.py
- src/lerobot/configs/train.py
- src/lerobot/configs/types.py
- src/lerobot/constants.py
- src/lerobot/datasets/backward_compatibility.py
- src/lerobot/datasets/card_template.md
- src/lerobot/datasets/compute_stats.py
- src/lerobot/datasets/factory.py
- src/lerobot/datasets/image_writer.py
- src/lerobot/datasets/lerobot_dataset.py
- src/lerobot/datasets/online_buffer.py
- src/lerobot/datasets/push_dataset_to_hub/utils.py
- src/lerobot/datasets/sampler.py
- src/lerobot/datasets/transforms.py
- src/lerobot/datasets/utils.py
- src/lerobot/datasets/v2/batch_convert_dataset_v1_to_v2.py
- src/lerobot/datasets/v2/convert_dataset_v1_to_v2.py
- src/lerobot/datasets/v21/_remove_language_instruction.py
- src/lerobot/datasets/v21/batch_convert_dataset_v20_to_v21.py
- src/lerobot/datasets/v21/convert_dataset_v20_to_v21.py
- src/lerobot/datasets/v21/convert_stats.py
- src/lerobot/datasets/video_utils.py
- src/lerobot/envs/__init__.py
- src/lerobot/envs/configs.py
- src/lerobot/envs/factory.py
- src/lerobot/envs/utils.py
- src/lerobot/errors.py
- src/lerobot/find_cameras.py
- src/lerobot/find_port.py
- src/lerobot/model/kinematics.py
- src/lerobot/motors/__init__.py
- src/lerobot/motors/calibration_gui.py
- src/lerobot/motors/dynamixel/__init__.py
- src/lerobot/motors/dynamixel/dynamixel.py
- src/lerobot/motors/dynamixel/tables.py
- src/lerobot/motors/feetech/__init__.py
- src/lerobot/motors/feetech/feetech.py
- src/lerobot/motors/feetech/tables.py
- src/lerobot/motors/motors_bus.py
- src/lerobot/optim/__init__.py
- src/lerobot/optim/factory.py
- src/lerobot/optim/optimizers.py
- src/lerobot/optim/schedulers.py
- src/lerobot/policies/__init__.py
- src/lerobot/policies/act/configuration_act.py
- src/lerobot/policies/act/modeling_act.py
- src/lerobot/policies/diffusion/configuration_diffusion.py
- src/lerobot/policies/diffusion/modeling_diffusion.py
- src/lerobot/policies/factory.py
- src/lerobot/policies/normalize.py
- src/lerobot/policies/pi0/configuration_pi0.py
- src/lerobot/policies/pi0/conversion_scripts/benchmark.py
- src/lerobot/policies/pi0/conversion_scripts/compare_with_jax.py
- src/lerobot/policies/pi0/conversion_scripts/conversion_utils.py
- src/lerobot/policies/pi0/conversion_scripts/convert_pi0_to_hf_lerobot.py
- src/lerobot/policies/pi0/flex_attention.py
- src/lerobot/policies/pi0/modeling_pi0.py
- src/lerobot/policies/pi0/paligemma_with_expert.py
- src/lerobot/policies/pi0fast/configuration_pi0fast.py
- src/lerobot/policies/pi0fast/modeling_pi0fast.py
- src/lerobot/policies/pretrained.py
- src/lerobot/policies/sac/configuration_sac.py
- src/lerobot/policies/sac/modeling_sac.py
- src/lerobot/policies/sac/reward_model/configuration_classifier.py
- src/lerobot/policies/sac/reward_model/modeling_classifier.py
- src/lerobot/policies/smolvla/configuration_smolvla.py
- src/lerobot/policies/smolvla/modeling_smolvla.py
- src/lerobot/policies/smolvla/smolvlm_with_expert.py
- src/lerobot/policies/tdmpc/configuration_tdmpc.py
- src/lerobot/policies/tdmpc/modeling_tdmpc.py
- src/lerobot/policies/utils.py
- src/lerobot/policies/vqbet/configuration_vqbet.py
- src/lerobot/policies/vqbet/modeling_vqbet.py
- src/lerobot/policies/vqbet/vqbet_utils.py
- src/lerobot/processor/__init__.py
- src/lerobot/processor/device_processor.py
- src/lerobot/processor/normalize_processor.py
- src/lerobot/processor/observation_processor.py
- src/lerobot/processor/pipeline.py
- src/lerobot/processor/rename_processor.py
- src/lerobot/record.py
- src/lerobot/replay.py
- src/lerobot/robots/__init__.py
- src/lerobot/robots/bi_so100_follower/__init__.py
- src/lerobot/robots/bi_so100_follower/bi_so100_follower.py
- src/lerobot/robots/bi_so100_follower/config_bi_so100_follower.py
- src/lerobot/robots/config.py
- src/lerobot/robots/hope_jr/__init__.py
- src/lerobot/robots/hope_jr/config_hope_jr.py
- src/lerobot/robots/hope_jr/hope_jr_arm.py
- src/lerobot/robots/hope_jr/hope_jr_hand.py
- src/lerobot/robots/koch_follower/__init__.py
- src/lerobot/robots/koch_follower/config_koch_follower.py
- src/lerobot/robots/koch_follower/koch_follower.py
- src/lerobot/robots/lekiwi/__init__.py
- src/lerobot/robots/lekiwi/config_lekiwi.py
- src/lerobot/robots/lekiwi/lekiwi.py
- src/lerobot/robots/lekiwi/lekiwi_client.py
- src/lerobot/robots/lekiwi/lekiwi_host.py
- src/lerobot/robots/robot.py
- src/lerobot/robots/so100_follower/__init__.py
- src/lerobot/robots/so100_follower/config_so100_follower.py
- src/lerobot/robots/so100_follower/so100_follower.py
- src/lerobot/robots/so100_follower/so100_follower_end_effector.py
- src/lerobot/robots/so101_follower/__init__.py
- src/lerobot/robots/so101_follower/config_so101_follower.py
- src/lerobot/robots/so101_follower/so101_follower.py
- src/lerobot/robots/stretch3/README.md
- src/lerobot/robots/stretch3/__init__.py
- src/lerobot/robots/stretch3/configuration_stretch3.py
- src/lerobot/robots/stretch3/robot_stretch3.py
- src/lerobot/robots/utils.py
- src/lerobot/robots/viperx/README.md
- src/lerobot/robots/viperx/__init__.py
- src/lerobot/robots/viperx/config_viperx.py
- src/lerobot/robots/viperx/viperx.py
- src/lerobot/scripts/display_sys_info.py
- src/lerobot/scripts/eval.py
- src/lerobot/scripts/find_joint_limits.py
- src/lerobot/scripts/rl/actor.py
- src/lerobot/scripts/rl/crop_dataset_roi.py
- src/lerobot/scripts/rl/eval_policy.py
- src/lerobot/scripts/rl/gym_manipulator.py
- src/lerobot/scripts/rl/learner.py
- src/lerobot/scripts/rl/learner_service.py
- src/lerobot/scripts/server/configs.py
- src/lerobot/scripts/server/constants.py
- src/lerobot/scripts/server/helpers.py
- src/lerobot/scripts/server/policy_server.py
- src/lerobot/scripts/server/robot_client.py
- src/lerobot/scripts/train.py
- src/lerobot/scripts/visualize_dataset.py
- src/lerobot/scripts/visualize_dataset_html.py
- src/lerobot/scripts/visualize_image_transforms.py
- src/lerobot/setup_motors.py
- src/lerobot/teleoperate.py
- src/lerobot/teleoperators/__init__.py
- src/lerobot/teleoperators/bi_so100_leader/__init__.py
- src/lerobot/teleoperators/bi_so100_leader/bi_so100_leader.py
- src/lerobot/teleoperators/bi_so100_leader/config_bi_so100_leader.py
- src/lerobot/teleoperators/config.py
- src/lerobot/teleoperators/gamepad/__init__.py
- src/lerobot/teleoperators/gamepad/configuration_gamepad.py
- src/lerobot/teleoperators/gamepad/gamepad_utils.py
- src/lerobot/teleoperators/gamepad/teleop_gamepad.py
- src/lerobot/teleoperators/homunculus/__init__.py
- src/lerobot/teleoperators/homunculus/config_homunculus.py
- src/lerobot/teleoperators/homunculus/homunculus_arm.py
- src/lerobot/teleoperators/homunculus/homunculus_glove.py
- src/lerobot/teleoperators/homunculus/joints_translation.py
- src/lerobot/teleoperators/keyboard/__init__.py
- src/lerobot/teleoperators/keyboard/configuration_keyboard.py
- src/lerobot/teleoperators/keyboard/teleop_keyboard.py
- src/lerobot/teleoperators/koch_leader/__init__.py
- src/lerobot/teleoperators/koch_leader/config_koch_leader.py
- src/lerobot/teleoperators/koch_leader/koch_leader.py
- src/lerobot/teleoperators/so100_leader/__init__.py
- src/lerobot/teleoperators/so100_leader/config_so100_leader.py
- src/lerobot/teleoperators/so100_leader/so100_leader.py
- src/lerobot/teleoperators/so101_leader/__init__.py
- src/lerobot/teleoperators/so101_leader/config_so101_leader.py
- src/lerobot/teleoperators/so101_leader/so101_leader.py
- src/lerobot/teleoperators/stretch3_gamepad/__init__.py
- src/lerobot/teleoperators/stretch3_gamepad/configuration_stretch3.py
- src/lerobot/teleoperators/stretch3_gamepad/stretch3_gamepad.py
- src/lerobot/teleoperators/teleoperator.py
- src/lerobot/teleoperators/utils.py
- src/lerobot/teleoperators/widowx/__init__.py
- src/lerobot/teleoperators/widowx/config_widowx.py
- src/lerobot/teleoperators/widowx/widowx.py
- src/lerobot/templates/lerobot_modelcard_template.md
- src/lerobot/templates/visualize_dataset_homepage.html
- src/lerobot/templates/visualize_dataset_template.html
- src/lerobot/transport/services.proto
- src/lerobot/transport/services_pb2.py
- src/lerobot/transport/services_pb2_grpc.py
- src/lerobot/transport/utils.py
- src/lerobot/utils/benchmark.py
- src/lerobot/utils/buffer.py
- src/lerobot/utils/control_utils.py
- src/lerobot/utils/encoding_utils.py
- src/lerobot/utils/hub.py
- src/lerobot/utils/import_utils.py
- src/lerobot/utils/io_utils.py
- src/lerobot/utils/logging_utils.py
- src/lerobot/utils/process.py
- src/lerobot/utils/queue.py
- src/lerobot/utils/random_utils.py
- src/lerobot/utils/robot_utils.py
- src/lerobot/utils/train_utils.py
- src/lerobot/utils/transition.py
- src/lerobot/utils/utils.py
- src/lerobot/utils/visualization_utils.py
- src/lerobot/utils/wandb_utils.py
Evidence
Runtime: import_verified / import_verified
1/3 frozen cases completed; retained failures are not promoted.
Reviewer: Hub finite-case Lambda execution harness | 2026-10-20
- python tools/verify_runtime_expansion.py --backend lerobot --source-cache SOURCE_CACHE --output OUTPUT
Submitter reports and hub verification remain separate. Source review does not establish task success.