Your robot may be learning the world flipped
We found that the most widely used LIBERO training datasets store images that are horizontally mirrored relative to the simulated scene. Here is the history, the impact, and how Manifold catches this class of bug.
Manifold is our platform for evaluating robot control models in simulation. While testing models on LIBERO, a popular benchmark of simulated robot manipulation tasks, we ran into a frustrating problem. Models that score above 90% in their authors' own test setups sometimes scored close to zero in others. The cause turned out to be an orientation bug in the most widely used LIBERO training codebases and datasets. The images in them are mirror images of the simulated scene. This appears to have been true for years, and affects anyone training robot policies on this data.
What we found
A robot policy takes camera images as input and produces motor commands. If the images at test time do not look like the images the model trained on, performance degrades silently.
Descriptions of image orientation in the LIBERO ecosystem contradict each other. The simulator's code, the training datasets, and the evaluation tools each handle orientation differently. We reached wrong conclusions ourselves for a long time, but what settled the question was zooming in on a milk carton in the training images and finding its label printed backwards.
The history
LIBERO tasks run in MuJoCo, a physics simulator. When MuJoCo renders a camera image, it returns the result through OpenGL, which stores images bottom-row-first. Since the buffer is returned as is, the output is vertically flipped: the floor is at the top and the Franka arm hangs from the ceiling. The LIBERO authors knew this, and their own code flips the rows back before visualizing rollouts as videos.
Around 2023, researchers started converting LIBERO demonstrations into training data for vision language action models, which map camera images and a text instruction to robot actions. One conversion script fixed the upside down images by rotating them 180 degrees. For a photo from a physical camera, rotation is the right instinct, because a camera can be mounted upside down but should never produce a mirror image. A 180 degree rotation will flip the image both vertically and horizontally, so the images were being secretly mirrored left to right. In reality, the correct fix was to apply a vertical flip instead.
We were not the first to notice something was off. In August 2025, a researcher asked on the OpenVLA repository why LIBERO images are rotated 180 degrees, after finding that depth data only lined up with the camera positions under a vertical flip. That issue remains unanswered today.
The clearest example that reveals the mirror is printed text on the grocery items. We rendered the scene at high resolution to check. In the published training data, the milk carton reads ʞliM.
The rotated images became the standard LIBERO training set on the Hugging Face Hub, and evaluation tools apply the same rotation at test time so that models see what they saw during training. Published results were produced this way, so anyone who wants comparable numbers has to apply the same rotation. Apply the geometrically correct vertical flip instead, and your model receives mirrored input and learns left as right.
The convention is now permanent. In June 2026, someone opened a pull request to correct the flip in LeRobot, the Hugging Face robotics library. A reviewer pointed out that the fix would invalidate existing LIBERO results, and it was closed a month later without merging. At this point, reproducing the mirror is the only practical choice.
The impact
Models already trained on this data may see the world mirrored, but may not exhibit poor generalization or performance if evaluated on LIBERO, because the bug is consistently applied during training and testing. Developers should be cautious when training includes affected LIBERO datasets. A training run that combines LIBERO data with other datasets mixes mirrored and unmirrored views of the world. Addressing this is especially important if the tasks are spatially constrained (e.g. place the object on the left side).
How Manifold fixes this
We built Manifold to run reliable robot evaluation workloads easily. The Manifold SDK offers typed contracts, compatibility checks, and adapters to bridge robot policies and simulation benchmarks. We believe the failures in this story could have been avoided if everyone just said what they offered. The dataset page fails to mention the images are rotated. The simulator documentation does not say its output is flipped. And a trained model ships with no record of the orientation of its training images.
On Manifold, both policy and simulator declare their conventions using the SDK. The benchmark declares how its camera images are oriented. The model declares the orientation it was trained on. If a conversion is needed in between, it is declared too. Before an evaluation runs, Manifold checks that the declarations line up, and refuses to run if they do not. A model trained on mirrored LIBERO data simply declares that. This clarity prevents developers from coming back to a zero score with no explanation.
If you train on LIBERO data, it is worth checking which orientation your images use. If you evaluate on Manifold, the conventions are declared on both sides and checked before anything runs.