diff --git a/src/lerobot/scripts/lerobot_mirror_dataset.py b/src/lerobot/scripts/lerobot_mirror_dataset.py index 7d8eff6e0..787125cb7 100644 --- a/src/lerobot/scripts/lerobot_mirror_dataset.py +++ b/src/lerobot/scripts/lerobot_mirror_dataset.py @@ -72,11 +72,11 @@ def get_mirroring_mask(robot_type: str) -> dict[str, int]: def swap_left_right_name(name: str) -> str: """Swap 'left' and 'right' in a feature name.""" - if name.startswith("left_"): - return "right_" + name[5:] - elif name.startswith("right_"): - return "left_" + name[6:] - return name + # Use placeholder to avoid double-swap + result = name.replace("left_", "LEFT_PLACEHOLDER_") + result = result.replace("right_", "left_") + result = result.replace("LEFT_PLACEHOLDER_", "right_") + return result def mirror_feature_names(names: list[str]) -> tuple[list[str], dict[int, int]]: @@ -154,7 +154,6 @@ def mirror_dataset( mirroring_mask: dict[str, int] | None = None, vcodec: str = "libsvtav1", num_workers: int | None = None, - push_to_hub: bool = False, ) -> LeRobotDataset: """Mirror a bimanual robot dataset.""" logger.info(f"Loading dataset: {repo_id}") @@ -194,13 +193,7 @@ def mirror_dataset( _copy_episodes_metadata(dataset, new_meta) logger.info(f"Mirrored dataset saved to: {output_root}") - mirrored_dataset = LeRobotDataset(output_repo_id, root=output_root) - - if push_to_hub: - logger.info(f"Pushing mirrored dataset to hub: {output_repo_id}") - mirrored_dataset.push_to_hub() - - return mirrored_dataset + return LeRobotDataset(output_repo_id, root=output_root) def _mirror_data( @@ -320,6 +313,8 @@ def _copy_episodes_metadata( "total_episodes": src_dataset.meta.total_episodes, "total_frames": src_dataset.meta.total_frames, "total_tasks": src_dataset.meta.total_tasks, + "total_videos": src_dataset.meta.total_videos, + "total_chunks": src_dataset.meta.total_chunks, }) write_info(dst_meta.info, dst_meta.root) @@ -349,7 +344,6 @@ def main(): parser.add_argument("--output_root", type=str, default=None, help="Output dataset root directory") parser.add_argument("--vcodec", type=str, default="libsvtav1", help="Video codec (libsvtav1, h264, hevc)") parser.add_argument("--num_workers", type=int, default=None, help="Number of parallel workers for video processing") - parser.add_argument("--push_to_hub", action="store_true", help="Push mirrored dataset to HuggingFace Hub") args = parser.parse_args() mirror_dataset( @@ -359,7 +353,6 @@ def main(): output_root=args.output_root, vcodec=args.vcodec, num_workers=args.num_workers, - push_to_hub=args.push_to_hub, )