---
path: /studio/aja/multi-view-reconstruction
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/multi-view-reconstruction/page.tsx
status: walked
last_walked:
  '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data
  (2xx), console/page-errors, expected content, screenshot verified; live
  screen-reader, touch, offline, and telemetry-delivery checks pending a manual
  AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; body
  re-derived 2026-06-03 from current source (lane-console architecture)'
---

# Studio Aja · Multi-View Reconstruction

## Purpose

Admin lane console for scoring reconstructed poses. Its operations lane wires
`@aja/motion-validation` `calculateNMPJPE` via
`/v1/admin/aja/multi-view-reconstruction`: score a reconstructed pose against
ground truth with Normalized MPJPE — the metric removes the single global scale
ambiguity inherent to multi-view reconstruction before measuring per-joint
euclidean error, so a correctly-shaped reconstruction at the wrong scale scores
zero. Returns mean/std/median/min/max and per-joint error.

## Entry points

- **Direct URL / bookmark** — `/studio/aja/multi-view-reconstruction`; metadata
  sets `alternates.canonical`
- **Breadcrumb** — Studio → Aja Depth Sensing → Multi-View Reconstruction
- **Linked from `/studio`** Domain-bridge studios section (Aja sub-area)
- **Quick actions** — Depth Sensing, Depth Analysis, Human Mesh Recovery

## Layout regions

`page.tsx` renders inside `<ShellLayout active="studio">`:

- **Breadcrumb panel** (`data-aja-multi-view-reconstruction-breadcrumbs`) — nav
  Studio / Aja Depth Sensing / Multi-View Reconstruction (current)
- **Workspace** `StudioAjaMultiViewReconstructionWorkspace` — `<h1>` "Aja
  Multi-View Reconstruction Workspace" + summary
  (`data-aja-multi-view-reconstruction-summary`), a **Capability Summary** panel
  (`data-aja-multi-view-reconstruction-capability-summary`, 4 cards), then the
  **Multi-View Reconstruction Operations Lane**
  (`data-aja-multi-view-reconstruction-operations-lane`)
- **Route Map panel** (`data-aja-multi-view-reconstruction-route-map`, `<h2>`) —
  6 entries from `STUDIO_AJA_MULTI_VIEW_RECONSTRUCTION_ROUTE_MAP`
- **Quick-action lane** — `quickAction` links: depth-sensing, depth-analysis,
  human-mesh-recovery, `/studio`

## States

- [ ] **Loading** — `data-aja-mvr-loading` "Loading reconstruction-accuracy
      metric…" while `GET /v1/admin/aja/multi-view-reconstruction` is in flight
- [ ] **Unauthorized (gated)** — `data-aja-mvr-unauthorized` on 401/403; admin
      scope message ("Aja workspace scope required to score reconstruction
      accuracy.")
- [ ] **Error** — `data-aja-mvr-error` on non-OK / malformed / network failure
- [ ] **Ready (form)** — `data-aja-mvr-form` once the catalog loads (with the
      metric summary `data-aja-mvr-metric-summary`)
- [ ] **Result** — `data-aja-mvr-result` (`-mean` scale-normalized error +
      frames, `-stats`, `-per-joint`) after a successful POST; validation error
      in `data-aja-mvr-assess-error`
- [ ] **Offline** — SSR shell; lane error state when `fetch` unavailable
- [ ] **Standalone PWA** — desktop layout; `quickAction` anchors wrap
- [x] **Empty** — N/A; capability cards + route map are constant

## Interactions

### Multi-View Reconstruction Operations Lane

- [ ] **Reconstructed pose** (`<textarea data-aja-mvr-prediction>`, label
      "prediction motion json") — JSON `{ joints, frames }`
- [ ] **Ground-truth pose** (`<textarea data-aja-mvr-ground-truth>`, label
      "ground truth motion json") — JSON `{ joints, frames }`
- [ ] **"Compute N-MPJPE"** (`<button data-aja-mvr-submit>`) — POSTs
      `{ prediction, groundTruth }` to
      `/v1/admin/aja/multi-view-reconstruction/assess`

### Capability Summary panel

- [ ] **4 cards** (`data-aja-multi-view-reconstruction-capability=<id>`):
      `reconstruction-control-plane`, `diagnostics-and-trace-observability`,
      `security-permission-audit-controls`, `api-parity-and-contract-assurance`
      — non-interactive

### Route Map panel

- [ ] **6 entries** (`<article>` per `path` + `purpose`) — non-interactive

### Quick-action lane

- [ ] **"Open Aja Depth Sensing workspace"** → `/studio/aja/depth-sensing`
- [ ] **"Open Aja Depth Analysis workspace"** → `/studio/aja/depth-analysis`
- [ ] **"Open Aja Human Mesh Recovery workspace"** → `/studio/aja/human-mesh-recovery`
- [ ] **"Back to Studio workspace index"** → `/studio`

## Data & contracts

- **Reads**: `GET /v1/admin/aja/multi-view-reconstruction` (catalog: `metric`,
  `summary`, `statistics`, `options`) on mount, `cache: 'no-store'`,
  `buildBffAuthHeaders()`
- **Writes**: `POST /v1/admin/aja/multi-view-reconstruction/assess`
- **Realtime**: none
- **Caching**: client fetch on mount (no-store); SSR shell
- **Auth/role check**: BFF endpoints admin-scoped, fail-closed (401/403 →
  unauthorized render); route gated signed-in + studio via the proxy

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling routes:
  [`./studio-aja-depth-sensing.md`](./studio-aja-depth-sensing.md),
  [`./studio-aja-depth-analysis.md`](./studio-aja-depth-analysis.md),
  [`./studio-aja-human-mesh-recovery.md`](./studio-aja-human-mesh-recovery.md)
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaMultiViewReconstructionWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaMultiViewReconstructionRouteMap.ts`

## Open questions / known gaps

- [ ] The 4 Capability Summary cards are descriptive copy only — the single live
      affordance is the N-MPJPE scoring lane
