V1 Web PWA · Surface walkthrough

Studio Aja · Skeleton-to-Skeleton Retargeting

A per-surface walkthrough of the V1 Web PWA studio surface: layout, states, interactions, data, and cross-references.

walked
8sections3 minread

On this page

Context. surface studio · domain aja · route /studio/aja/skeleton-to-skeleton-retargeting · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/aja/skeleton-to-skeleton-retargeting/page.tsx

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)

Purpose#

Admin lane console for the real @aja/skeleton-mapping autoMatchSkeletons solver. The operator picks a source and a target skeleton template from the catalog; the lane solves the joint-level correspondence between them (name, hierarchy, position, and semantic scoring) with per-joint and overall confidence — the foundation of motion retargeting.

Entry points#

  • Direct URL / bookmark/studio/aja/skeleton-to-skeleton-retargeting; metadata canonical to this path
  • Studio nav — Domain-bridge studios section of /studio
  • Sibling quick-actions on this page: Face Tracking, Back to Studio (no breadcrumb panel on this route)
  • Operator surfacing — see ../../studio-overview.md

Layout regions#

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

  • Workspace (<StudioAjaSkeletonToSkeletonRetargetingWorkspace />, archetype: LEAF):
    • <h1> (WorkspaceHeading) "Aja Skeleton-to-Skeleton Retargeting Workspace"
    • Summary <p data-aja-s2s-summary> — auto-solve the joint-level correspondence between two skeleton templates
    • The auto-match form (two template selects) + the match result block
  • Route Map panel (data-aja-skeleton-to-skeleton-retargeting-route-map): <h2>Route Map</h2> listing 5 entries from STUDIO_AJA_SKELETON_TO_SKELETON_RETARGETING_ROUTE_MAP (primary, scenes, exports, revisions, governance)
  • Quick-action panel: two Link.quickAction anchors — Face Tracking, Back to Studio workspace index

States#

  • Loading — GETs the templates catalog on mount; renders <p data-aja-s2s-loading> "Loading skeleton templates…"
  • Unauthorized — 401/403 renders data-aja-s2s-unauthorized ("Access restricted." + admin-scope message, default "Aja workspace scope required to view skeleton retargeting.")
  • Error — non-OK / malformed / unreachable renders data-aja-s2s-error ("Could not load skeleton retargeting." + reason)
  • Ready (form) — success renders the data-aja-s2s-match-form
  • Result — a successful POST renders data-aja-s2s-result with data-aja-s2s-confidence (overall confidence), data-aja-s2s-matched (matched / identity / unmatched counts), and per-mapping data-aja-s2s-mapping rows (source → target + confidence)
  • Validation / match error — missing source/target or POST failure renders data-aja-s2s-match-error
  • Empty / Standalone PWA / offline — N/A beyond the above; shell SSR, lane is a client fetch on mount

Interactions#

Workspace lane (data-aja-s2s-match-form)#

  • Source skeleton (data-aja-s2s-field-source, select, label "Source skeleton") — options from the catalog's templates (name + joint count)
  • Target skeleton (data-aja-s2s-field-target, select, label "Target skeleton") — options from the catalog's templates
  • "Auto-match" (data-aja-s2s-match-submit, submit) — fires POST /v1/admin/aja/skeleton-to-skeleton-retargeting/auto-match with { sourceTemplateId, targetTemplateId }

Route Map panel#

  • Route entries (5 × <article>) — non-interactive path+purpose

Quick-action panel#

  • "Open Aja Face Tracking workspace"/studio/aja/face-tracking
  • "Back to Studio workspace index"/studio

Data & contracts#

  • Reads: GET /v1/admin/aja/skeleton-to-skeleton-retargeting on mount — catalog { templates: { id, name, jointCount }[] }
  • Writes: POST /v1/admin/aja/skeleton-to-skeleton-retargeting/auto-match{ sourceTemplateId, targetTemplateId }{ retarget } (jointMappingCount, identityMappingCount, matchedCount, unmatchedSourceCount, unmatchedTargetCount, overallConfidence, warnings, mappings)
  • Realtime: none
  • Caching: client fetch on mount with cache: 'no-store' and buildBffAuthHeaders(); SSR shell only
  • Auth/role check: BFF endpoints admin-scoped + fail-closed (401/403 → unauthorized render); route behind the signed-in + studio proxy gate

Cross-references#

Open questions / known gaps#

  • Route-map sub-routes are advertised but have no page.tsx in V1