A composable system for packaging heterogeneous media (video, audio, images, vectors) into hierarchical containers and presenting them as adaptive panels across screens, AR, or spatial contexts.
Concepts
Two primitives — a storage container and a visual panel — enable deep nesting, time/space aware delivery, and multi‑modal presentation.
Primitives
Three roles work together: containers store and nest media, panels render layouts from containers, and the organizer coordinates scheduling and distribution across panels.
Aspect | Container (NMC) | Panel (NMP) | Organizer |
---|---|---|---|
Primary role | Store & nest media + metadata | Lay out & render media regions | Schedule & route NMC→NMP |
Key objects | tracks[], children[] | regions[], children[] | schedules[], assignments[], policies[] |
Inputs | Encoders, asset pipelines | Container refs, layout templates | Catalog of NMC/NMP, time/geo/context |
Outputs | Addressable media bundles | Composed frames/audio/overlays | Resolved playlists, per‑panel timelines |
Conflict handling | N/A (asset level) | Layout reflow & fallbacks | Priority rules, trims, re‑slots |
Security | Entitlements on assets/children | Variant exposure per device/role | SoI/zone gating, audit, approvals |
Coordinator
Schedule containers into panels, resolve conflicts, and stream per‑panel playlists with audit.
type Assignment = { id: string; panelId: string; containerId: string; slot: { start: string; end: string }; priority?: number; soi?: 'Private'|'Social'|'Public' }
type Schedule = { id: string; name: string; assignments: Assignment[] }
type PlaylistItem = { at: string; panelId: string; render: { panel: string; container: string } }
POST /v1/organizer/schedules { name, assignments:[...] }
POST /v1/organizer/resolve { scheduleId }
→ { playlist: PlaylistItem[], conflicts: [] }
GET /v1/organizer/playlist?panelId=...&at=...
Architecture
Server array and encoders feed NMCs; clients render NMPs with validation, policy, and context gating.
Scheduling
Drag‑and‑drop timelines, nested channels, conflict resolution, and live/on‑demand switching.
I/O
Visual, aural, and tactile channels can be orchestrated; location and identity cues tailor which panel variant is shown.
Interface
A minimal shape for containers, panels, schedules, and policy checks.
type MediaTrack = { id: string; kind: 'video'|'audio'|'image'|'polygon'; src: string; meta?: Record<string, any> }
type Container = { id: string; name: string; tracks: MediaTrack[]; children?: Container[]; meta?: Record<string, any> }
type PanelRegion = { id: string; role: 'video'|'audio'|'image'|'overlay'|'subpanel'; layout: { x: number; y: number; w: number; h: number }; childPanelId?: string }
type Panel = { id: string; name: string; regions: PanelRegion[]; children?: Panel[]; policy?: string[] }
type ScheduleSlot = { start: string; end: string; containerId: string; panelId: string; priority?: number }
POST /v1/nmc { name, tracks:[...], children:[...] }
POST /v1/nmp { name, regions:[...], children:[...] }
POST /v1/schedules { slots:[...] }
POST /v1/compose { containerId, panelId, at: ISO8601 }
→ { layout, resolvedAssets, conflicts:[], outputs:['visual','aural','tactile'] }
Governance
Least‑privilege access to assets; every composition decision is auditable.
Build with Nested Media Panels
See authoring, scheduling, and multi‑modal delivery in action.