Note
This is a Hugging Face dataset. For large datasets, ensure huggingface_hub>=1.1.3 to avoid rate limits. Learn more in the Hugging Face integration docs.
Dataset Card for Xense Earbud Case Insertion (834 episodes)#

This is a FiftyOne dataset with 834 samples. Each sample is one teleoperated episode.
Installation#
pip install -U fiftyone
Usage#
Load from the Hub#
import fiftyone as fo
from fiftyone.utils.huggingface import load_from_hub
dataset = load_from_hub("Voxel51/xense-earbud-case-834ep")
session = fo.launch_app(dataset)
Download a snapshot and load it locally#
import fiftyone as fo
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="Voxel51/xense-earbud-case-834ep",
repo_type="dataset",
local_dir="xense-earbud-case-834ep",
)
dataset = fo.Dataset.from_dir(
dataset_dir="xense-earbud-case-834ep",
dataset_type=fo.types.LeRobotDataset,
name="xense_earbud_case",
)
session = fo.launch_app(dataset)
Dataset Details#
Dataset Description#
834 teleoperated episodes (1,213,518 frames, 30 fps) on robot type bi_flexiv_rizon4_rt. The task is βPick up each earbud case from the left stands, insert the matching earbuds, close the lid, and place the case in the box.β Each episode has three RGB camera streams, four tactile video streams (left and right sensor on each side), and 20-D TCP state and action. The source is a LeRobot v3.0 repo recorded with the Xense LeRobot fork.
Shared by:
Xenseon Hugging FaceLanguage(s): en
License: apache-2.0
Dataset Sources#
Repository: https://huggingface.co/datasets/Xense/earbud_case_insertion_teleop_0515 (code: https://github.com/Vertax42/lerobot-xense)
Dataset Structure#
Topology. media_type: multimodal, 834 samples, one per episode, 30 fps, 968-2,342 frames (32.3-78.1 s), 1,213,518 frames total. Samples hold a media_reference to the per-frame parquet data and 7 video streams.
Field |
FiftyOne type |
Description |
|---|---|---|
|
|
Pointers into |
|
|
Episode index (0-833) |
|
|
The single task instruction |
|
|
All task strings of the episode |
|
|
Frames in the episode |
|
|
Episode duration in seconds |
|
|
|
|
|
30 |
Data behind media_reference (per-frame, from meta/info.json):
Feature |
Shape |
Description |
|---|---|---|
|
(20,) |
Bimanual TCP: |
|
(20,) |
Same 20 names and layout as |
|
480x640x3 |
RGB cameras (H.264 yuv420p) |
|
400x700x3 |
Four tactile video streams (H.264 yuv420p) |
Label types and why. The importer produces episode-level samples with a media_reference; numeric streams (state, action) are read through the viewer and are not stored as FiftyOne label fields. The source has a single task, so task is constant. No custom fields were added, so the FiftyOne dataset matches what the LeRobot export contains.
dataset.info. lerobot entry with format, format_major, episode_count, imported_episode_count, skipped_episodes (empty).
Parsing decisions.
All episodes imported from the full repo (6.9 GB). No source file was modified, and no transcoding or metadata repair was needed.
All 7 video streams were imported; no modality was excluded. All streams are standard H.264 yuv420p.
The source does not state the tactile sensor model or the physical meaning of the tactile images.
Dataset Creation#
Source Data#
Data Collection and Processing#
The source card states only that it was created using LeRobot. The citation names the Xense LeRobot fork, LeRobot-Xense: LeRobot with Xense Tactile Robotics Support.
Annotations#
Annotation process#
A single task string is stored in meta/tasks.parquet.
Citation#
BibTeX:
@misc{vertax2026lerobotxense,
author = {vertax42 and Xense Robotics Team},
title = {LeRobot-Xense: LeRobot with Xense Tactile Robotics Support},
howpublished = {\url{https://github.com/Vertax42/lerobot-xense}},
year = {2026}
}