Props
Objects on the stage: the prop asset kind, placing one on a mark or in a hand, binding it to a variable, letting the reader click it, and letting them inspect it.
A prop is a small 3D object that exists on the stage: a lantern on a mark, a letter in a character's hand. Two stage directions handle props, prop and inspect, and a choice option can name one as its click target. That is the whole system. There is no inventory grid, no dragging, no combining; a prop is set dressing the script can hand around and the reader can look at closely.
The asset
Upload a .glb with the Upload kind set to prop in the Assets dock. It is validated like any other model kind, and nothing else is parsed out of it: no rig, no tier, no clip catalog. The model renders at its native scale, so a prop that was modelled two metres tall arrives two metres tall. Size it in your tool, not here.
Anything that is not a prop asset (an avatar, an environment, a clip) is refused where a prop is expected, at compile time, as INVALID_PROP_ASSET.
Placing one
prop place puts the asset somewhere. at is one of the five marks or held by a cast member.
stage prop place lantern at right
stage prop place letter held by MiraOn a mark, the prop stands on the floor at that position, the same five positions cast stand on. A prop and a character can share a mark; the prop is not moved out of the way.
Held, the prop attaches to the character's right hand. On a VRM it follows the hand bone through every animation, so a held letter waves when the arm waves. On a humanoid GLB it follows the hand bone when the rig names one; on a static body, or a rig whose hand cannot be found, it sits at a fixed hand height beside the group. A held prop travels with a move.
Placing an asset that is already placed moves it. Placing the same asset in two places is not possible; one asset id is one object on stage.
prop remove takes it away.
stage prop remove letterProps are per-scene state. Every scene entry clears them, exactly like light and weather, so a scene that needs the lantern places it again.
A prop that fails to load renders as a grey stand-in crate rather than nothing, so a broken url is visible in Preview instead of silently absent.
Binding a prop to a variable
The asset slot accepts a binding instead of a literal asset: pick asset from and name a declared text variable holding a prop asset id. A set beat upstream then decides which object appears.
set keepsake = "p-locket"
stage prop place asset from keepsake held by MiraThe binding is resolved when the direction runs. If the variable is unset, not text, or names nothing in the library, the direction does nothing, the same quiet failure every bound asset has. See Variables and the binding rules on Stage directions.
The editor's stage preview cannot know a variable's value, so a bound prop does not show up at the caret. It shows in Preview.
Letting the reader click it
A choice option has an optional prop target: a prop asset id. While the option is live and takeable, clicking that placed prop picks the option, the same way castTarget lets a click on a character pick one. See Choice.
stage prop place lantern at right
choice
1. "Take the lantern" prop target: lantern
2. "Leave it"The text button always renders regardless. It is the accessible surface and the fallback when the prop is not on stage, was removed, or failed to load. A prop target that is not currently placed simply has nothing to click; the option is still there in the list.
A held prop takes a click too. The click picks the option that names the prop, not the character holding it.
Inspecting one
inspect hands the prop to the reader. A viewer opens over the stage with the model alone in it, and the reader can drag to orbit and scroll to zoom. It turns slowly on its own until they touch it; reduce motion turns that off.
stage inspect letterA non-parallel inspect is a Hold that the reader releases: the script rests until they press Done, press Escape, or click off the model. There is no timer and no way to dismiss it from the script. Turn parallel on and the viewer opens while the script keeps going, which is rarely what you want.
The asset slot works like prop's, literal or bound, and the prop does not have to be placed on the stage to be inspected. If the asset is missing or the binding resolves to nothing, the direction releases at once rather than opening an empty viewer.
inspect is the only manipulation a reader can do to a prop. Dragging props around the stage, combining two items, physics, and timed reaction tests are deliberately not stage directions.
Where to see them
The editor's stage viewport shows placed and held props at your caret, folded linearly from the script like camera and light. The clickable pick and the inspect viewer only run in Preview and the published player.
Next: the rest of the vocabulary is on Stage directions.