<- More blog posts
// Research20 min read

MacroHands: 3D hands and camera pose from egocentric video

MacroHands, our 3D hand tracking and camera pose models for egocentric video, in mono and stereo, against every open-source baseline we tested.

Macrodata Labs

  • Robotics data
  • Hand tracking
Left hand: not detectedRight hand: not detected
Left hand: not detectedRight hand: not detected
Occlusion · Source: NVIDIA PhysicalAI-Human-1M0:00 / 0:00
MacroHands 3D hand tracking on real egocentric video. The hand moves a bunch of flowers and is partly hidden behind the petals.

TL;DR

  • We introduce MacroHands: our state-of-the-art model family for 3D hands and camera path from egocentric video, with monocular (mono) and stereo variants
  • MacroHands-Mono beats every open-source baseline we tested, including all stereo baselines (32.2 mm on SHOW3D [1] vs 55.9 for HaWoR [2], and 46.4 for the best stereo baseline)
  • MacroHands-Stereo brings further improvements over Mono, with 2.5× lower error (13.1 vs 32.2 mm on SHOW3D, mostly due to better depth estimates)
  • MacroHands handles partial and even brief full occlusions (on clips where the hands are often partly hidden it still finds 80% of hands vs at most 59% for baselines)
  • MacroHands distinguishes wearer from other hands (0.2% of detections land on someone else's hands, vs ~24% for HaWoR), works on footage with gloves and in other common real-world scenarios where most models fall short
  • Our camera pose is also state of the art, even more so when IMU is available (~4× less drift than DROID-SLAM [3] on Monado [4] and Aria Gen 2 [5])
  • Send us a small sample of your footage (mono or stereo) and we'll run MacroHands on it for free, so your team can compare it with your current hand tracking.

The rise of egocentric video

Bigger and more capable robotics models keep getting released, trained on ever larger amounts of data. In our latest blogpost, we went deep into egocentric data, a cheaper and more scalable way than robot teleoperation to get training data, using simple head-strapped cameras.

Since then, interest in egocentric data has kept growing, and early results from NVIDIA (EgoScale, Zheng et al., 2026, earlier this year) and, more recently, Dyna (Dyna‑2, Dyna Robotics, 2026, pretrained on over a million hours of egocentric video) show real promise (Figure). On the commercial side, several companies have announced large run rates selling this kind of data.

EgoScale
0%25%50%75%100%1k2k4k10k20kHuman video pretraining (hours)Robot task completionAverage over tasks: 30% at 1k hours30%Average over tasks: 45% at 2k hours45%Average over tasks: 48% at 4k hours48%Average over tasks: 57% at 10k hours57%Average over tasks: 71% at 20k hours71%
Dyna-2
0%25%50%75%100%1k10k100k1MHuman video pretraining (hours)Task scoreMean of 14 tasks: 20% at 1k hours20%Mean of 14 tasks: 28% at 10k hours28%Mean of 14 tasks: 45% at 100k hours45%Mean of 14 tasks: 53% at 1M hours53%
Robot performance vs hours of human video pretraining. Left: EgoScale average task completion (⁠Zheng et al., 2026⁠). Right: Dyna-2 mean score over 14 tasks, or pick a single task (⁠Dyna Robotics, 2026⁠).

But egocentric data has no actions by default. In our previous blogpost, "Turning Egocentric Video into Robot Actions", we discussed how researchers typically rely on hand tracking and retargeting to make it training-ready. We had also looked at the existing open-source hand tracking options, and how brittle they were on real-world egocentric footage.

Unfortunately, most of the 3D hand tracking models and pipelines available today still suffer from the same issues we had found: partial occlusions make footage unusable, hands become unreliable when operators wear gloves or work in crowded settings, or even when bare feet are visible (which many models mistake for hands). Overall, the estimates, especially depth (the distance from the camera), are far from good enough, despite the "sub-mm precision" claims from some vendors.1

We spent the last few months tackling this problem, and today we are announcing MacroHands, our family of 3D hand tracking and camera pose models for egocentric video. MacroHands comes in two variants: Mono, which works on footage from any single camera, and Stereo, which uses both views of a stereo rig.

MacroHands
3D hand tracking and camera pose for egocentric video, with Mono and Stereo variants
Error on SHOW3D
Average distance between each predicted hand joint and its true 3D position, in camera space with no alignment, on SHOW3D (Quest 3, 32 people), which no compared model trained on. Depth mistakes here become hand positions that are centimeters off in the actions a robot learns from.
32.2 mmMono
vs HaWoR 55.9 mm
Stereo
The same SHOW3D error when MacroHands uses both front cameras of the headset instead of one. Almost all of the gain is depth, how far the hand is from the camera; hand shape error stays level (8.5 vs 8.4 mm PA-MPJPE).
13.1 mmerror
vs Mono 32.2 mm
Hands partly hidden
Share of the wearer's hands a model finds on clips where the hands are often partly hidden, for example behind a held tool. Every missed hand is a gap in the recording, so less of the footage can be used for training.
80%found
vs baselines ≤59%
Other people's hands
Share of reported hands that land on someone else in view, on our hand-labelled benchmark of egocentric clips. A track that jumps onto another person puts actions into the training data that the wearer never made.
0.2%wrong detections
vs HaWoR 23.6%
Camera drift
How far the estimated camera path wanders from the true one over a whole recording (ATE), with stereo and the headset IMU: 5.7 vs 23.6 cm on Monado and 18.9 vs 74.0 cm on Aria Gen 2. Low drift is needed to rebuild the scene and to place the hands in it.
~4×less
vs DROID-SLAM
Hands in the world
Error of the hand motion over the next second, placed with each method's own camera path and compared with no alignment (Action MPJPE), on HOT3D with stereo. One second is the length of the action chunks a robot policy learns from.
13.6 mm1 s error
vs HaWoR 65.9 mm
MacroHands at a glance. All numbers come from the benchmarks below.

MacroHands‑Mono beats every open-source baseline we tested, including the stereo ones on SHOW3D, and Stereo cuts the error by another 2.5×. Both keep tracking through occlusions and stick to the wearer's hands. They also estimate the camera pose, meaning where the head-mounted camera is and where it points in every frame, so the hands can be placed in the world as the wearer moves. Our camera pose beats leading open-source SLAM (Simultaneous Localization And Mapping) systems, and improves further when an IMU (Inertial Measurement Unit: the accelerometer and gyroscope built into most headsets and phones) is available.

Benchmarking 3D hands and camera pose

The first step in tackling a problem like this is establishing a benchmark with accurate ground truth labels. Unfortunately, for 3D hand positions and camera pose, getting ground truth labels after the fact is next to impossible, even for a human. A person can roughly place 2D keypoints, but 3D depth is extremely tricky. Occluded hands are another big issue, and so is estimating how the camera moved. You can see for yourself how hard this is by guessing them in Figure and Figure below.

So the ground truth has to be captured while the footage is recorded. For hands, datasets use motion capture: ARCTIC (⁠Fan et al., 2023⁠) and HOT3D (⁠Banerjee et al., 2025⁠) track small markers on the hands with a studio camera system, and SHOW3D (⁠Rim et al., 2026⁠) uses a backpack rig of outward-facing cameras, synchronized with the headset, and no markers. For camera pose, the reference comes from the device's own closed-loop tracking (Aria Gen 2, Meta Reality Labs Research, 2025) or from an external tracking system (SteamVR Lighthouse in Monado, de Mayo et al., 2025). All of this needs a studio or special hardware, which is why only a handful of such datasets exist.

Left: ARCTIC, with markers on the hands (⁠Fan et al., 2023⁠). Right: SHOW3D's backpack camera rig, no hand markers (⁠Rim et al., 2026⁠).

Evaluating 3D hands

Each hand is represented by 21 keypoints in 3D: the wrist and four joints along each finger, in the camera's own coordinates.

We used the following datasets as benchmarks:

DatasetDeviceSize
SHOW3D (⁠Rim et al., 2026⁠)Quest 3 stereo93 scenes, 32 people, 0.89 h
HOT3D (⁠Banerjee et al., 2025⁠)Quest 3 stereo6 sequences, 6 people, 0.21 h
ARCTIC s05 (⁠Fan et al., 2023⁠)egocentric camera (mono)34 recordings, 0.24 h
3D hand benchmarks. No model in the comparison trained on SHOW3D, our main benchmark. Baselines trained on HOT3D or ARCTIC are marked * in the results.

We focus on two kinds of metrics: the mean error in millimeters between predicted and ground-truth joint positions (MPJPE), and recall of full hand detections. Most papers report MPJPE only after aligning the prediction to the ground truth: at the wrist (root-relative MPJPE), or also in rotation and scale (PA-MPJPE). While we still report PA‑MPJPE, as it isolates hand shape quality, our main metric is the error with no alignment at all, which we call Cam-MPJPE, since real footage has no ground truth to align to. Alignment also hides the hardest part, predicting depth (see Figure).

Example 1 of 3 · ARCTIC
Egocentric ARCTIC frame, the right wrist is marked and labelled.

How far is the wrist? Frames and true distances from ARCTIC, SHOW3D, and HOT3D.

Metrics:

  • Cam-MPJPE (mm): the average distance between predicted and true joints in camera space, with no alignment, reported as mean / median / 90th percentile.
  • Recall: the share of ground-truth hands the model finds. A hand counts as found when the model labels it correctly as left or right, and the box around its predicted joints (projected into the image, no padding) overlaps the box around the true joints with IoU > 0.5.
  • PA-MPJPE (mm): the joint error after aligning each predicted hand's rotation, translation, and scale to the ground truth, so it measures hand shape only.
Extended benchmark details+
  • Full sequences at 30 fps (SHOW3D is released at 60 fps; we use every second frame to match the usual camera frame rate).
  • A hand is scored when ≥12 of its joints are inside the main camera image; all its labeled joints count, off-screen ones included. This rule only looks at the main camera, so stereo models, which also see the second camera, are scored on exactly the same hands as mono models.
  • GT quality: frames failing the dataset's own QA (HOT3D qa_pass, ARCTIC validity filter) are not scored. SHOW3D: frames where the released headset pose is frozen (exact repeat of the previous frame) misplace the hand labels; scenes with >5% such frames are dropped (3) and the other 207 frames are not scored (see Full sampling and scoring details below).
  • Baselines use their public code and weights with the settings their authors recommend, with no retraining or tuning on these benchmarks, and get the same input frames as MacroHands.
Full sampling and scoring details+

Benchmark sampling. Every listed sequence is used in full, at 30 fps.

BenchmarkSequencesCameras and images
HOT3D6 Quest 3 sequences with public ground truth, one per participant: P0002_45904c71, P0003_90feb35f, P0010_5edabbe9, P0013_b6ee6ae4, P0017_1a07e9e7, P0018_2188e5dc. 22,608 frames at 30 fps.Quest 3 front tracking cameras 1201-1 and 1201-2, each fisheye rectified to one shared upright 512×640 pinhole camera. Left = scored camera.
SHOW3D96 scenes, 3 per subject for all 32 subjects of the release with hand pose (train split, the only split with released hand pose). Per subject, scenes are taken in md5(scene_id) order, skipping any activity already taken, so the set covers 96 different activities. 3 scenes are dropped and 207 more frames are not scored because the release's headset pose is frozen there (an exact repeat of the previous frame), which misplaces the hand labels: 93 scenes, 95,857 frames, 60 fps release used at 30 fps. The excluded scenes and frames are published with the sequence lists.Quest 3 headset0 and headset1, the released undistorted 1024×1280 portrait images. headset0 = scored camera.
ARCTIC s05All 34 recordings of the validation subject s05. 25,917 frames at 30 fps.Egocentric camera 0, undistorted with its calibration and resized to 672×480.

Ground truth.

  • 21 joints per hand (wrist, then 4 per finger). SHOW3D labels 20 (no thumb base joint).
  • A joint counts as labeled when it is at least 5 cm in front of the camera and passes the dataset's own quality flags: HOT3D qa_pass and hand_pose_available; SHOW3D annotation confidence above 0.5 and a tracked (not synthesized) headset pose; ARCTIC frames in EgoForce's hand-present list with the visible_hand flag.

3D hand scoring.

  • All predictions and ground truth are in the scored camera's frame, in millimeters.
  • Left/right comes from the model's own label, with no re-matching.
  • Errors are pooled over all scored joints of all output hands: no per-hand or per-sequence averaging. Hands that are not output only lower recall.
  • PA-MPJPE aligns each predicted hand to ground truth with the best similarity transform (scale, rotation, translation), for hands with at least 4 scored joints.

Evaluating camera pose

For every frame we also need the camera pose: the camera's rotation and translation in a fixed world frame (the camera-to-world transform). It is what places the hands from every frame in one shared 3D space, so the motion of the hands can be told apart from the motion of the head.

We used the following datasets as benchmarks:

DatasetDeviceSize
HOT3D (⁠Banerjee et al., 2025⁠)Quest 3 stereo (no IMU)6 sequences, 0.21 h
Monado Index (⁠de Mayo et al., 2025⁠)Valve Index stereo + IMU11 recordings, 0.99 h
Aria Gen 2 Pilot (⁠Meta Reality Labs Research, 2025⁠)Aria Gen 2 stereo + IMU12 recordings, 1.10 h
Camera pose benchmarks. None of their recordings were used to train our models.

We compare the predicted camera path with the reference path. The same caveat as for hands applies: SLAM papers usually report the absolute trajectory error (ATE), the camera position error over the whole recording, only after fitting the predicted path to the reference with a rotation, translation, and scale. Our metrics fit no scale (ATE after one rigid alignment, RPE 1 s, and scale error), because getting the size of the motion right is the hardest part with a single camera (see Figure).

Example 1 of 5 · Head turn
First HOT3D headset frame, A.
Second HOT3D headset frame, B, a moment later.

How far did the head turn or move? True motion from the recorded headset pose.

Metrics:

  • RPE 1 s (cm / °): the error of the camera's motion over every 1-second step, translation and rotation, with no alignment.
  • Scale error (%): for every 1-second step where the camera moved more than 5 cm, we divide the predicted distance traveled by the true one. The scale error is how far the median of these ratios is from 1 (e.g. 10% if the camera's motion comes out 10% too long or too short).
  • ATE (cm): the camera position error (RMSE) over the whole recording, after one rigid alignment of the whole path with rotation and translation only, no scale (often called ATE-SE3).
Extended benchmark details+
  • Full recordings, capped at 30 fps, the frame rate of most egocentric footage: HOT3D at 30 fps and Aria Gen 2 at 15 fps (their native rates), Monado at 27 fps (every second frame of its native 54 fps). Every method gets the same frames.
  • Baselines use their public code and weights with the settings their authors recommend, with no retraining or tuning on these benchmarks, and get the same frames and calibrated intrinsics as MacroHands.
Full sampling and scoring details+

Benchmark sampling.

BenchmarkSequencesCameras and images
HOT3D6 Quest 3 sequences with public ground truth, one per participant: P0002_45904c71, P0003_90feb35f, P0010_5edabbe9, P0013_b6ee6ae4, P0017_1a07e9e7, P0018_2188e5dc. 22,608 frames at 30 fps.Quest 3 front tracking cameras 1201-1 and 1201-2, each fisheye rectified to one shared upright 512×640 pinhole camera.
Monado IndexMIPT02, MIPT03, MIPP06, MIPP01, MIPB03, MIPB01, MIO13, MIO12, MIO01, MIO04, MIO02 (VR games and hand-heavy sessions). Left out: calibration recordings, recordings under 11 s, and one 37-minute session. Used at 27 fps (half the native 54 fps).Valve Index stereo fisheye pair (13.4 cm baseline), undistorted. Ground truth: SteamVR Lighthouse tracking.
Aria Gen 2 Pilotwalk_0, walk_1, clean_0, cook_0, eat_0–eat_3, play_0–play_3: complete recordings with a closed-loop trajectory, longest first within each activity, taken in turn across activities. 15 fps.Aria Gen 2 front stereo pair, rectified. Reference: Aria MPS closed-loop trajectory.

Camera pose scoring.

  • Scored at the ground-truth timestamps. A prediction is interpolated there when two predicted frames are at most 0.2 s apart, and counts as missing otherwise.
  • We score each recording separately and report the average over all recordings, weighted by length.

MacroHands‑Mono

MacroHands‑Mono needs only one camera: from ordinary video, it predicts the 21 joints of each of the wearer's hands directly in 3D, in the camera's own coordinates.

On the benchmarks (Figure), MacroHands‑Mono is the most accurate model on two of the three datasets and finds nearly every hand on all of them. The clearest case is SHOW3D, which none of the models compared here has trained on: our joints land 32.2 mm from the truth on average, against 55.9 mm for HaWoR, the best open-source baseline, which also misses about one hand in five. We fall slightly behind only on ARCTIC, where ACE‑Ego‑Hand, trained on ARCTIC itself, reaches 18.7 mm to our 19.4 mm. MacroHands has never seen an ARCTIC frame, not even from its training split.

Dataset

Quest 3, 93 scenes, 32 people, 143.9k hands. No model in the comparison trained on SHOW3D.

medianmeanp90
medianmeanp90
Cam-MPJPE (mm)The average distance between predicted and true joints in camera space, with no alignment. Shown as mean, median and 90th percentile.
lower is better
32.2
[2]
55.9
[10]
61.5
[11]
63.9
[12]
65.8
[13]
86.3
[14]
136.9
[15]
root-relative only

3D hand accuracy from one camera. MacroHands in teal, open-source baselines in grey.

Ruler test

The only 3D hand benchmark where a baseline has lower error than ours is ARCTIC (18.7 vs 19.4 mm), and that baseline, ACE‑Ego‑Hand, trained on ARCTIC's training split. This is a small example of a bigger problem: benchmark contamination. Early on, when we tested hand-tracking models for our own use, we kept seeing models post great numbers on the benchmarks they had trained on, then lose depth entirely on footage from a different device. We think the cause is scarce data: there are only a handful of labeled 3D hand datasets, so most models train on the few that can be used as benchmarks. The cameras, people, and rooms in a benchmark's training split match its test split, so a model only has to learn the typical hand sizes and distances of those recordings to score well.

Testing for this properly means recording your own held-out ground-truth dataset in a motion-capture studio, which takes time and money. But the gap is often so large that a far simpler test shows it. Take a phone with known camera intrinsics and a tape measure, and turn off video stabilization (since it crops and shifts the image, invalidating the intrinsics). Then record yourself placing your wrist at 10, 20, 30, 40, and 50 cm along the tape (50 cm is a stretch, but doable), run the model with the phone's intrinsics, and compare its wrist depth with the tape.

Your measurement will only be good to 1–3 cm, but that should be plenty. Many of the other hand-tracking models we tried were not off by a few centimeters, but by 10 to 20 cm, and the error grew the further the hand moved from the camera. If you are benchmarking a hand-tracking model, we think this is the first test you should run.

Ruler test · long sweep
010203040506070809005101520Time (s)Predicted distance (cm)10 cm20 cm30 cm40 cm50 cmMacroHandsOther models

0.0 sMacroHandsno hand

Our ruler test: one phone recording (Pixel 10a, stabilization off), every model given the phone's true intrinsics (Perceptron Egocentric 1.0 takes none and uses its own estimate). The horizontal steps are the hand's position on the tape. MacroHands is in teal, the other models in grey. At 10 cm the hand barely fits in the frame, and four of the six baselines return nothing there.

Finding the right hands

Beyond depth, the second problem we kept running into on real egocentric data was how well models find and track the right hands in the first place. Unlike benchmark videos, real footage is full of things that trip them up: other people's hands reaching into the frame, the wearer's bare feet (which can look a lot like hands), the wearer's own hands disappearing behind the tools they hold, and work gloves, which fully occlude the hands.

The benchmark. To measure how well our model and others handle these cases, we built an internal benchmark of egocentric clips that none of the models trained on. Every frame is hand-labeled with a bounding box for each of the wearer's hands, marked left or right. We also label the hands of other people in view (about a third of all labeled hands), and a model that reports one of them as the wearer's is marked wrong. Clips are also tagged by situation: feet in view, occlusion, gloves, and no wearer hands.

Scoring. We score every model the same way, from the 3D hands it outputs. We project its 21 joints into the image and take their outline, padded by 15% (our labeled boxes are hand-drawn and a bit larger), as the box. A detection is correct when its score is above 0.5 and its box overlaps the labeled wearer hand by at least 50% (IoU ≥ 0.5). AP50, the average precision at that overlap, combines precision and recall over all confidence thresholds; higher is better.

Everything else is an error. A box that is not correct goes to the labeled hand it overlaps most, if that overlap is at least 20%: the correct hand (the box is only partly on it), the wearer's other hand (left/right swapped), or someone else's hand. A box that overlaps no labeled hand by 20% is a false detection. A wearer hand with no correct box is missed. The chart below shows both sides: what happened to each of the wearer's hands, and where each box the model reports lands.

Situation
Correct detectionBox partly on the handLeft/right swappedMissedSomeone else's handFalse detection

All clips. MacroHands puts 0.2% of its boxes on someone else's hand; HaWoR, HaMeR, and WiLoR each put 23.6% there.

AP50 (%)The average precision at an overlap of at least 50% (IoU ≥ 0.5) with the labelled wearer hand. It combines precision and recall over all confidence thresholds.
75.8%
[2]
43.3%
[12]
34.4%
[11]
29.6%
[13]
26.8%
[16]
26.4%
Detection on the hand-labeled benchmark. Left: what happened to each labeled wearer hand. Right: where each box the model reports lands.

MacroHands finds 83% of the wearer's hands at 84% precision. The strongest baseline, HaWoR, finds 51% at 66%.

The gap is widest when someone else is in the shot. On clips with long stretches of no wearer hands, often with another person's hands in view, the right answer is to output nothing. There, none of MacroHands' boxes land on another person's labeled hands, while HaWoR, HaMeR, and WiLoR put 89% of their boxes there.

The baselines also lose the wearer's hands exactly where the footage gets hard. With gloves on, the best of them finds 48% (MacroHands: 79%). Under occlusion, 59% (MacroHands: 80%).

We can't release this benchmark because it contains internal data, but Figure shows examples from open-source videos.

Examples
  • Left hand
  • Right hand
  • Wrist
Hard detections: every model's keypoints0:00 / 0:00
Gloved hands sort a pile of metal parts while the camera swings around. MacroHands keeps both hands throughout, MINT puts both hands on the right one, HaWoR and WiLoR miss the right hand in most frames, and Perceptron Egocentric 1.0 and ACE-Ego-Hand add boxes off the hands early on.
Egocentric-10K (build.ai, Apache-2.0), factory 6, worker 4. Every model gets the same undistorted video and calibrated camera.

MacroHands‑Stereo

Everything so far used one camera. While MacroHands‑Mono is fairly accurate, it can still get depth wrong. Stereo cameras help with depth by adding a second, slightly shifted view of the same scene (see Figure). We trained a variant of our model specifically to ingest stereo footage: MacroHands-Stereo. MacroHands‑Stereo's error drops from 32.2 mm to 13.1 mm on SHOW3D, two and a half times lower, and from 12.2 mm to 10.6 mm on HOT3D. The hardest frames improve just as much: the 90th-percentile error falls from 65.0 mm to 24.7 mm on SHOW3D, and from 23.8 mm to 19.2 mm on HOT3D.

Two cameras, one hand
Wrist shift 61 px (9.6% of the width) → 34 cm awayMeta Quest 3, HOT3D
Two cameras see the hand from slightly different positions, just like our two eyes. The closer the hand, the more it shifts between the two images, and that shift tells the model how far away it is.

Only two of the benchmarks originally used for mono have stereo footage: SHOW3D and HOT3D, both recorded with the two front cameras of a Quest 3. ARCTIC's egocentric view comes from a single head-mounted camera, so it appears only in the mono results. Mono models are scored on the left camera, on the same hands. Surprisingly, the other models built for stereo do little better than the mono baselines. UmeTrack (⁠Han et al., 2022⁠), Meta's multi-view hand tracker and the best of them, is at 46.4 mm on SHOW3D against 55.9 mm for HaWoR with one camera, and at 46.2 mm on HOT3D against 48.4 mm for HaWoR*.

Dataset

Quest 3, both cameras, 93 scenes, 32 people, 143.9k hands. No model in the comparison trained on SHOW3D. Mono models see the left camera and are scored on the same hands.

medianmeanp90
medianmeanp90
Cam-MPJPE (mm)The average distance between predicted and true joints in camera space, with no alignment. Shown as mean, median and 90th percentile.
lower is better
13.1
32.2
[17]
46.4
[18]
54.6
[2]
55.9
[10]
61.5
[11]
63.9
[12]
65.8
[13]
86.3
[19]
100.0
[14]
136.9
[20]
187.5
[21]
root-relative only

3D hand accuracy from two cameras. MacroHands in teal, open-source baselines in grey. UmeTrack (⁠Han et al., 2022⁠) has no hand detector, so its crops come from WiLoR's detector boxes.

The gain is almost entirely depth. After Procrustes alignment (PA‑MPJPE), the two models are level on SHOW3D, 8.5 mm with two cameras and 8.4 mm with one. What a second camera adds is how far away the hand is, which a single view can only infer from appearance. So if you're choosing a capture rig, we recommend stereo. If you already paid for large amounts of mono footage, MacroHands‑Mono still beats every stereo baseline we ran.

Camera pose

As we showed in our previous post, knowing how the hands move relative to the camera is not enough. Robot training and scene reconstruction both need to know where the camera itself is going, so we trained our model to also estimate camera movement.

The camera path matters at two scales: over a whole recording it must not drift, so the scene can be rebuilt or turned into a simulation, and over a single second it must be precise, since that is the horizon over which policies are typically trained to predict action chunks. We designed our pipelines for both uses and report the error at each scale. Monado and Aria Gen 2 also record an IMU (motion sensor), and MacroHands uses it when available. On HOT3D, which has no IMU, every method uses only the cameras and MacroHands still leads (0.96 vs 1.22 cm RPE in stereo).

Headset

Quest 3, 6 sequences, 0.21 h.

ATE (cm)The camera position error (RMSE) over the whole recording, after one rigid alignment of the whole path (no scale).
lower is better
1.2
1.9
[3]
2.4
[22]
3.0
[3]
16.5
[23]
25.5
[24]
8.5
Camera pose on each headset. MacroHands in teal, open-source baselines in grey; lower is better everywhere.

As with the hands, a single camera struggles most with depth: from the images alone, a 10 cm step and a 100 cm step can look the same. DROID‑SLAM with one camera gets the size of the motion wrong by 66% to over 800%, and even ViPE, which estimates metric depth, is 10–12% off. MacroHands‑Mono stays at 5–8%, and over a full recording it drifts less than DROID‑SLAM does with two cameras, on all three headsets. With stereo, MacroHands drifts two to four times less than DROID‑SLAM stereo.

Putting it together: hands in the world

Finally, with both components in place, we can measure what a robot policy actually learns from: how the wearer's hands move through the world, seen from where the wearer was looking when the motion started.

We measure it with Action MPJPE, the metric from our previous post. For every frame, we take the hand motion over the following chunk, place the predicted joints with the method's own camera path and the true joints with the true one, both relative to the camera at that first frame, and compare them joint by joint with no alignment. A hand that looks right in the image but is carried along by a drifting or wrongly scaled camera still counts as wrong. We report 1 s chunks, as in the previous post, and 2 s chunks (Figure).

We leave SHOW3D out here, because its released camera poses miss large head turns in 25 of its 93 scenes. Its hand labels stay accurate in those scenes, but its world camera path does not.

Dataset

Quest 3, 6 sequences, stereo and mono.

Next 1 sNext 2 s
Next 1 sNext 2 s
Action MPJPE (mm)The hand motion over the next 1 s or 2 s, placed with each method's own camera path and compared joint by joint with the truth, with no alignment. A drifting or wrongly scaled camera counts as wrong.
lower is better
13.6
15.2
15.9
18.6
[2]
65.9
69.3
[10]
107.5
109.4

*Trained on these sequences.

Hand motion in the world over the next 1 s and 2 s.

Over a one-second chunk, MacroHands keeps the hands within 13.6 mm of the truth on HOT3D with stereo and 15.9 mm with a single camera. HaWoR, with its own SLAM, is at 65.9 mm, four to five times further off. On ARCTIC, MacroHands‑Mono reaches 26.9 mm against HaWoR's 67.8 mm.

Conclusion

Most open-source hand trackers fall short on real egocentric footage, and each gap shows up further down the pipeline. Missed hands lower the yield of your data, throwing out valuable recordings, while hands that jump onto other people or feet put nonsense actions into training and destabilize it. Imprecise hand shapes make fine manipulation harder to learn, and depth errors of 5 cm or more on real footage teach a robot to reach for the wrong place.

We believe the quality of the data, and of the targets extracted from it, is the main lever for better robot policies. That is why we built MacroHands: over the one-second chunks a policy learns from, its hand trajectories are four to five times closer to the truth than the best open-source pipeline we tested on HOT3D, and more than twice as close on ARCTIC. Both variants are available today, and the easiest way to try them is on your own data:

Send us a small sample of your footage, mono or stereo, and we'll annotate it with MacroHands for free, so your team can compare the results with your current hand tracking.