Context. surface studio · domain yemaya · route /studio/yemaya/ai-content-generation · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/yemaya/ai-content-generation/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 that wires the real @yemaya/tts-integration deterministic
estimators: given synthesis text plus audio parameters and a quality tier, it
estimates the billable character count (SSML stripped), the PCM audio size in
bytes, and the minimum voice-clone training samples that quality tier requires —
the figures a producer needs before kicking off a text-to-speech synthesis job.
Entry points#
- Studio index quick-actions (one of the Yemaya bridge entries).
- No breadcrumb panel on this page.
- Quick-action to
/studio/yemaya/multi-agent-orchestration; reachable inbound from sibling pages that link here. - Direct URL / bookmark (signed-in + studio entitlement).
Layout regions#
page.tsx renders ShellLayout active="studio" and these panels in order:
- Workspace panel (
StudioYemayaAiContentGenerationWorkspace,data-yemaya-ai-content-generation-workspace):<h1>"Yemaya AI Content Generation Workspace" (WorkspaceHeading).- Summary
<p data-yemaya-ai-content-generation-summary>: "Estimate a text-to-speech synthesis job — billable character count (SSML stripped), PCM audio size and the voice-clone training samples a quality tier requires — before synthesis." - Estimate lane — loading / unauthorized / error / ready-form / result (see States).
- Route Map panel (
data-yemaya-ai-content-generation-route-map):<h2>"Route Map" listing the five entries fromSTUDIO_YEMAYA_AI_CONTENT_GENERATION_ROUTE_MAP. - Quick-action panel: two
quickActionlinks.
States#
- Loading — before the catalog GET resolves,
data-yemaya-acg-loading("Loading estimators…"). - Unauthorized — on 401/403 the lane renders
data-yemaya-acg-unauthorized("Access restricted.") with the admin-scope reason ("Yemaya workspace scope required to view AI content generation."). - Error — non-OK / malformed catalog renders
data-yemaya-acg-error. - Ready-form — catalog loaded: the estimate form renders with the quality
<select>populated fromcatalog.qualityLevels. - Result — a 200 estimate renders
data-yemaya-acg-resultwithdata-yemaya-acg-chars,data-yemaya-acg-size,data-yemaya-acg-samples. - Validation error — non-finite/negative audio params, or a non-200 POST,
render
data-yemaya-acg-estimate-error.
Interactions#
Estimate lane#
<form data-yemaya-acg-estimate-form>:
- Text (SSML allowed) —
<textarea data-yemaya-acg-field-text>(aria-label "synthesis text"). - Duration (ms) —
<input data-yemaya-acg-field-duration>. - Sample rate —
<input data-yemaya-acg-field-rate>. - Channels —
<input data-yemaya-acg-field-channels>. - Bit depth —
<input data-yemaya-acg-field-bitdepth>. - Quality tier —
<select data-yemaya-acg-field-quality>fromcatalog.qualityLevels. - "Estimate job" submit (
data-yemaya-acg-estimate-submit) — validates the audio params are non-negative finite numbers, then POSTs{ text, durationMs, sampleRate, channels, bitDepth, quality }to the estimate endpoint.
Route map#
data-yemaya-ai-content-generation-route-map — five non-interactive entries:
-
/studio/yemaya/ai-content-generation -
/studio/yemaya/ai-content-generation/scenes/[sceneId] -
/studio/yemaya/ai-content-generation/exports/[exportId] -
/studio/yemaya/ai-content-generation/revisions/[revisionId] -
/studio/yemaya/ai-content-generation/governance/[policyId]
Quick actions#
- "Open Yemaya Multi-Agent Orchestration workspace" →
/studio/yemaya/multi-agent-orchestration. - "Back to Studio workspace index" →
/studio.
Data & contracts#
- Reads:
GET /v1/admin/yemaya/ai-content-generation(catalog;qualityLevels) on mount withbuildBffAuthHeaders(),cache: 'no-store'. - Writes:
POST /v1/admin/yemaya/ai-content-generation/estimate→{ estimate: { characterCount, audioSizeBytes, minCloneSamplesNeeded } }. - Realtime: None.
- Caching: client
fetchon mount, no-store; aborted on unmount. - Auth/role check: admin-scoped, fail-closed (401/403 → unauthorized state); route additionally requires signed-in + studio via the proxy gate.
Cross-references#
- Workspace source:
apps/oshun/web/src/components/studio/StudioYemayaAiContentGenerationWorkspace.tsx - Route map source:
apps/oshun/web/src/components/studio/StudioYemayaAiContentGenerationRouteMap.ts - Page source:
apps/oshun/web/src/app/studio/yemaya/ai-content-generation/page.tsx - Sibling:
studio-yemaya-multi-agent-orchestration.md - Studio overview:
studio-overview.md - Feature spec:
V1/features.md
Open questions / known gaps#
- The estimator is a pre-synthesis sizing/cost tool only; it does not enqueue a TTS job. Confirm whether a synthesis-launch path is planned for this route or stays in the customer-facing narration journey.
- Route-map children (
scenes/exports/revisions/governance) are a sitemap contract; verify whether the dynamic pages are implemented yet.