Skip to main content

Overview

The ItemNode represents a 3D object or item in the scene, such as furniture, fixtures, equipment, or decorative elements. Items reference 3D assets (GLB models) and can be positioned freely or attached to walls. Key features:
  • References 3D assets (GLB models)
  • Position, rotation, and scale transforms
  • Wall attachment support for doors, windows, etc.
  • Hierarchical item nesting (parent-child relationships)
  • Asset metadata (dimensions, attachment points, corrective transforms)

Type Signature

Source: /home/daytona/workspace/source/packages/core/src/schema/nodes/item.ts

Fields

Inherited from BaseNode

string
required
Unique item identifier.Format: item_{randomString}Example: "item_a1b2c3d4e5f6g7h8"
string
required
Always set to "item".Default: "item"
string
Optional name for the item.Example: "Office Chair", "Front Door"
string | null
required
Reference to the parent node’s ID.Examples:
  • "level_abc123" - Item placed in a level
  • "wall_xyz789" - Item attached to a wall
  • "site_def456" - Site-level item
  • "item_ghi789" - Nested item (child of another item)
Default: null
boolean
Controls item visibility.Default: true
CameraSchema
Optional camera viewpoint for the item.
any
Custom metadata for the item.Default: {}

Item Transform Fields

[number, number, number]
required
Position in the parent coordinate system.Format: [x, y, z] in metersDefault: [0, 0, 0]Examples:
  • [2.5, 0, 3.0] - Free-standing item position
  • [0, 1.2, 0.1] - Wall-mounted item position (relative to wall attachment point)
For wall-attached items, the position is relative to the attachment point on the wall.
[number, number, number]
required
Rotation in the parent coordinate system.Format: [x, y, z] in radians (Euler angles)Default: [0, 0, 0]Example: [0, Math.PI / 2, 0] (90-degree rotation around Y axis)
[number, number, number]
required
Scale multiplier applied to the asset.Format: [x, y, z] scale factorsDefault: [1, 1, 1] (no scaling)Examples:
  • [1.5, 1.5, 1.5] - 150% larger
  • [0.5, 0.5, 0.5] - 50% smaller
  • [1, 2, 1] - Stretched vertically
The effective dimensions are asset.dimensions * scale. Use getScaledDimensions() for calculations.

Wall Attachment Fields

string
ID of the wall this item is attached to.Example: "wall_abc123"Only used when asset.attachTo is "wall" or "wall-side".
number
Parametric position along the wall (0-1).Range: 0.0 to 1.0Examples:
  • 0.0 - Start of wall
  • 0.5 - Center of wall
  • 1.0 - End of wall
  • 0.25 - Quarter way along wall
Only used when wallId is specified.
'front' | 'back'
Which side of the wall the item is attached to.Values:
  • "front" - Front side of wall
  • "back" - Back side of wall
Only used for wall-attached items.

Item Hierarchy

Array<string>
required
Array of child item IDs.Default: []Example: ["item_chair1", "item_chair2", "item_vase"]Allows creating hierarchical relationships between items (e.g., chairs around a table, objects on a shelf).

Asset Fields

Asset
required
Asset metadata and model reference.Structure: See Asset Schema below

Asset Schema

The asset object contains metadata about the 3D model:
string
required
Unique asset identifier.Example: "desk-modern-001"
string
required
Asset category for organization.Examples: "furniture", "doors", "windows", "lighting", "appliances"
string
required
Display name for the asset.Example: "Modern Desk", "Standard Door"
string
required
URL to thumbnail image.Example: "/thumbnails/desk-modern-001.jpg"
string
required
URL to the 3D model file (GLB).Example: "/models/furniture/desk-modern-001.glb"
[number, number, number]
required
Base dimensions of the asset.Format: [width, height, depth] in metersDefault: [1, 1, 1]Example: [1.2, 0.75, 0.6] (desk: 1.2m wide, 0.75m tall, 0.6m deep)
'wall' | 'wall-side' | 'ceiling'
Where the item can be attached.Values:
  • "wall" - Centered on wall surface (doors, windows)
  • "wall-side" - On front or back side of wall (light switches, outlets)
  • "ceiling" - Ceiling-mounted (lights, fans)
If undefined, the item is free-standing.
Array<string>
Tags for searching and filtering.Example: ["modern", "wood", "office"]
[number, number, number]
required
Corrective position offset for the GLB model.Default: [0, 0, 0]Purpose: Normalize model origin (e.g., if model origin is not at the base)
[number, number, number]
required
Corrective rotation for the GLB model.Default: [0, 0, 0]Purpose: Normalize model orientation (e.g., if model faces wrong direction)
[number, number, number]
required
Corrective scale for the GLB model.Default: [1, 1, 1]Purpose: Normalize model to correct dimensions
{ height: number }
Surface height where objects can rest.Example: { height: 0.75 } (table surface at 75cm)Purpose: Allows automatic placement of items on surfaces (e.g., vase on table)If undefined, items cannot be placed on this item’s surface.

Example

Usage

Creating a Free-Standing Item

Creating a Wall-Mounted Item (Door)

Creating a Wall-Side Item (Light Switch)

Creating Items with Children

Scaling Items

Helper Functions

getScaledDimensions()

Returns the effective world-space dimensions after applying scale:
Source: /home/daytona/workspace/source/packages/core/src/schema/nodes/item.ts:62-66 Example:

Transform Hierarchy

Item transforms are applied in this order:
  1. Asset corrective transforms (asset.offset, asset.rotation, asset.scale)
  2. Item scale (item.scale)
  3. Item rotation (item.rotation)
  4. Item position (item.position)
  5. Parent transforms (if nested)

Use Cases

  • Furniture placement in rooms
  • Doors and windows on walls
  • Light fixtures on ceilings and walls
  • Electrical fixtures (switches, outlets)
  • Decorative objects and accessories
  • Equipment and appliances
  • Site elements (vehicles, signage)
  • Hierarchical assemblies (table with chairs, desk with lamp)