Luxar Viewer API Documentation - v2026.9.22
    Preparing search index...

    Interface ViewerState

    Everything a remote controller needs to mirror the viewer: the dataset, the camera pose, the slice position, the rendering settings and the per-layer appearance. All values are copies — mutate freely.

    interface ViewerState {
        src: string | null;
        title: string;
        camera: CameraSnapshot;
        dimensions: EmbedderDimensions;
        rendering: RenderingSettings;
        layers: LayerSummary[];
        audio: AudioState;
        controlPanel: ControlPanelSettings | null;
    }
    Index
    src: string | null

    Dataset URL currently shown, or null before the first load.

    title: string

    What the display calls itself: the scene's authored viewer_config.title, else the ?title= parameter, else the page's own.

    Here because a remote controller cannot know it any other way — a touch panel is a separate page whose own document.title is the bundle's generic string, and putting that in front of an audience is exactly the wrong heading.

    dimensions: EmbedderDimensions
    layers: LayerSummary[]
    audio: AudioState

    The sound layer: context state, mute, gains, what is playing.

    controlPanel: ControlPanelSettings | null

    The scene's authored viewer_config.control_panel block, or null.

    null means "derive everything", which is the normal case: the touch panel builds itself from a discrete dimension's categories and needs no authoring at all. Here because the panel is a SEPARATE PAGE from the display and has no other way to read the store's attributes.