# Hand keypoints JSONL

One JSON object per line (one per video frame).

## Fields

| Field | Type | Description |
|-------|------|-------------|
| `video` | string | Source MP4 filename |
| `frame_idx` | int | Zero-based frame index |
| `timestamp_sec` | float | `frame_idx / fps` |
| `fps` | float | Source video FPS |
| `frame_width` | int | Native width (e.g. 1920) |
| `frame_height` | int | Native height (e.g. 1080) |
| `hand_count` | int | 0, 1, or 2 |
| `hands` | array | Per-hand landmarks |

## Hand object

```json
{
  "hand": "left",
  "landmarks": [
    {"x": 0.52, "y": 0.61, "z": -0.01}
  ]
}
```

- `x`, `y`, `z`: normalized image coordinates (0–1 origin top-left; z is relative depth)
- 21 landmarks per hand (standard hand skeleton index 0–20)
- Label: **estimated_2d** — not metric 3D ground truth

## Files

- `sample_XX_*_hand_keypoints.jsonl` — per-video exports
- `hand_keypoints_summary.json` — aggregate detection rates
