Oshun Platform · Features

The Atelier — Five Rooms of Making

A focused page within the Oshun Platform Features documentation. The full map and every sibling page live in the Features hub.

5sections5 minread2tables

On this page

The Atelier is the customer-facing generative workshop — "a small workshop attached to the reading desk" — presenting five rooms of making (image, audio, video, 3D forms, animated motion) as a single broadsheet surface in the Lilith design register. It is governed by three house rules that apply to every generative surface in V1: only from a line (every artifact begins with text the member wrote — no single-tap generation), provenance shown (every plate carries its sources, seed, and engine; synthetic voices are disclosed in the score), and slow by default (twelve specimens, four takes, one kept plate — speed exists but is never the default). The house rules are the member-facing side of the platform's generation governance: the tier and surface boundaries live in Generation Audience Tiers, the control plane in Isis Generation Control, and the provenance model in Output Gallery, Lineage, Branch, and Replay.

This page is candid about the seam placement: the room presentation data is fixture-backed, the casting seam is a real fail-closed provider call, and the member's scenes are real, owner-scoped, Postgres-backed records. Each is called out below.

Where it lives#

Route Room Source
/atelier Index — rooms + house rules; ?sceneId=<id> active draft handoff apps/oshun/web/src/app/atelier/page.tsx
/atelier/image X · Camera Obscura (image) apps/oshun/web/src/app/atelier/image/
/atelier/audio XI · Foundry of Voices (audio) apps/oshun/web/src/app/atelier/audio/
/atelier/video XII · Cinematheque (video) apps/oshun/web/src/app/atelier/video/
/atelier/forms XIII · Forms (3D) apps/oshun/web/src/app/atelier/forms/
/atelier/motion XIV · Stage of Motion (animated 3D) apps/oshun/web/src/app/atelier/motion/
/atelier/new New scene/composition entry apps/oshun/web/src/app/atelier/new/
/atelier/camera-obscura Camera Obscura deep view apps/oshun/web/src/app/atelier/camera-obscura/

All room components live in apps/oshun/web/src/components/lilith/atelier.tsx (~2,100 lines): AtelierIndex, AtelierImage, AtelierAudio, AtelierVideo, AtelierForms, AtelierMotion, plus the shared AtelierPlateActions (cast / save / refine / compare) and AtelierStepRail (the five-step workflow rail). Each component takes injected data and defaults to the fixtures in apps/oshun/web/src/lib/lilith-data/atelier-depth.ts (218 lines), whose header names the planned per-room BFF contracts (getAtelierIndex/atelier, getAtelierImage/atelier/plates/image, and so on) that will replace the fixtures.

The rooms and their data models#

Each room card on the index carries a numeral, a name, its one-line credo, a format line, and an engine tag (from AtelierIndexData.rooms):

No. Room Line Format / engine
X Camera Obscura "A line, drawn into a plate." 12-up · 4:5 · cream — Plate · v2
XI Foundry of Voices "A reading, cast — three stems." voice · bell · room — Foundry · v3
XII Cinematheque "Twelve panels, twelve shots." 24 fps · 35 mm — Cine · v1.4
XIII Forms "Plotted in three views, then turned." usd · alembic · glb — Form · v0.9
XIV Stage of Motion "A figure, set in motion." 24 joints · IK on heels — Stage · v0.6

Per-room fixtures model the working state a live backend will serve. Camera Obscura has a provenance sources rail (public-domain reference studies) feeding the contact sheet. Foundry of Voices has three stems (voice/bell/room, each with amplitude, color, density) and a four-entry voice cast in which synthetic candidates are explicitly attributed. Cinematheque has twelve time-stamped shot titles plus a render queue with per-shot state and ETA. Forms has three orthographic views (top/front/section). Stage of Motion has timeline tracks (spine, head, hands, breath — keys + curve) and take versions (archived / kept / draft).

The Camera Obscura workflow is the canonical five-step specimen model that the house rules encode: a line, writtenreference, gathered (provenance rail) → twelve specimens (contact sheet; select one) → plate kept · refined (seed lock, aspect, style) → final · saved to notebook. Kept plates are written to the member's library as an atelier-plate-kept item in the web library store (oshun.web.library.saved-items.v1), joining the save/keep model documented in Customer Curation, Notebooks, Collections, and Sharing.

The real BFF seams#

Three atelier routes exist in the BFF today (apps/oshun/bff/src/routes/domain-stubs.ts):

  • POST /v1/atelier/cast — the "cast twelve more" seam, a real fail-closed generation call over the live image provider. Without Stability credentials (OSHUN_STABILITY_API_KEY) it returns 503 provider_not_configured; with credentials it casts a real plate via the Stability SD3.5 provider (generation/image-provider-env.ts) and returns 202 with state: 'cast', the specimen id, and the image reference. intent distinguishes cast from refine. This is the same fail-loud provider pattern documented in External Models and Execution.
  • GET /v1/atelier/scenes / POST /v1/atelier/scenes — the member's authored scenes, strictly their own (owner-scoped via the guarded auth context) and Postgres-backed (v1_atelier_atelier_scene). Creation validates a ≥4-character working title (422 scene_title_too_short), is origin/CSRF-guarded, and returns 202 with the stored scene state. Anonymous callers get an honest empty list — the fabricated fixture scenes that once padded every response were removed because they presented invented personal compositions as the member's own. The /atelier?sceneId=<id> route state uses this same list to render an active draft only for a scene owned by the signed-in member; missing or unowned ids render an unavailable handoff instead of a fabricated composition.
  • GET /v1/atelier/jobs — a guarded fixture route (ATELIER_JOBS_FIXTURE); the render-queue presentation ahead of a live job system.

Honest status (V1)#

  • Real: the eight routes and their components, the specimen/keep workflow UI, the cast seam (fail-closed without credentials, real casting with them), owner-scoped scene persistence, save-to-library, and the walkthrough coverage in WALKTHROUGH/customer/11-atelier/ (runtime-walked, including 390 px no-overflow and room-grid coverage).
  • Fixture-backed: the room presentation data (sources rails, stems, shot lists, views, takes) defaults to atelier-depth.ts fixtures; the planned getAtelier* BFF contracts named in that file's header are the replacement path. The components accept injected data, so the swap is a data-source change, not a rewrite.
  • Not claimed: live audio/video/3D/motion generation from the room surfaces. The only live generative call is image casting; the other rooms' engines are presentation ahead of provider wiring, gated by the same tier and control-plane rules as every generative surface (Isis Generation Control).