# LERO - LeRobot dataset Operations toolkit
**LERO (LeRobot dataset Operations toolkit)** is a comprehensive toolkit for editing and managing LeRobot datasets for robot imitation learning. LERO provides powerful tools for LeRobot dataset editing, efficiently handling LeRobot format datasets consisting of Parquet files, MP4 videos, and metadata with a modern, modular architecture.

## Features
### Core Functionality
- **Dataset Overview**: Display episode count, task count, and dataset statistics
- **Episode Management**: View episode details and list episodes with advanced filtering
- **Episode Deletion**: Delete specified episodes with automatic renumbering
- **Episode Copying**: Duplicate episodes with new instructions
- **Dry Run Mode**: Preview operations before executing them
- **Multi-Camera Support**: Handle multiple camera video files seamlessly
### GUI Features
- **Interactive Episode Viewer**: Visual episode browser with video playback
- **Real-time Joint Angle Visualization**: Unified graph showing all robot joints
- **Synchronized Playback**: Video and joint data synchronized with timeline controls
- **Multi-Camera Display**: Support for multiple camera views with automatic layout
- **Variable Speed Playback**: Adjustable playback speed (0.1x to 10x)

*Interactive GUI showing synchronized video playback and joint angle visualization*
### Advanced Features
- **Modular Architecture**: Clean, maintainable codebase with separated concerns
- **Comprehensive Validation**: Dataset integrity checking and validation
- **Performance Optimized**: Efficient file operations and memory usage
- **Error Recovery**: Robust error handling with detailed diagnostics
## Dataset Structure
This tool supports LeRobot datasets with the following structure:
```
dataset_root/
├── data/ # Parquet files (robot state data)
│ ├── chunk-000/
│ │ ├── episode_000000.parquet
│ │ └── ...
│ └── ...
├── videos/ # MP4 video files
│ ├── chunk-000/
│ │ ├── observation.images.laptop/
│ │ │ ├── episode_000000.mp4
│ │ │ └── ...
│ │ └── observation.images.phone/
│ │ └── ...
│ └── ...
└── meta/ # Metadata
├── info.json # Dataset information
├── episodes.jsonl # Episode metadata
├── tasks.jsonl # Task descriptions
└── stats.json # Statistics data
```
## Installation
### Using uv (Recommended)
```bash
# Setup project with core dependencies
uv sync
# Install with GUI support
uv sync --group gui
# Install with development tools
uv sync --group dev
# Activate virtual environment
source .venv/bin/activate # Linux/macOS
# or
.venv\Scripts\activate # Windows
```
### Using pip
```bash
# Core dependencies
pip install lero-core
# GUI dependencies (optional)
pip install lero-core[gui]
# Development dependencies (optional)
pip install "lero-core[dev]"
```
source
```bash
git clone https://github.com/masato-ka/lero
cd lero
# Core dependencies
pip install -e .
pip install -e ".[gui]"
```
## Usage
### Basic Usage
```bash
# Display dataset overview
lero /path/to/dataset
# Show detailed summary with statistics
lero /path/to/dataset --summary
```
### Episode Display
```bash
# List episodes (default 10 episodes)
lero /path/to/dataset --list
# Display specific range (10 episodes starting from episode 20)
lero /path/to/dataset --list 10 --list-start 20
# Show specific episode details
lero /path/to/dataset --episode 5
# Include data sample in display
lero /path/to/dataset --episode 5 --show-data
```
### Task Display
```bash
# Display all tasks with episode counts and episode indices
lero /path/to/dataset --tasks
# Example output:
# === Tasks (5 total) ===
# Task 0: Please take one of the plates. (10 episodes: 0, 1, 2... +7 more)
# Task 1: Please give me two plates. (10 episodes: 10, 11, 12... +7 more)
# Task 2: Could you take three plates? (10 episodes: 20, 21, 22... +7 more)
```
### Episode Operations
```bash
# Delete episode 5 (remaining episodes are automatically renumbered)
lero /path/to/dataset --delete 5
# Dry run deletion (preview what would be deleted)
lero /path/to/dataset --delete 5 --dry-run
# Copy episode 3 with new instruction (added to the end of the dataset)
lero /path/to/dataset --copy 3 --instruction "Move the block to the left"
# Dry run copy
lero /path/to/dataset --copy 3 --instruction "New task" --dry-run
```
### GUI Mode
```bash
# Launch interactive GUI viewer
lero /path/to/dataset --gui
# Launch GUI with specific episode
lero /path/to/dataset --gui --episode 5
# Direct GUI launch
python -m lero.gui.viewer /path/to/dataset --episode 5
```
## Command Line Arguments
### Display Options
| Argument | Description |
|----------|-------------|
| `dataset_path` | Path to the dataset root directory (required) |
| `--summary` | Display detailed dataset summary |
| `--tasks` | Display all tasks with episode counts and indices |
| `--list [N]` | List episodes (default 10) |
| `--list-start N` | Starting index for episode listing |
| `--episode N` | Show details of specific episode |
| `--show-data` | Include data sample when displaying episode |
### Edit Operations
| Argument | Description |
|----------|-------------|
| `--delete N` | Delete specified episode and renumber remaining episodes |
| `--copy N` | Copy specified episode with new instruction |
| `--instruction "text"` | New instruction for copied episode (required with --copy) |
| `--dry-run` | Preview operations without making changes |
### GUI Options
| Argument | Description |
|----------|-------------|
| `--gui` | Launch interactive GUI viewer for episodes |
## Architecture
### Modular Design
The project follows a clean, modular architecture:
```
lero/
├── __init__.py # Package entry point
├── __main__.py # Main module entry point
├── dataset_editor/ # Core dataset editing module
│ ├── __init__.py # Module entry point
│ ├── constants.py # Configuration and constants
│ ├── metadata.py # Metadata management (MetadataManager)
│ ├── file_utils.py # File system operations (FileSystemManager)
│ ├── operations.py # Dataset operations (DatasetOperations)
│ ├── display.py # Display formatting (DisplayFormatter)
│ ├── cli.py # CLI handling (CLIHandler)
│ └── core.py # Main API (LeRobotDatasetEditor)
└── gui/ # GUI components module
├── __init__.py # GUI module entry point
├── constants.py # GUI configuration
├── data_handler.py # Data processing utilities
├── video_component.py # Video display component
├── plot_component.py # Joint angle plotting
├── controls.py # UI controls and panels
└── viewer.py # Main GUI application
```
### Key Components
- **MetadataManager**: Handles all metadata file operations
- **FileSystemManager**: Manages file system operations and path generation
- **DatasetOperations**: Core dataset manipulation logic
- **DisplayFormatter**: Consistent formatting for all output
- **CLIHandler**: Comprehensive command-line interface
- **LeRobotDatasetEditor**: Main API for external usage
## Feature Details
### Episode Deletion
When deleting an episode, the following operations are performed automatically:
1. Delete the target episode's Parquet file
2. Delete all camera videos for the target episode
3. Renumber subsequent episodes (shift up)
4. Update metadata (`episodes.jsonl`, `info.json`)
5. Maintain chunk-based file structure
6. Clean up empty directories
### Episode Copying
When copying an episode, the following operations are performed:
1. Copy the source episode's Parquet file
2. Copy all camera videos for the source episode
3. Set the copy destination to the last episode number
4. Add new task description to `tasks.jsonl`
5. Update episode indices in copied Parquet data
6. Update all metadata files appropriately
### GUI Features
The interactive GUI provides:
- **Multi-camera video playback** with synchronized timeline
- **Unified joint angle visualization** showing all 6 robot joints
- **Variable speed playback** from 0.1x to 10x speed
- **Frame-accurate navigation** with timeline scrubber
- **Episode switching** within the GUI
- **Performance optimizations** for smooth playback
### Dry Run Mode
Using the `--dry-run` option allows you to preview:
- List of files to be deleted or copied
- Source and destination file paths for operations
- Range of episodes to be renumbered after operations
- File size and storage impact estimates
## Robot Support
Currently optimized for:
- **SO-100 Robot**: 6-DOF robotic arm with gripper
- Joint names: shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper
- Automatic joint data extraction from `observation.state` column
- Multi-camera support (laptop, phone, etc.)
The architecture is extensible to support additional robot types.
## Performance Considerations
- **Chunk-based file organization**: Efficient handling of large datasets
- **Lazy loading**: Metadata loaded on-demand
- **Optimized video playback**: Frame skipping during high-speed playback
- **Memory efficient**: Streaming data processing where possible
- **Parallel operations**: Concurrent file operations when safe
## Important Notes
- **Backup Recommended**: Always create backups before editing datasets
- **Large Datasets**: Operations may take time with large datasets (progress indicators provided)
- **Chunk Structure**: Supports 1000-episode chunks; other chunk sizes are not supported
- **Concurrent Execution**: Do not run multiple tools on the same dataset simultaneously
- **GUI Dependencies**: GUI features require additional packages (install with `--group gui`)
## Development
### Dependencies
#### Core Dependencies
- Python 3.8+
- pandas: For reading and writing Parquet files
- pyarrow: For Parquet file support
#### GUI Dependencies (Optional)
- matplotlib: For joint angle plotting
- opencv-python: For video processing
- Pillow: For image handling
- tkinter: For GUI framework (usually included with Python)
#### Development Dependencies (Optional)
- pytest: For testing
- black: For code formatting
- isort: For import sorting
- mypy: For type checking
### Project Structure
```
.
├── lero/ # Main package directory
│ ├── dataset_editor/ # Core dataset editing module
│ ├── gui/ # GUI components module
│ ├── __init__.py # Package entry point
│ └── __main__.py # Module entry point
├── examples/ # Example scripts and documentation
├── media/ # Screenshots and assets
├── tests/ # Test suite
├── pyproject.toml # Project configuration
├── README.md # This file
└── LICENSE # Apache 2.0 license
```
### Development Setup
```bash
# Install with all dependencies
uv sync --group dev --group gui
# Run tests
uv run pytest
# Code formatting
uv run black .
uv run isort .
# Type checking
uv run mypy lero/
# Run the tool in development
lero --help
```
### API Usage
```python
from lero import LeRobotDatasetEditor
# Initialize editor
editor = LeRobotDatasetEditor("/path/to/dataset")
# Get dataset information
episode_count = editor.count_episodes()
episode_info = editor.get_episode_info(5)
summary = editor.get_statistics()
# Perform operations
editor.delete_episode(5, dry_run=True) # Preview deletion
editor.copy_episode_with_new_instruction(3, "New task")
# Launch GUI programmatically
from lero.gui import launch_episode_viewer
launch_episode_viewer("/path/to/dataset", episode_index=5)
```
## License
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
## Contributing
Bug reports and feature requests are welcome via GitHub Issues. Pull requests are also welcome.
### Contributing Guidelines
1. Follow the existing code style (black, isort)
2. Add type hints for new functions
3. Include docstrings for public APIs
4. Add tests for new functionality
5. Update documentation as needed
## Changelog
### v0.3.0
- **Major Architecture Refactor**: Modular design with separated concerns
- **GUI Episode Viewer**: Interactive video and joint angle visualization
- **Enhanced CLI**: Comprehensive command-line interface with validation
- **Performance Improvements**: Optimized file operations and memory usage
- **Robust Error Handling**: Better error messages and recovery
- **Dataset Validation**: Integrity checking and validation tools
- **SO-100 Robot Support**: Optimized for SO-100 6-DOF robotic arm
- **Dry Run Enhancements**: More detailed preview capabilities
- **Documentation**: Comprehensive documentation and examples
### Previous Versions
- **v0.2.0**: Episode deletion with automatic renumbering
- **v0.1.0**: Basic dataset overview and episode display functionality
Raw data
{
"_id": null,
"home_page": null,
"name": "lero-core",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "dataset, imitation-learning, lerobot, machine-learning, robotics",
"author": null,
"author_email": "masato-ka <jp6uzv@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/41/a3/721b3e66bb8221449fc8e6dad0ee9ac2fa8e44caa0589e0f956fe9c70543/lero_core-0.3.0.tar.gz",
"platform": null,
"description": "# LERO - LeRobot dataset Operations toolkit\n\n**LERO (LeRobot dataset Operations toolkit)** is a comprehensive toolkit for editing and managing LeRobot datasets for robot imitation learning. LERO provides powerful tools for LeRobot dataset editing, efficiently handling LeRobot format datasets consisting of Parquet files, MP4 videos, and metadata with a modern, modular architecture.\n\n\n\n## Features\n\n### Core Functionality\n- **Dataset Overview**: Display episode count, task count, and dataset statistics\n- **Episode Management**: View episode details and list episodes with advanced filtering\n- **Episode Deletion**: Delete specified episodes with automatic renumbering\n- **Episode Copying**: Duplicate episodes with new instructions\n- **Dry Run Mode**: Preview operations before executing them\n- **Multi-Camera Support**: Handle multiple camera video files seamlessly\n\n### GUI Features\n- **Interactive Episode Viewer**: Visual episode browser with video playback\n- **Real-time Joint Angle Visualization**: Unified graph showing all robot joints\n- **Synchronized Playback**: Video and joint data synchronized with timeline controls\n- **Multi-Camera Display**: Support for multiple camera views with automatic layout\n- **Variable Speed Playback**: Adjustable playback speed (0.1x to 10x)\n\n\n*Interactive GUI showing synchronized video playback and joint angle visualization*\n\n### Advanced Features\n- **Modular Architecture**: Clean, maintainable codebase with separated concerns\n- **Comprehensive Validation**: Dataset integrity checking and validation\n- **Performance Optimized**: Efficient file operations and memory usage\n- **Error Recovery**: Robust error handling with detailed diagnostics\n\n## Dataset Structure\n\nThis tool supports LeRobot datasets with the following structure:\n\n```\ndataset_root/\n\u251c\u2500\u2500 data/ # Parquet files (robot state data)\n\u2502 \u251c\u2500\u2500 chunk-000/\n\u2502 \u2502 \u251c\u2500\u2500 episode_000000.parquet\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 videos/ # MP4 video files\n\u2502 \u251c\u2500\u2500 chunk-000/\n\u2502 \u2502 \u251c\u2500\u2500 observation.images.laptop/\n\u2502 \u2502 \u2502 \u251c\u2500\u2500 episode_000000.mp4\n\u2502 \u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2502 \u2514\u2500\u2500 observation.images.phone/\n\u2502 \u2502 \u2514\u2500\u2500 ...\n\u2502 \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 meta/ # Metadata\n \u251c\u2500\u2500 info.json # Dataset information\n \u251c\u2500\u2500 episodes.jsonl # Episode metadata\n \u251c\u2500\u2500 tasks.jsonl # Task descriptions\n \u2514\u2500\u2500 stats.json # Statistics data\n```\n\n## Installation\n\n### Using uv (Recommended)\n\n```bash\n# Setup project with core dependencies\nuv sync\n\n# Install with GUI support\nuv sync --group gui\n\n# Install with development tools\nuv sync --group dev\n\n# Activate virtual environment\nsource .venv/bin/activate # Linux/macOS\n# or\n.venv\\Scripts\\activate # Windows\n```\n\n### Using pip\n\n```bash\n# Core dependencies\npip install lero-core\n\n# GUI dependencies (optional)\npip install lero-core[gui]\n\n# Development dependencies (optional) \npip install \"lero-core[dev]\"\n```\n\nsource\n\n```bash\ngit clone https://github.com/masato-ka/lero\n\ncd lero\n\n# Core dependencies\npip install -e .\n\npip install -e \".[gui]\"\n```\n\n## Usage\n\n### Basic Usage\n\n```bash\n# Display dataset overview\nlero /path/to/dataset\n\n# Show detailed summary with statistics\nlero /path/to/dataset --summary\n```\n\n### Episode Display\n\n```bash\n# List episodes (default 10 episodes)\nlero /path/to/dataset --list\n\n# Display specific range (10 episodes starting from episode 20)\nlero /path/to/dataset --list 10 --list-start 20\n\n# Show specific episode details\nlero /path/to/dataset --episode 5\n\n# Include data sample in display\nlero /path/to/dataset --episode 5 --show-data\n```\n\n### Task Display\n\n```bash\n# Display all tasks with episode counts and episode indices\nlero /path/to/dataset --tasks\n\n# Example output:\n# === Tasks (5 total) ===\n# Task 0: Please take one of the plates. (10 episodes: 0, 1, 2... +7 more)\n# Task 1: Please give me two plates. (10 episodes: 10, 11, 12... +7 more)\n# Task 2: Could you take three plates? (10 episodes: 20, 21, 22... +7 more)\n```\n\n### Episode Operations\n\n```bash\n# Delete episode 5 (remaining episodes are automatically renumbered)\nlero /path/to/dataset --delete 5\n\n# Dry run deletion (preview what would be deleted)\nlero /path/to/dataset --delete 5 --dry-run\n\n# Copy episode 3 with new instruction (added to the end of the dataset)\nlero /path/to/dataset --copy 3 --instruction \"Move the block to the left\"\n\n# Dry run copy\nlero /path/to/dataset --copy 3 --instruction \"New task\" --dry-run\n```\n\n### GUI Mode\n\n```bash\n# Launch interactive GUI viewer\nlero /path/to/dataset --gui\n\n# Launch GUI with specific episode\nlero /path/to/dataset --gui --episode 5\n\n# Direct GUI launch \npython -m lero.gui.viewer /path/to/dataset --episode 5\n```\n\n## Command Line Arguments\n\n### Display Options\n| Argument | Description |\n|----------|-------------|\n| `dataset_path` | Path to the dataset root directory (required) |\n| `--summary` | Display detailed dataset summary |\n| `--tasks` | Display all tasks with episode counts and indices |\n| `--list [N]` | List episodes (default 10) |\n| `--list-start N` | Starting index for episode listing |\n| `--episode N` | Show details of specific episode |\n| `--show-data` | Include data sample when displaying episode |\n\n### Edit Operations\n| Argument | Description |\n|----------|-------------|\n| `--delete N` | Delete specified episode and renumber remaining episodes |\n| `--copy N` | Copy specified episode with new instruction |\n| `--instruction \"text\"` | New instruction for copied episode (required with --copy) |\n| `--dry-run` | Preview operations without making changes |\n\n### GUI Options\n| Argument | Description |\n|----------|-------------|\n| `--gui` | Launch interactive GUI viewer for episodes |\n\n## Architecture\n\n### Modular Design\n\nThe project follows a clean, modular architecture:\n\n```\nlero/\n\u251c\u2500\u2500 __init__.py # Package entry point\n\u251c\u2500\u2500 __main__.py # Main module entry point\n\u251c\u2500\u2500 dataset_editor/ # Core dataset editing module\n\u2502 \u251c\u2500\u2500 __init__.py # Module entry point\n\u2502 \u251c\u2500\u2500 constants.py # Configuration and constants\n\u2502 \u251c\u2500\u2500 metadata.py # Metadata management (MetadataManager)\n\u2502 \u251c\u2500\u2500 file_utils.py # File system operations (FileSystemManager)\n\u2502 \u251c\u2500\u2500 operations.py # Dataset operations (DatasetOperations)\n\u2502 \u251c\u2500\u2500 display.py # Display formatting (DisplayFormatter)\n\u2502 \u251c\u2500\u2500 cli.py # CLI handling (CLIHandler)\n\u2502 \u2514\u2500\u2500 core.py # Main API (LeRobotDatasetEditor)\n\u2514\u2500\u2500 gui/ # GUI components module\n \u251c\u2500\u2500 __init__.py # GUI module entry point\n \u251c\u2500\u2500 constants.py # GUI configuration\n \u251c\u2500\u2500 data_handler.py # Data processing utilities\n \u251c\u2500\u2500 video_component.py # Video display component\n \u251c\u2500\u2500 plot_component.py # Joint angle plotting\n \u251c\u2500\u2500 controls.py # UI controls and panels\n \u2514\u2500\u2500 viewer.py # Main GUI application\n```\n\n### Key Components\n\n- **MetadataManager**: Handles all metadata file operations\n- **FileSystemManager**: Manages file system operations and path generation\n- **DatasetOperations**: Core dataset manipulation logic\n- **DisplayFormatter**: Consistent formatting for all output\n- **CLIHandler**: Comprehensive command-line interface\n- **LeRobotDatasetEditor**: Main API for external usage\n\n## Feature Details\n\n### Episode Deletion\n\nWhen deleting an episode, the following operations are performed automatically:\n\n1. Delete the target episode's Parquet file\n2. Delete all camera videos for the target episode\n3. Renumber subsequent episodes (shift up)\n4. Update metadata (`episodes.jsonl`, `info.json`)\n5. Maintain chunk-based file structure\n6. Clean up empty directories\n\n### Episode Copying\n\nWhen copying an episode, the following operations are performed:\n\n1. Copy the source episode's Parquet file\n2. Copy all camera videos for the source episode\n3. Set the copy destination to the last episode number\n4. Add new task description to `tasks.jsonl`\n5. Update episode indices in copied Parquet data\n6. Update all metadata files appropriately\n\n### GUI Features\n\nThe interactive GUI provides:\n\n- **Multi-camera video playback** with synchronized timeline\n- **Unified joint angle visualization** showing all 6 robot joints\n- **Variable speed playback** from 0.1x to 10x speed\n- **Frame-accurate navigation** with timeline scrubber\n- **Episode switching** within the GUI\n- **Performance optimizations** for smooth playback\n\n### Dry Run Mode\n\nUsing the `--dry-run` option allows you to preview:\n\n- List of files to be deleted or copied\n- Source and destination file paths for operations\n- Range of episodes to be renumbered after operations\n- File size and storage impact estimates\n\n## Robot Support\n\nCurrently optimized for:\n\n- **SO-100 Robot**: 6-DOF robotic arm with gripper\n - Joint names: shoulder_pan, shoulder_lift, elbow_flex, wrist_flex, wrist_roll, gripper\n - Automatic joint data extraction from `observation.state` column\n - Multi-camera support (laptop, phone, etc.)\n\nThe architecture is extensible to support additional robot types.\n\n## Performance Considerations\n\n- **Chunk-based file organization**: Efficient handling of large datasets\n- **Lazy loading**: Metadata loaded on-demand\n- **Optimized video playback**: Frame skipping during high-speed playback\n- **Memory efficient**: Streaming data processing where possible\n- **Parallel operations**: Concurrent file operations when safe\n\n## Important Notes\n\n- **Backup Recommended**: Always create backups before editing datasets\n- **Large Datasets**: Operations may take time with large datasets (progress indicators provided)\n- **Chunk Structure**: Supports 1000-episode chunks; other chunk sizes are not supported\n- **Concurrent Execution**: Do not run multiple tools on the same dataset simultaneously\n- **GUI Dependencies**: GUI features require additional packages (install with `--group gui`)\n\n## Development\n\n### Dependencies\n\n#### Core Dependencies\n- Python 3.8+\n- pandas: For reading and writing Parquet files\n- pyarrow: For Parquet file support\n\n#### GUI Dependencies (Optional)\n- matplotlib: For joint angle plotting\n- opencv-python: For video processing\n- Pillow: For image handling\n- tkinter: For GUI framework (usually included with Python)\n\n#### Development Dependencies (Optional)\n- pytest: For testing\n- black: For code formatting\n- isort: For import sorting\n- mypy: For type checking\n\n### Project Structure\n\n```\n.\n\u251c\u2500\u2500 lero/ # Main package directory\n\u2502 \u251c\u2500\u2500 dataset_editor/ # Core dataset editing module\n\u2502 \u251c\u2500\u2500 gui/ # GUI components module\n\u2502 \u251c\u2500\u2500 __init__.py # Package entry point\n\u2502 \u2514\u2500\u2500 __main__.py # Module entry point\n\u251c\u2500\u2500 examples/ # Example scripts and documentation\n\u251c\u2500\u2500 media/ # Screenshots and assets\n\u251c\u2500\u2500 tests/ # Test suite\n\u251c\u2500\u2500 pyproject.toml # Project configuration\n\u251c\u2500\u2500 README.md # This file\n\u2514\u2500\u2500 LICENSE # Apache 2.0 license\n```\n\n### Development Setup\n\n```bash\n# Install with all dependencies\nuv sync --group dev --group gui\n\n# Run tests\nuv run pytest\n\n# Code formatting\nuv run black .\nuv run isort .\n\n# Type checking\nuv run mypy lero/\n\n# Run the tool in development\nlero --help\n```\n\n### API Usage\n\n```python\nfrom lero import LeRobotDatasetEditor\n\n# Initialize editor\neditor = LeRobotDatasetEditor(\"/path/to/dataset\")\n\n# Get dataset information\nepisode_count = editor.count_episodes()\nepisode_info = editor.get_episode_info(5)\nsummary = editor.get_statistics()\n\n# Perform operations\neditor.delete_episode(5, dry_run=True) # Preview deletion\neditor.copy_episode_with_new_instruction(3, \"New task\")\n\n# Launch GUI programmatically\nfrom lero.gui import launch_episode_viewer\nlaunch_episode_viewer(\"/path/to/dataset\", episode_index=5)\n```\n\n## License\n\nThis project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nBug reports and feature requests are welcome via GitHub Issues. Pull requests are also welcome.\n\n### Contributing Guidelines\n\n1. Follow the existing code style (black, isort)\n2. Add type hints for new functions\n3. Include docstrings for public APIs\n4. Add tests for new functionality\n5. Update documentation as needed\n\n## Changelog\n\n### v0.3.0\n- **Major Architecture Refactor**: Modular design with separated concerns\n- **GUI Episode Viewer**: Interactive video and joint angle visualization\n- **Enhanced CLI**: Comprehensive command-line interface with validation\n- **Performance Improvements**: Optimized file operations and memory usage\n- **Robust Error Handling**: Better error messages and recovery\n- **Dataset Validation**: Integrity checking and validation tools\n- **SO-100 Robot Support**: Optimized for SO-100 6-DOF robotic arm\n- **Dry Run Enhancements**: More detailed preview capabilities\n- **Documentation**: Comprehensive documentation and examples\n\n### Previous Versions\n- **v0.2.0**: Episode deletion with automatic renumbering\n- **v0.1.0**: Basic dataset overview and episode display functionality",
"bugtrack_url": null,
"license": null,
"summary": "LERO - LeRobot dataset Operations toolkit for editing and managing LeRobot datasets",
"version": "0.3.0",
"project_urls": {
"Documentation": "https://github.com/masato-ka/lero#readme",
"Homepage": "https://github.com/masato-ka/lero",
"Issues": "https://github.com/example/masato-ka/issues",
"Repository": "https://github.com/masato-ka/lero"
},
"split_keywords": [
"dataset",
" imitation-learning",
" lerobot",
" machine-learning",
" robotics"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "bbb7a109370dec1a7f6d78a4cc871c7263ae1bcbec74b23dac56327fc75bc62c",
"md5": "70b911710dec62dd1afe94b399dd11ef",
"sha256": "45dcbc949073768395583609bd5549f4bc44a19d9906ad9e7db09ce07a28624e"
},
"downloads": -1,
"filename": "lero_core-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "70b911710dec62dd1afe94b399dd11ef",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 44940,
"upload_time": "2025-08-10T01:53:48",
"upload_time_iso_8601": "2025-08-10T01:53:48.602723Z",
"url": "https://files.pythonhosted.org/packages/bb/b7/a109370dec1a7f6d78a4cc871c7263ae1bcbec74b23dac56327fc75bc62c/lero_core-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "41a3721b3e66bb8221449fc8e6dad0ee9ac2fa8e44caa0589e0f956fe9c70543",
"md5": "be8086a8fb2f7e9da9ddc90c6d97fa77",
"sha256": "6211e048c79f051654980d693f872d57c23905307c969762a1b3997e4bb97d1d"
},
"downloads": -1,
"filename": "lero_core-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "be8086a8fb2f7e9da9ddc90c6d97fa77",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 3553676,
"upload_time": "2025-08-10T01:53:51",
"upload_time_iso_8601": "2025-08-10T01:53:51.246285Z",
"url": "https://files.pythonhosted.org/packages/41/a3/721b3e66bb8221449fc8e6dad0ee9ac2fa8e44caa0589e0f956fe9c70543/lero_core-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-10 01:53:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "masato-ka",
"github_project": "lero#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "lero-core"
}