---
path: /studio/aja/input-video-support
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/input-video-support/page.tsx
status: walked
last_walked:
  '2026-07-04 focused real-dev-infra Playwright route walk — anonymous redirect,
  Aja-admin catalog, exact chunk plans through the real BFF, validation,
  malformed/transport failures, loading/403/503/malformed catalog states,
  pending controls, route-map + quick-action affordances, mobile/touch/axe, and
  direct BFF auth/schema gates. Evidence:
  WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §284.'
---

# Studio Aja · Input Video Support

## Purpose

Admin lane console for planning video chunking. Its operations lane wires the
`@aja/video-chunking` `VideoSplitter` via `/v1/admin/aja/input-video-support`:
plan how an input video is split into overlapping processing chunks for the
distributed motion pipeline — frame ranges, time ranges, seam overlap, priority
— and report whether the plan covers the full range with no gaps.

## Entry points

- **Direct URL / bookmark** — `/studio/aja/input-video-support`; metadata sets
  `alternates.canonical`
- **Linked from `/studio`** Domain-bridge studios section (Aja sub-area)
- **Quick action** — "Open Yemaya Documentation Playground workspace"
  (`/studio/yemaya/documentation-playground`)

## Layout regions

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

- **Workspace** `StudioAjaInputVideoSupportWorkspace` — `<h1>` "Aja Input Video
  Support Workspace" + summary (`data-aja-input-video-support-summary`), then
  the **Chunk Planning Operations Lane** (`<h2 data-aja-ivs-lane-heading>`)
- **Route Map panel** (`data-aja-input-video-support-route-map`, `<h2>`) — 5
  entries from `STUDIO_AJA_INPUT_VIDEO_SUPPORT_ROUTE_MAP`
- **Quick-action lane** (`data-aja-input-video-support-quick-actions`) —
  intentional cross-domain documentation adjacency plus Studio index:
  `/studio/yemaya/documentation-playground`, `/studio`

## States

- [x] **Loading** — `data-aja-ivs-loading` "Loading video-chunking engine…"
      while `GET /v1/admin/aja/input-video-support` is in flight
- [x] **Unauthorized (gated)** — `data-aja-ivs-unauthorized` on 401/403; admin
      scope message ("Aja workspace scope required to plan video chunking.")
- [x] **Error** — `data-aja-ivs-error` on non-OK / malformed / network failure
- [x] **Ready (form)** — `data-aja-ivs-form` once the catalog loads (with the
      engine summary `data-aja-ivs-engine-summary`), strict catalog counts, and
      chunking/blending strategy spans
- [x] **Result** — `data-aja-ivs-result` (`-headline` chunk count + valid/gaps,
      `-chunks` list per chunk, stable chunk row attributes) after a successful
      POST; validation/planner error in `data-aja-ivs-plan-error`
- [ ] **Offline** — SSR shell; lane error state when `fetch` unavailable
- [ ] **Standalone PWA** — desktop layout; `quickAction` anchors wrap
- [x] **Empty** — N/A; catalog is constant

## Interactions

### Chunk Planning Operations Lane

- [x] **Total frames** (`<input data-aja-ivs-frames type="number">`) — positive
      integer
- [x] **FPS** (`<input data-aja-ivs-fps type="number">`) — positive number
- [x] **Chunk seconds** (`<input data-aja-ivs-target type="number">`) — optional
      `targetDurationSeconds`
- [x] **Overlap seconds** (`<input data-aja-ivs-overlap type="number">`) —
      optional `overlapDurationSeconds`
- [x] **"Plan chunks"** (`<button data-aja-ivs-submit>`) — POSTs
      `{ totalFrames, fps, targetDurationSeconds?, overlapDurationSeconds? }` to
      `/v1/admin/aja/input-video-support/plan`; locked with
      `data-aja-ivs-submit-state="planning"` while the real request is pending

### Route Map panel

- [x] **5 entries** (`<article data-aja-input-video-support-route-map-entry>`)
      per `path` + `purpose` — non-interactive, exact path ordering asserted

### Quick-action lane

- [x] **"Open Yemaya Documentation Playground workspace"** →
      `/studio/yemaya/documentation-playground`
- [x] **"Back to Studio workspace index"** → `/studio`

## Data & contracts

- **Reads**: `GET /v1/admin/aja/input-video-support` (catalog: `summary`,
  `chunkingStrategies`, `blendingStrategies`, `defaultConfig`) on mount,
  `cache: 'no-store'`, `buildBffAuthHeaders()`; the client now fails closed
  unless all 5 chunking strategies and all 6 blending strategies are present
- **Writes**: `POST /v1/admin/aja/input-video-support/plan`
- **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

## Verification evidence

- `apps/oshun/web/e2e/studio-aja-input-video-support.spec.ts` runs against the
  real Next Studio shell and local BFF, forwarding browser bearer auth rather
  than mocking the chunking contract.
- The spec covers anonymous redirect, Aja-admin catalog load, exact seeded
  900-frame / edited 1500-frame chunk plans, local validation with no POST,
  malformed result, transport failure, loading / 503 / malformed / non-admin
  states, pending form locking, mobile no-overflow + 44px controls, scoped axe,
  and direct BFF 401/403/400/200 gates.

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling routes (quick action crosses domains):
  `/studio/yemaya/documentation-playground`
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaInputVideoSupportWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaInputVideoSupportRouteMap.ts`

## Open questions / known gaps

- [x] The single quick action crosses into the Yemaya domain
      (documentation-playground) rather than a sibling Aja route — confirmed as
      the intentional documentation adjacency by the 2026-07-04 route-level
      Playwright coverage, which asserts the exact href alongside the Studio
      index action
