# Studio project reference

> Every object kind of a Disko Studio project with its properties, and the Studio's limits.

A Studio project is a set of objects. Each has an id, a kind, a place (its
parent and order) and properties. The Inspector edits these properties;
MCP agents and project files see them as listed here. Properties typed
_expression_ hold formulas (see [Variables](/studio/variables)); ids are
strings.

This page is generated from the Studio's project schema.

## Limits

| Limit | Value |
| --- | --- |
| Project document size | 4 MiB (4,194,304 bytes) |
| Objects per scene | 2000 |
| Event rows | 1000 |
| Scripts | 100 |
| Script size | 64 KiB (65,536 bytes) |
| Asset size | 8 MiB (8,388,608 bytes) |
| Projects per account | 50 |
| Storage per account | 500 MiB (524,288,000 bytes) |

## Object kinds

### settings

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `description` | string |
| `icon` | string or none |
| `version` | string |
| `scene` | string or none |

### scene

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `layers` | list of name |
| `groups` | list of name |

### disc

Lives under: `scene`, `prefab`.

| Property | Type |
| --- | --- |
| `name` | name |
| `position` | expression |
| `radius` | expression |
| `mass` | expression or none |
| `damping` | expression |
| `gravity` | expression |
| `velocity` | expression |
| `restitution` | expression |
| `groups` | list of name |
| `accepted` | list of name or none |
| `sensor` | boolean |
| `tall` | expression or none |
| `layer` | name or none |
| `appearance` | { fill, stroke, strokeWidth, opacity } or none |
| `avatar` | { text } or { asset } or none |
| `rotation` | expression |
| `angularVelocity` | expression |
| `audience` | expression |
| `air` | { height, velocity, gravity, bounce } or none |
| `lookOffset` | expression |
| `lookScale` | expression |
| `lookOpacity` | expression |

### wall

Lives under: `scene`, `prefab`.

| Property | Type |
| --- | --- |
| `name` | name |
| `position` | expression |
| `points` | list of { position, curve } |
| `closed` | boolean |
| `bias` | expression |
| `restitution` | expression |
| `groups` | list of name |
| `accepted` | list of name or none |
| `sensor` | boolean |
| `tall` | expression or none |
| `appearance` | { stroke, strokeWidth } or none |
| `audience` | expression |

### joint

Lives under: `scene`, `prefab`.

| Property | Type |
| --- | --- |
| `name` | name |
| `first` | string |
| `second` | string |
| `distance` | { exact } or { min, max } |
| `strength` | expression or none |

### crossing

Lives under: `scene`, `prefab`.

| Property | Type |
| --- | --- |
| `name` | name |
| `start` | expression |
| `end` | expression |
| `groups` | list of name |
| `accepted` | list of name or none |

### visual

Lives under: `scene`, `prefab`, `visual`, `action`.

| Property | Type |
| --- | --- |
| `name` | name |
| `anchor` | { body, offset } or { position } |
| `shape` | { type, radius } or { type, width, height, corner } or { type, points } or { type, points, arrowStart, arrowEnd } or { type, radius, start, end } or { type, text, size, sizing } or { type, asset, width, height } or { type } |
| `rotation` | expression |
| `scale` | expression |
| `opacity` | expression |
| `fill` | expression or none |
| `stroke` | expression or none |
| `strokeWidth` | expression |
| `dash` | list of number |
| `layer` | name or none |
| `order` | "behind-body" \\| "above-body" or none |
| `audience` | expression |

### camera

Lives under: `scene`.

| Property | Type |
| --- | --- |
| `name` | name |
| `center` | expression |
| `width` | expression or none |
| `height` | expression or none |
| `audience` | expression |

### prefab

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `primary` | string or none |
| `perPlayer` | { enabled, spawn, schema, acceleration, damping } |

### instance

Lives under: `scene`.

| Property | Type |
| --- | --- |
| `name` | name |
| `prefab` | string |
| `position` | expression |
| `overrides` | record |

### asset

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `hash` | string |
| `type` | "image" \\| "sound" |
| `size` | integer |
| `width` | integer or none |
| `height` | integer or none |
| `file` | string |

### enumeration

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `values` | list of { key, name, colour } |

### variable

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `scope` | "game" \\| "player" \\| "object" |
| `type` | { t } or { t, of } |
| `default` | expression |
| `timer` | { runsWhile } or none |
| `reset` | boolean |

### expression

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `params` | list of { name, type } |
| `result` | { t } or { t, of } |
| `body` | expression |

### custom-event

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `params` | list of { name, type } |

### event-group

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `enabled` | boolean |
| `comment` | string |

### event-row

Lives under: `root`, `event-group`, `event-row`.

| Property | Type |
| --- | --- |
| `trigger` | { item, slots } or none |
| `sub` | { type } or { type, over, as } or { type, seconds } or none |
| `enabled` | boolean |
| `comment` | string |

### condition

Lives under: `event-row`, `condition`.

| Property | Type |
| --- | --- |
| `item` | string |
| `slots` | record |
| `not` | boolean |

### action

Lives under: `event-row`.

| Property | Type |
| --- | --- |
| `item` | string |
| `slots` | record |

### action-schema

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |

### action-def

Lives under: `action-schema`.

| Property | Type |
| --- | --- |
| `name` | name |
| `label` | string |
| `behaviour` | { type, reach, strength, fullStrength, charge, lift, aim, arc, recoil, acceleration, damping } or { type, reach } or { type, strength, fullStrength, charge, lift } or none |

### role

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | string |
| `label` | string |
| `default` | "everyone" \\| "nobody" \\| "owner" |

### script

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | string |
| `kind` | "action" \\| "expression" |
| `result` | { t } or { t, of } or none |
| `code` | string |

### ui-screen

Lives under: `root`.

| Property | Type |
| --- | --- |
| `screen` | "menu" \\| "hud" |

### ui-node

Lives under: `ui-screen`, `ui-node`.

| Property | Type |
| --- | --- |
| `name` | name or none |
| `primitive` | "box" \\| "stack" \\| "row" \\| "grid" \\| "overlay" \\| "scroll" \\| "spacer" \\| "text" \\| "richtext" \\| "image" \\| "icon" \\| "shape" \\| "button" \\| "link" \\| "form" \\| "input" \\| "area" \\| "toggle" \\| "slider" \\| "select" \\| "option" \\| "progress" \\| "activity" \\| "status" \\| "alert" \\| "list" \\| "item" \\| "table" \\| "header" \\| "body" \\| "footer" \\| "cell" \\| "modal" \\| "popover" \\| "tabs" \\| "tab" \\| "panel" \\| "disclosure" \\| "flag" \\| "connection" \\| "playerName" |
| `options` | record |
| `style` | { preset, declarations } |
| `repeat` | { over, as, where } or none |
| `on` | { activate, submit, input, change, commit, drop } |
| `drag` | { kind, value } or none |
| `drop` | { accept, value } or none |
| `audience` | { to, outside } or none |

### ui-style

Lives under: `root`.

| Property | Type |
| --- | --- |
| `name` | name |
| `declarations` | record |

### ui-theme

Lives under: `root`.

| Property | Type |
| --- | --- |
| `tokens` | record |
