export type ProjectionMode = 'cartesian' | 'spherical' export type CacheMode = "use" | "renew" | "ignore" export interface RenderRequest { prompt: string // whether to use video segmentation // disabled (default) // firstframe: we only analyze the first frame // allframes: we analyze all the frames segmentation: 'disabled' | 'firstframe' | 'allframes' // segmentation will only be executed if we have a non-empty list of actionnables // actionnables are names of things like "chest", "key", "tree", "chair" etc actionnables: string[] // note: this is the number of frames for Zeroscope, // which is currently configured to only output 3 seconds, so: // nbFrames=8 -> 1 sec // nbFrames=16 -> 2 sec // nbFrames=24 -> 3 sec nbFrames: number // min: 1, max: 24 nbSteps: number // min: 1, max: 50 seed: number width: number // fixed at 1024 for now height: number // fixed at 512 for now // upscaling factor // 0: no upscaling // 1: no upscaling // 2: 2x larger // 3: 3x larger // 4x: 4x larger, up to 4096x4096 (warning: a PNG of this size can be 50 Mb!) upscalingFactor: number projection: ProjectionMode cache: CacheMode wait: boolean // wait until the job is completed analyze: boolean // analyze the image to generate a caption (optional) } export interface ImageSegment { id: number box: number[] color: number[] label: string score: number } export type RenderedSceneStatus = | "pending" | "completed" | "error" export type SceneEvent = | "HoveringNothing" | "HoveringActionnable" // | "ItemIsOverActionnable" | "ClickOnNothing" | "ClickOnActionnable" export interface RenderedScene { renderId: string status: RenderedSceneStatus assetUrl: string alt: string error: string maskUrl: string segments: ImageSegment[] } export type InventoryEvent = | "Grabbing" // grabbed from the inventory, the item is flying over nothing | "HoverAnItem" // hover an item, without dragging it | "ClickOnItem" // click on an item, without dragging it | "HoveringTheScene" // the item is hover the scene, but not on an actionnable | "HoveringActionnable" // the item is hover a scene actionnable, ready to be dropped | "DroppedOnActionnable" // the item has been dropped on a scene actionnable | "HoveringAnotherItem" // the item is hover another inventory item, ready to be dropped | "DroppedOnAnotherItem" // the item has been dropped on another inventory item | "DroppedBackToInventory" // the drag & drop is cancelled, the item is back in the inventory export interface InventoryItem { name: string title: string caption: string description: string } export interface DropZoneTarget { type: "InventoryItem" | "Actionnable" name: string title?: string caption?: string description?: string } export type OnInventoryEvent = (event: InventoryEvent, item: InventoryItem, target?: { name: string title?: string description?: string }) => void