Skip to main content
LeRobot’s processor pipeline system transforms raw robot data through multiple steps. This guide shows you how to debug and inspect data at each stage of the pipeline.

Understanding the Pipeline

A processor pipeline is a sequence of ProcessorStep objects that transform data:
See lerobot/processor/pipeline.py:254 for the full DataProcessorPipeline implementation.

Step-Through Debugging

Use step_through() to inspect data after each processing step:
Example output:

Custom Hooks

Add hooks to inspect or modify data at specific pipeline stages:

Inspecting Feature Transformations

Track how data shapes and types change through the pipeline:
Example output:

Debugging Normalization

Inspect normalization statistics:

Debugging Device Placement

Verify tensors are on correct devices:

Saving Pipeline State

Save pipeline configuration and state for debugging:

Common Issues and Solutions

Issue: NaN Values After Normalization

Cause: Division by zero when std is 0 Solution: Check normalization stats:

Issue: Device Mismatch Errors

Cause: Tensors on different devices Solution: Add device processor early in pipeline:

Issue: Shape Mismatches

Cause: Step expecting different input shape Solution: Use transform_features() to verify:

Debugging Custom Processors

Add debug output to custom processor steps:

Performance Profiling

Measure time spent in each step:

API Reference

DataProcessorPipeline

See lerobot/processor/pipeline.py:254
(data) -> Iterable[EnvTransition]
Yield intermediate states after each processing step
(data) -> Any
Process data through full pipeline
(path) -> None
Save pipeline configuration and state

ProcessorStep

See lerobot/processor/pipeline.py:143
(features) -> dict
Transform feature descriptions without processing actual data
() -> dict
Return processor state (e.g., normalization stats)
(state) -> None
Load processor state from dictionary