BastienATOS/mini-reachy-animation
Reachy Mini Animation Dataset Multi-view renders of 85 emotional animations performed by the Reachy Mini robot, paired with the full robot joint state for every single frame. Source of the animations. The emotional animations rendered here come from the official pollen-robotics/reachy-mini-emotions-library dataset by Pollen Robotics. This dataset re-renders those emotions from 12 camera angles (with 3 background variants) and pairs every frame with the robot's joint state.… See the full description on the dataset page: https://huggingface.co/datasets/BastienATOS/mini-reachy-animation.
Reachy Mini Animation Dataset
Multi-view renders of 85 emotional animations performed by the Reachy Mini robot, paired with the full robot joint state for every single frame.
Source of the animations. The emotional animations rendered here come from the official **pollen-robotics/reachy-mini-emotions-library** dataset by Pollen Robotics. This dataset re-renders those emotions from 12 camera angles (with 3 background variants) and pairs every frame with the robot's joint state.
Each animation (e.g. amazed1, curious1, sad2) is rendered from 12 camera angles, and every frame comes in 3 background variants (normal, black, white) together with the exact articular state of the robot at that instant. This makes the dataset suitable for imitation / behavior learning, emotion or pose recognition, multi-view perception, novel-view synthesis, and robot-animation generation.
- Rows: 309,888 (one row = one
frame × camera angle) - Emotions / animations: 85
- Camera angles: 12
- Image variants per frame: 3 (normal / black bg / white bg)
- Image resolution: 1280 × 720, RGBA (PNG)
- Video renders: 6,120 clips (mp4 + gif), in
videos/
Dataset structure (viewer)
The Dataset Viewer is powered by the Parquet files under data/. Each row has the following columns:
The frame count varies per animation (from ~170 to ~3000 frames), so the number of rows per emotion varies accordingly.
Camera angles (12)
45_back_left 45_back_right 45_front_left 45_front_right
back bottom close_up front
left right spherical_45_30 topEmotions / animations (85)
amazed1 anxiety1 attentive1 attentive2 boredom1
boredom2 calming1 cheerful1 come1 confused1
contempt1 curious1 dance1 dance2 dance3
disgusted1 displeased1 displeased2 downcast1 dying1
electric1 enthusiastic1 enthusiastic2 exhausted1 fear1
frustrated1 furious1 go_away1 grateful1 helpful1
helpful2 impatient1 impatient2 incomprehensible2 indifferent1
inquiring1 inquiring2 inquiring3 irritated1 irritated2
laughing1 laughing2 lonely1 lost1 loving1
mini-deep-sleep no1 no_excited1 no_sad1 oops1
oops2 proud1 proud2 proud3 rage1
relief1 relief2 reprimand1 reprimand2 reprimand3
resigned1 sad1 sad2 scared1 serenity1
shy1 sleep1 success1 success2 surprised1
surprised2 thoughtful1 thoughtful2 tired1 toc-toc-toc
uncertain1 uncomfortable1 understanding1 understanding2 waiting
wake-mini-up welcoming1 welcoming2 yes1 yes_sad1Repository layout
mini-reachy-animation/
├── README.md
├── data/ # Parquet shards -> power the Dataset Viewer
│ ├── train-00000-of-00085.parquet # one shard per animation
│ ├── train-00001-of-00085.parquet
│ └── ... # 85 shards, images + joint states embedded
└── videos/ # Rendered clips (not in the table view)
└── <emotion>/
└── <angle>/
├── <emotion>_<angle>_24fps.mp4
├── <emotion>_<angle>_30fps.mp4
├── <emotion>_<angle>_60fps.mp4
├── <emotion>_<angle>_144fps.mp4
├── <emotion>_<angle>_24fps.gif
└── <emotion>_<angle>_50fps.gifThedata/Parquet files contain everything needed for training (frames + joint states) and are what the Dataset Viewer renders. Thevideos/folder holds the same animations as ready-to-play clips at several frame rates, browsable from the Files tab and downloadable on demand — they are intentionally kept out of the tabular view.
Usage
Load the tabular dataset
from datasets import load_dataset
ds = load_dataset("BastienATOS/mini-reachy-animation", split="train")
print(ds)
row = ds[0]
print(row["emotion"], row["angle"], row["frame"], row["timestamp"])
row["image"].show() # PIL.Image (normal background)
row["image_black"] # same frame, black background
print(len(row["head_joints"]), "head joints")Stream without downloading everything
ds = load_dataset("BastienATOS/mini-reachy-animation", split="train", streaming=True)
for row in ds:
print(row["emotion"], row["angle"], row["frame"])
breakFilter one animation / one viewpoint
front = ds.filter(lambda r: r["emotion"] == "curious1" and r["angle"] == "front")Download a rendered video clip
from huggingface_hub import hf_hub_download
path = hf_hub_download(
repo_id="BastienATOS/mini-reachy-animation",
repo_type="dataset",
filename="videos/amazed1/front/amazed1_front_60fps.mp4",
)
print(path)Data description
Every animation is a scripted emotional behavior for the Reachy Mini head. For each frame the robot's articular state is recorded:
- `head_joints` — the 7 actuated head joints (rad).
- `passive_joints` — 21 passive / linkage joint angles resulting from the mechanism.
- `antennas` — left/right antenna positions, a key expressive channel of Reachy Mini.
- `head_pose` — the head's 6-DoF pose as a flattened 4×4 homogeneous matrix.
- `timestamp` — the time of the frame within the animation.
The same frame (identified by emotion + frame) is available from all 12 camera angles and in the 3 background variants, enabling multi-view and background-robust training.
Source & acknowledgements
The emotional animations are sourced from the **pollen-robotics/reachy-mini-emotions-library** dataset by Pollen Robotics. This dataset contributes the multi-view rendering (12 camera angles × 3 background variants) and the per-frame robot joint states. All credit for the original emotion library goes to Pollen Robotics; please also cite their dataset if you use this one.
License
Released under the MIT license.
