Reference
Item Editor Fields for AI Agents
Item editor field ids for AI agents: the model, prefab, die, texture, audio and file tabs in the DiceyTable editor, plus the miniPaint image editor.
On this page23 sections
- Panels in this group
- item.model
- item.model.collision
- item.model.trigger
- item.model.interior
- item.texture
- item.texture.sampling
- item.texture.compression
- item.texture.webp
- item.texture.resize
- minipaint
- item.script
- item.file
- item.assembly
- item.prefab
- item.die
- item.pack
- item.audio
- item.audio.trim
- item.audio.fades
- item.audio.level
- item.audio.loop
- item.audio.output
These are the fields of the item editor tabs for models, prefabs, dice, textures, audio and other files, and of the miniPaint image editor. Decks and layouts have their own page. Each id takes the item it belongs to, such as @asset:textures/felt.png.
Panels in this group#
22 panels, with the id prefixes item, minipaint. The field catalogue lists every group.
| Panel | Label | Tab | Fields | Actions |
|---|---|---|---|---|
item.model |
Model tab | editor |
31 | 23 |
item.model.collision |
Model collision | editor |
13 | 9 |
item.model.trigger |
Model trigger | editor |
6 | 4 |
item.model.interior |
Container interior | editor |
5 | 2 |
item.texture |
Texture tab | editor |
0 | 3 |
item.texture.sampling |
Texture sampling | editor |
7 | 0 |
item.texture.compression |
Texture compression | editor |
1 | 1 |
item.texture.webp |
WebP encoding | editor |
1 | 1 |
item.texture.resize |
Texture resize | editor |
3 | 2 |
minipaint |
Deep image editor | editor |
0 | 5 |
item.script |
Script editor | editor |
0 | 2 |
item.file |
File editor | editor |
0 | 4 |
item.assembly |
Assembly tab | editor |
8 | 6 |
item.prefab |
Prefab tab | editor |
28 | 17 |
item.die |
Die tab | editor |
58 | 18 |
item.pack |
Pack tab | editor |
0 | 0 |
item.audio |
Audio tab | editor |
1 | 5 |
item.audio.trim |
Audio trim | editor |
2 | 0 |
item.audio.fades |
Audio fades | editor |
2 | 0 |
item.audio.level |
Audio level | editor |
2 | 0 |
item.audio.loop |
Audio loop | editor |
1 | 0 |
item.audio.output |
Audio output | editor |
2 | 0 |
item.model#
Model tab · surface editor · target asset
How it opens: Open the model asset from the explorer (Model tab).
Fields (31)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.model.spawn.kind |
Type | select |
— | asset |
W | card, deck, die, token, board, bag, custom, card-holder, button, table, coin |
The entity kind every piece placed from this model spawns as (drives its actions and sounds). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.surface |
Surface | select |
— | asset |
W | wood, cardboard, metal, plastic, card, tile, felt, cloth, glass, stone, generic, silent |
The physical surface pieces placed from this model have: impact sounds and the mass/friction/bounce baseline. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.flippable |
Flippable | select |
— | asset |
W | auto, yes, no |
Whether token pieces placed from this model offer Flip; "auto" removes the key so the shape decides. Shown only when Type is token. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.color |
Color | color |
— | asset |
W | — | Default tint of pieces placed from this model. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.scale |
Scale | vec3 |
— | asset |
W | ≥ 0.001, ≤ 100 | Default per-axis scale multiplier of pieces placed from this model (unitless). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.rotation |
Rotation | vec3 |
degrees |
asset |
W | — | Default Euler rotation (degrees, XYZ) of pieces placed from this model. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.spawn-height |
Spawn height | length |
length |
asset |
W | ≥ 0, ≤ 10 | Height above the table a placed piece is dropped from, in feet. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.face-down |
Face down | boolean |
— | asset |
W | — | Place pieces from this model face down. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.locked |
Locked | boolean |
— | asset |
W | — | Place pieces from this model locked (players cannot move them). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.cast-shadows |
Cast shadows | boolean |
— | asset |
W | — | Per-asset default: pieces from this model cast shadows (a per-entity setting overrides it). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.receive-shadows |
Receive shadows | boolean |
— | asset |
W | — | Per-asset default: pieces from this model receive shadows. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.static-scenery |
Static scenery | boolean |
— | asset |
W | — | Opt this model into baked lightmaps (permanently static scenery only; needs lightmap UVs). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.stack-count |
Stack count | integer |
— | asset |
W | ≥ 1, ≤ 1000, step 1 | How many pieces one placement stacks, 1..1000. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.container-mode |
Container mode | select |
— | asset |
W | ``, random, stack, queue |
How a container placed from this model hands out its contents; "" keeps the default. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.container-form |
Container form | select |
— | asset |
W | ``, holder, bag |
For a bag-kind model: "bag" is a closed container whose contents are hidden and drawn at random; "holder" is an open bowl/tray that keeps pieces as loose bodies in its interior. "" keeps the default (bag). Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.container-infinite |
Infinite source | boolean |
— | asset |
W | — | A bag-kind model that never depletes (one authored source piece). Needs a container form. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.capacity-limit |
Capacity limit | integer |
— | asset |
W | ≥ 1, ≤ 1000, step 1 | Most pieces a container placed from this model holds, 1..1000. Project models only; unsaved until Save (the tab's save bar). |
item.model.spawn.tags |
Tags (comma-separated) | text |
— | asset |
W | — | Comma-separated tags every piece placed from this model carries. Each is lower-cased and stripped to [a-z0-9_-], at most 32 characters and 100 tags. Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.body-type |
Body type | select |
— | asset |
W | ``, static, dynamic, kinematic |
Default body simulation mode; "" keeps the per-kind default. Inside the collapsed Physics defaults section (item.model.section.toggle on #section:physics). Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.mass |
Mass (kg) | number |
— | asset |
W | ≥ 0.001, ≤ 1000, step 0.05 | Default mass in kilograms, 0.001..1000. Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.friction |
Friction | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.05 | Default friction, 0..1. Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.restitution |
Restitution | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.05 | Default bounciness, 0..1. Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.linear-damping |
Linear damping | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.05 | Default linear damping, 0..1. Project models only; unsaved until Save (the tab's save bar). |
item.model.physics.angular-damping |
Angular damping | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.05 | Default angular damping, 0..1. Project models only; unsaved until Save (the tab's save bar). |
item.model.origin.target |
Move origin to | length-vec3 |
length |
asset |
W | — | A point ON the model (its current space, feet) that item.model.origin.move makes the new origin. Staging only; nothing changes until Move origin, then Apply. |
item.model.optimize.simplify-ratio |
Simplify ratio | number |
— | asset |
W | ≥ 0.05, ≤ 1, step 0.05 | Target triangle fraction for item.model.optimize.simplify, 0.05..1. A setting for the next run; changes no file. |
item.model.optimize.simplify-quality |
Simplify quality | select |
— | asset |
W | preserve, balanced, aggressive |
Error budget for item.model.optimize.simplify: preserve stops early rather than distort; aggressive hits the target. |
item.model.optimize.remove-part |
Remove part | boolean |
— | asset |
W | — | Check one listed part for item.model.optimize.remove-parts. The target is <asset id>#part:<index>; the rows exist only after item.model.optimize.list-parts. Selection only; changes no file. |
item.model.optimize.texture-max-size |
Texture max size | select |
— | asset |
W | 0, 2048, 1024, 512 |
Longest-edge cap (px) for item.model.optimize.reencode-textures; 0 keeps each texture's size. |
item.model.optimize.lightmap-resolution |
Lightmap resolution | select |
— | asset |
W | 512, 1024, 2048, 0 |
Lightmap size the UV unwrap pads its charts for (item.model.optimize.lightmap-uvs); 0 = Auto. |
item.model.material-slot.material |
Bound to | select |
— | asset |
W | — | The project material bound to one GLB material slot (what the mesh renders with); "" clears the binding. The target is <asset id>#material:<index>; select that Materials row first with item.model.tree.select. Options are the project's material ids. Unsaved until Save. |
Actions (23)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.model.duplicate-to-project |
Duplicate to project | W | asset |
Copy this built-in preset model into the project as an editable model (shown only on read-only presets). |
item.model.tree.select |
Select row | R | asset |
Select one Model tree row, which swaps the right rail to that row's panel (a Materials row shows its slot binding and material; a collider/trigger row selects that entry). The target is <asset id>#<row id>: model:root, mesh:<node>, material:<index>, collider:<entry id>, trigger:<id>, component:<type>. View state only. |
item.model.tree.toggle |
Expand / collapse | R | asset |
Expand or collapse one Model tree row that has children. The target is <asset id>#<row id> (model:root, folder:meshes, folder:materials, folder:collision, folder:triggers, folder:components). Collapsed rows are not mounted. View state only. |
item.model.section.toggle |
Expand / collapse section | R | asset |
Expand or collapse one Model tab section; collapsed sections do not mount their fields. The target is <asset id>#section:<key> with key spawn, physics, collision, trigger or interior. View state only. |
item.model.inspect |
Re-inspect | R | asset |
Re-run the model inspection (errors, warnings and stats in Errors & stats). Changes nothing. |
item.model.save |
Save | W | asset |
Write the tab's sidecar (<model>.meta.json: spawn/physics defaults, collider, triggers, interior, slot bindings) to the project draft. Publishing is separate. |
item.model.revert |
Revert | D | asset |
Discard every unsaved edit in the tab and return to the last saved sidecar. |
item.model.spawn.clear |
Clear defaults | D | asset |
Empty the whole sidecar draft (every default, the collider, triggers and interior). Unsaved until Save; Revert restores it. |
item.model.origin.recenter |
Recenter origin | W | asset |
Stage moving the model's origin to its bottom centre (rewrites the geometry once applied). Nothing changes until item.model.optimize.apply. |
item.model.origin.centre |
Origin to centre | W | asset |
Stage moving the model's origin to its bounds centre. Nothing changes until item.model.optimize.apply. |
item.model.origin.move |
Move origin | W | asset |
Stage making the point in item.model.origin.target the new origin. Nothing changes until item.model.optimize.apply. |
item.model.optimize.clean-up |
Clean up | W | asset |
Stage a weld + dedup + prune pass (same as model import) and show before/after stats to Apply or Discard. |
item.model.optimize.simplify |
Simplify | W | asset |
Stage a decimation at the Simplify ratio and quality, and show before/after stats to Apply or Discard. |
item.model.optimize.list-parts |
List parts | R | asset |
Parse the model and list its parts as item.model.optimize.remove-part checkboxes. Changes nothing. |
item.model.optimize.remove-parts |
Remove checked parts | W | asset |
Stage deleting the checked parts (and the meshes, materials and textures only they used) to Apply or Discard. |
item.model.optimize.reencode-textures |
Re-encode textures (WebP) | W | asset |
Stage re-encoding the embedded textures as WebP at the Texture max size, to Apply or Discard. |
item.model.optimize.recompute-normals |
Recompute normals (faceted) | W | asset |
Stage recomputed (faceted) normals, to Apply or Discard. |
item.model.optimize.generate-tangents |
Generate tangents | W | asset |
Stage generated tangents, to Apply or Discard. |
item.model.optimize.lightmap-uvs |
Generate lightmap UVs | W | asset |
Stage a second UV set (TEXCOORD_1) for baked lightmaps at the Lightmap resolution, to Apply or Discard. Slow on large models. |
item.model.optimize.apply |
Apply | D | asset |
Replace the model file's bytes with the staged result. Recoverable: the untouched import is preserved under originals/ before the first Apply, and item.model.optimize.revert-original restores it. |
item.model.optimize.discard |
Discard | D | asset |
Throw away the staged result without touching the model file. |
item.model.optimize.revert-original |
Revert to original | D | asset |
Replace the model file with its preserved original, discarding every applied optimisation. |
item.model.optimize.delete-original |
Delete original | H | asset |
Requires the user's confirmation in the DiceyTable tab. Deletes the preserved originals/ copy of this model — the only copy of the pre-optimisation bytes — so Revert to original stops working until the next Apply. |
item.model.collision#
Model collision · surface editor · target asset
How it opens: Model tab ▸ Collision panel.
Fields (13)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.model.collision.shape |
Shape | select |
— | asset |
W | auto, box, sphere, capsule, cylinder, convexHull, mesh |
The collider shape: "auto" drops every authored entry back to the per-kind default; any other value authors the SELECTED entry as that shape (the first entry when none is selected). Unsaved until Save. |
item.model.collision.name |
Name (optional) | text |
— | asset |
W | — | Display name of a collider entry; "" clears it. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.size |
Size | length-vec3 |
length |
asset |
W | ≥ 0.001 | FULL box dimensions (object-local feet) of a box collider entry. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.radius |
Radius | length |
length |
asset |
W | ≥ 0.001 | Radius (object-local feet) of a sphere, capsule or cylinder collider entry. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.height |
Height | length |
length |
asset |
W | ≥ 0 | Height (object-local feet) of a capsule (cylindrical section only, caps excluded) or cylinder collider entry. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.axis |
Axis | select |
— | asset |
W | 0, 1, 2 |
Long axis of a capsule or cylinder collider entry (0 = X, 1 = Y, 2 = Z). The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.model |
Collider model | asset-ref |
— | asset |
W | — | The project .glb a convex-hull / triangle-mesh entry takes its geometry from (a repo path from the live options); null goes back to the live render mesh. Clearing leaves the file in the project. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.simplify |
Simplify (% of source) | slider |
percent |
asset |
W | ≥ 5, ≤ 100, step 5 | Target triangle percentage the next item.model.collision.bake keeps (mesh-derived entries). The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.decimation |
Decimation | select |
— | asset |
W | quality, aggressive |
The meshopt mode the next collider bake uses. A bake setting of this tab, not saved in the sidecar. |
item.model.collision.max-error |
Max error (mesh-extent fraction) | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.005 | meshopt error budget for a mesh-derived entry's bake, as a fraction of the mesh extent, 0..1. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.offset |
Offset — centre | length-vec3 |
length |
asset |
W | — | Centre of a collider entry relative to the model origin (object-local feet). The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.rotation |
Rotation (°) | vec3 |
degrees |
asset |
W | — | Euler rotation (degrees, XYZ) of a collider entry. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.scale |
Scale | vec3 |
— | asset |
W | — | Per-axis multiplier on a primitive collider entry's dimensions (disabled for mesh-derived entries, which the engine cannot scale). The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
Actions (9)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.model.collision.select-entry |
Select collider | R | asset |
Select one collider entry so its fields mount. The target is <asset id>#collider:<entry id>. View state only. |
item.model.collision.fit-to-bounds |
Fit to bounds | W | asset |
Size and centre a primitive collider entry to the model's measured bounds. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.bake |
Bake collider | W | asset |
Decimate the mesh-derived entry's source with its Simplify / Max error / Decimation settings, write (or overwrite) <model>.collider.glb in the project and point the entry at it. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.add |
+ Add collider | W | asset |
Append a collider entry fitted to the bounds and select it (at most 8). Unsaved until Save. |
item.model.collision.duplicate |
Duplicate | W | asset |
Copy a collider entry. The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.delete |
Delete | D | asset |
Remove a collider entry from the draft (deleting the last falls back to Auto). The target is <asset id>#collider:<entry id> (the model tree's Collision rows); only the SELECTED entry's fields are mounted, so select it first with item.model.collision.select-entry. Unsaved until Save. |
item.model.collision.generate-container |
Generate container collider | D | asset |
Build a closed container shell from the AUTHORED interior, write it as <model>.collider.glb and REPLACE the whole collider list with one static mesh entry. Unsaved until Save; Revert restores the old list. |
item.model.collision.simplify-to-fit |
Simplify to fit | W | asset |
Over the collider triangle budget: decimate the primary mesh-derived entry to fit, then bake it (as item.model.collision.bake). |
item.model.collision.reapply |
Re-apply | W | asset |
Host only: push this tab's CURRENT draft collider, triggers and (project models) tags/metadata onto every live entity of this model on the table. Held entities are skipped and reported. |
item.model.trigger#
Model trigger · surface editor · target asset
How it opens: Model tab ▸ Trigger panel.
Fields (6)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.model.trigger.name |
Name | text |
— | asset |
W | — | Name of a trigger volume (1-64 characters). The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.shape |
Shape | select |
— | asset |
W | box, sphere, capsule, cylinder |
Shape of a trigger volume. The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.position |
Position | length-vec3 |
length |
asset |
W | — | Centre of a trigger volume (object-local feet). The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.rotation |
Rotation (°) | vec3 |
degrees |
asset |
W | — | Euler rotation (degrees, XYZ) of a trigger volume. The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.size |
Size | length-vec3 |
length |
asset |
W | ≥ 0.001 | FULL dimensions of a trigger volume (object-local feet). The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.tag |
Tag | text |
— | asset |
W | — | The tag scripts and mods match this trigger volume's enter/leave events on; "" clears it. The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
Actions (4)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.model.trigger.select |
Select trigger volume | R | asset |
Select one trigger volume so its fields mount. The target is <asset id>#trigger:<trigger id>. View state only. |
item.model.trigger.add |
+ Add trigger volume | W | asset |
Append a trigger volume and select it. Unsaved until Save. |
item.model.trigger.duplicate |
Duplicate | W | asset |
Copy a trigger volume. The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.trigger.delete |
Delete | D | asset |
Remove a trigger volume from the draft. The target is <asset id>#trigger:<trigger id> (the model tree's Triggers rows); only the SELECTED volume's fields are mounted, so select it first with item.model.trigger.select. Unsaved until Save. |
item.model.interior#
Container interior · surface editor · target asset
How it opens: Model tab ▸ Container interior panel.
Fields (5)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.model.interior.shape |
Shape | select |
— | asset |
W | box, cylinder, sphere |
Shape of the container cavity (a sphere is a bowl). Editing any interior field authors all of them. Unsaved until Save. |
item.model.interior.position |
Position | length-vec3 |
length |
asset |
W | — | Centre of the container cavity (object-local feet). Unsaved until Save. |
item.model.interior.rotation |
Rotation (°) | vec3 |
degrees |
asset |
W | — | Euler rotation (degrees, XYZ) of the container cavity. Unsaved until Save. |
item.model.interior.size |
Size | length-vec3 |
length |
asset |
W | ≥ 0.001 | FULL dimensions of the container cavity (object-local feet), not half-extents. Unsaved until Save. |
item.model.interior.fill-level |
Fill level | slider |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | How high a fill goes, as a fraction (0..1) of the cavity height above its floor. Unsaved until Save. |
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.model.interior.fit-to-collider |
Fit to collider | W | asset |
Author the interior derived from the collider's bounds (overwrites the authored one). Unsaved until Save. |
item.model.interior.clear |
Clear | D | asset |
Remove the authored interior so the derived fallback applies again. Unsaved until Save. |
item.texture#
Texture tab · surface editor · target asset
How it opens: Open the texture asset from the explorer (Texture tab).
Actions (3)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.texture.duplicate-to-project |
Duplicate to project | W | asset |
Copy this built-in preset texture into the project as an editable file (shown only on read-only presets). |
item.texture.edit.open-quick |
Open image editor | R | asset |
Open the quick image editor (Filerobot) over this texture. Its own controls are third-party; drive it with the image_quick_edit tool. |
item.texture.edit.open-advanced |
Open advanced editor | R | asset |
Open the advanced image editor (miniPaint: layers, brushes, filters) over this texture; its dialogs publish their params as minipaint.dialog.* fields. |
item.texture.sampling#
Texture sampling · surface editor · target asset
How it opens: Texture tab ▸ Sampling.
Fields (7)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.texture.sampling.srgb |
sRGB | boolean |
— | asset |
W | — | Treat the image as sRGB colour data. Turn off for data textures (normal, roughness, masks). |
item.texture.sampling.rgbm |
RGBM | boolean |
— | asset |
W | — | Decode the image as RGBM-encoded HDR. |
item.texture.sampling.mipmaps |
Mipmaps | boolean |
— | asset |
W | — | Generate mipmaps (smoother at a distance, +33% memory). |
item.texture.sampling.filtering |
Filtering | select |
— | asset |
W | nearest, linear |
Texel filtering: nearest (crisp pixel art) or linear. |
item.texture.sampling.anisotropy |
Anisotropy | integer |
— | asset |
W | ≥ 1, ≤ 16, step 1 | Anisotropic filtering level, 1..16 (sharper at grazing angles). |
item.texture.sampling.address-u |
Address U | select |
— | asset |
W | repeat, clamp, mirror |
Horizontal wrap mode. |
item.texture.sampling.address-v |
Address V | select |
— | asset |
W | repeat, clamp, mirror |
Vertical wrap mode. |
item.texture.compression#
Texture compression · surface editor · target asset
How it opens: Texture tab ▸ Compression.
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.texture.compression.mode |
Mode | select |
— | asset |
W | etc1s, uastc |
Basis codec for the next "Compress to Basis": ETC1S (smaller; colour/albedo) or UASTC (higher quality; normals/detail). Stages the action only. |
Actions (1)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.texture.compression.compress |
Compress to Basis | W | asset |
Encode a Basis-compressed .ktx2 NEXT TO this texture with the staged Mode. The original is kept; nothing is overwritten. |
item.texture.webp#
WebP encoding · surface editor · target asset
How it opens: Texture tab ▸ WebP.
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.texture.webp.quality |
Quality | slider |
— | asset |
W | ≥ 1, ≤ 100, step 1 | WebP quality 1..100 for the next "Re-encode from original" (whole numbers). Stages the action only. |
Actions (1)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.texture.webp.reencode |
Re-encode from original | D | asset |
Re-encode this .webp from its preserved originals/ source at the staged Quality and REPLACE its bytes in place. Recoverable: the original is kept, so a re-encode at another quality restores it. |
item.texture.resize#
Texture resize · surface editor · target asset
How it opens: Texture tab ▸ Resize.
Fields (3)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.texture.resize.width |
Width | integer |
— | asset |
W | ≥ 1, ≤ 8192, step 1 | Target width in pixels for "Apply resize" (1..8192). With Lock aspect on, the height follows. Stages the action only. |
item.texture.resize.height |
Height | integer |
— | asset |
W | ≥ 1, ≤ 8192, step 1 | Target height in pixels for "Apply resize" (1..8192). With Lock aspect on, the width follows. Stages the action only. |
item.texture.resize.lock-aspect |
Lock aspect | boolean |
— | asset |
W | — | Keep the image's aspect ratio while editing Width or Height. |
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.texture.resize.preset |
Power of two | W | asset |
Stage a power-of-two size for "Apply resize". The target is <asset id>#<width>x<height> (e.g. textures/felt.webp#1024x1024); fields_list shows the offered sizes. Writes nothing. |
item.texture.resize.apply |
Apply resize | D | asset |
Resample this texture to the staged Width × Height and REPLACE its bytes in place. Recoverable: the preserved original under originals/ is kept untouched. |
minipaint#
Deep image editor · surface editor · target asset
How it opens: Texture tab ▸ Deep edit (miniPaint); its dialogs publish their params as fields.
Per-instance field families
| Id pattern | Materialised from |
|---|---|
minipaint.dialog.<dialog>.<param> |
One field per parameter of the miniPaint dialog that is open. |
Actions (5)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
minipaint.save |
Save to texture | W | asset |
The editor header's Save to texture: merged export → the texture tab's save (re-encoded to the stored-size policy). |
minipaint.close |
Close | R | asset |
Close the image editor (the texture tab asks about unsaved changes). |
minipaint.retry |
Retry | R | asset |
Reload the image editor after it failed to boot. |
minipaint.dialog.ok |
Ok | W | asset |
Apply the open miniPaint dialog (its OK button) with its current minipaint.dialog.* parameters. Undoable in the editor's own history. |
minipaint.dialog.cancel |
Cancel | R | asset |
Close the open miniPaint dialog without applying it. |
Per-instance action families
| Id pattern | Registered from |
|---|---|
minipaint.menu.<command> |
One action per miniPaint menu command. |
item.script#
Script editor · surface editor · target script
How it opens: Open the script from the explorer (Script tab).
Actions (2)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.script.save |
Save | W | script |
Save and compile the Script editor's buffer (the same path as Ctrl+S; the publish scanner runs too). script_write is the way to change the text. |
item.script.close |
Close | D | script |
Close the Script editor tab; unsaved edits are discarded after its prompt. |
item.file#
File editor · surface editor · target asset
How it opens: Open a text file from the explorer (File tab).
Actions (4)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.file.pretty |
Pretty | W | asset |
Reformat a JSON file as indented JSON in the File editor's buffer (not saved until Save). |
item.file.minify |
Minify | W | asset |
Reformat a JSON file as single-line JSON in the File editor's buffer (not saved until Save). |
item.file.save |
Save | W | asset |
Save the File editor's buffer into the project draft. |
item.file.close |
Close | D | asset |
Close the File editor tab; unsaved edits are discarded after its prompt. |
item.assembly#
Assembly tab · surface editor · target asset
How it opens: Open the .assembly.json from the explorer.
Fields (8)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.assembly.part.name |
Name | text |
— | asset |
W | — | One part's name (1-80 characters). Target <asset id>#part:<part id>. |
item.assembly.part.model |
Model | select |
— | asset |
W | — | Replace one part's model with another project .glb/.gltf (repo-relative path; assemblies cannot nest). The live option list (fields_get) names every choice. Target <asset id>#part:<part id>. |
item.assembly.part.position |
Position | length-vec3 |
length |
asset |
W | step 0.01 | One part's base-centre position in assembly space [x, y, z] (world feet). Target <asset id>#part:<part id>. |
item.assembly.part.rotation |
Rotation (°) | vec3 |
degrees |
asset |
W | step 1 | One part's Euler rotation [x, y, z] in degrees, about its base centre. Target <asset id>#part:<part id>. |
item.assembly.part.scale |
Scale | vec3 |
— | asset |
W | step 0.01 | One part's per-axis scale factors [x, y, z] (unitless, each > 0), about its base centre. Mounted only while item.assembly.part.uniform-scale is off. Target <asset id>#part:<part id>. |
item.assembly.part.scale-uniform |
Scale | number |
— | asset |
W | ≥ 0.0001, step 0.01 | One part's uniform scale factor (unitless, > 0), written to all three axes. Mounted only while item.assembly.part.uniform-scale is on. Target <asset id>#part:<part id>. |
item.assembly.part.uniform-scale |
Uniform scale | boolean |
— | asset |
W | — | Edit one part's scale as a single factor (true; turning it on sets all three axes to X) or per axis (false). Switches which scale field is mounted. Target <asset id>#part:<part id>. |
item.assembly.add.model |
Add part | select |
— | asset |
W | — | The project .glb/.gltf (repo-relative path; "" = none chosen) the next Add at origin adds as a part. Changes nothing until the action runs. |
Actions (6)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.assembly.save |
Save | W | asset |
Validate the draft and write the .assembly.json to the project draft (refused while any problem is shown). Placed copies reload with the change; publishing is separate. |
item.assembly.revert |
Revert | D | asset |
Discard every unsaved edit in the tab and return to the last saved document. |
item.assembly.close-tab |
Close tab | R | asset |
Close an Assembly tab whose file is missing or unreadable (the only state that shows this button). |
item.assembly.part.reset |
Reset | D | asset |
Discard one part's unsaved edits, putting it back to its saved values (disabled for a part added since the last save). Target <asset id>#part:<part id>. |
item.assembly.part.remove |
Remove | D | asset |
Remove one part from the draft (its model file is kept). Unsaved until Save. Target <asset id>#part:<part id>. |
item.assembly.part.add |
Add at origin | W | asset |
Add the model chosen in item.assembly.add.model as a new part at the assembly origin. Disabled until a model is chosen. Unsaved until Save. |
item.prefab#
Prefab tab · surface editor · target asset
How it opens: Open the .prefab.json from the explorer.
Fields (28)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.prefab.prefab.name |
Name | text |
— | asset |
W | — | The prefab's name (1-80 characters); becomes the placed root object's label. |
item.prefab.body.source |
Body | select |
— | asset |
W | — | The prefab's root model. Value is model:<repo path> for a project .glb/.gltf/.assembly.json, or preset:<preset id> for a built-in piece; the live option list (fields_get) names every choice. Wrap an assembly to build a body from several models. |
item.prefab.body.scale |
Body scale | vec3 |
— | asset |
W | — | Scale factors [x, y, z] (unitless, each > 0) applied to the body model. |
item.prefab.body.body-type |
Body type | select |
— | asset |
W | static, kinematic, dynamic |
Physics body type of the placed root. Unlike a part, the body KEEPS this type when a joint names it: a static body is the anchor a hinged part swings from. |
item.prefab.body.weld |
Weld parts | boolean |
— | asset |
W | — | Weld every RIGID part (one no joint names) into the body as one physics body with a compound shape (physics.weldChildren on the placed root). Off = rigid parts ride along as kinematic children. Jointed parts are never welded. |
item.prefab.snap-point.name |
Name | text |
— | asset |
W | — | One snap point's name (up to 80 characters). Target <asset id>#snap:<snap point id>. |
item.prefab.snap-point.position |
Position | length-vec3 |
length |
asset |
W | — | One snap point's position in prefab space [x, y, z] (world feet, body origin at 0,0,0). Target <asset id>#snap:<snap point id>. |
item.prefab.snap-point.rotation-y |
Rotation (°) | angle |
degrees |
asset |
W | step 5 | Facing, in degrees relative to the prefab's yaw, that a piece snapped here is turned to. Target <asset id>#snap:<snap point id>. |
item.prefab.snap-point.snap-radius |
Snap radius | length |
length |
asset |
W | ≥ 0.01, ≤ 2, step 0.01 | How close (world feet, 0.01-2) a dropped piece has to land to snap here; scales with the placed prefab. Target <asset id>#snap:<snap point id>. |
item.prefab.attachment.name |
Name | text |
— | asset |
W | — | One attachment's name (1-80 characters); becomes its placed object's label. Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.source |
Model | select |
— | asset |
W | — | The model bolted on as one attachment. Value is model:<repo path> for a project .glb/.gltf/.assembly.json, or preset:<preset id> for a built-in piece; the live option list (fields_get) names every choice. Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.position |
Position | length-vec3 |
length |
asset |
W | — | One attachment's position in prefab space [x, y, z] (world feet). Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.rotation |
Rotation (°) | vec3 |
degrees |
asset |
W | — | One attachment's Euler rotation [x, y, z] in degrees, in prefab space. Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.scale |
Scale | vec3 |
— | asset |
W | — | One attachment's scale factors [x, y, z] (unitless, each > 0). Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.body-type |
Body type | select |
— | asset |
W | static, kinematic, dynamic |
Physics body type of one attachment's placed object; an attachment a joint names is placed dynamic (and unparented) regardless. Target <asset id>#attachment:<attachment id>. |
item.prefab.attachment.add-source |
Add a part… | select |
— | asset |
W | — | The model the next Add attachment will bolt on ("" = none chosen). Value is model:<repo path> for a project .glb/.gltf/.assembly.json, or preset:<preset id> for a built-in piece; the live option list (fields_get) names every choice. Changes nothing until the action runs. |
item.prefab.joint.name |
Name | text |
— | asset |
W | — | One joint's name (up to 80 characters; empty shows its id). Target <asset id>#joint:<joint id>. |
item.prefab.joint.type |
Type | select |
— | asset |
W | hinge, fixed, spring |
One joint's constraint type: hinge (turns about its axis), fixed (welds two separate bodies), spring (elastic). Target <asset id>#joint:<joint id>. |
item.prefab.joint.a |
Connects | select |
— | asset |
W | — | One joint's FIRST end: body (the prefab's root) or an attachment id. Must differ from the second end. The pivot and axis are stored relative to this end when placed. Target <asset id>#joint:<joint id>. |
item.prefab.joint.b |
Connects | select |
— | asset |
W | — | One joint's SECOND end: body (the prefab's root) or an attachment id. Must differ from the first end. Target <asset id>#joint:<joint id>. |
item.prefab.joint.enable-collision |
Parts collide | boolean |
— | asset |
W | — | Let the two jointed parts collide with each other. Off for the usual hinge (a lid colliding with its own box jams). Target <asset id>#joint:<joint id>. |
item.prefab.joint.pivot |
Pivot | length-vec3 |
length |
asset |
W | — | Where one joint sits, in prefab space [x, y, z] (world feet). A hinge turns about this point. A joint saved without one shows end A's origin. Target <asset id>#joint:<joint id>. |
item.prefab.joint.axis |
Axis | vec3 |
— | asset |
W | — | The direction one joint turns about, in prefab space [x, y, z] (any non-zero length; normalised when placed). A joint saved without one shows +Y. Target <asset id>#joint:<joint id>. |
item.prefab.joint.limited |
Limit swing | boolean |
— | asset |
W | — | HINGE joints only: stop the swing at a range (turning it on starts at 0..110 degrees). Off = turns freely. Target <asset id>#joint:<joint id>. |
item.prefab.joint.limit-min |
Range (°) | angle |
degrees |
asset |
W | ≥ -180, ≤ 0, step 5 | Lowest hinge angle (-180..0 degrees) from the placed pose; present only while Limit swing is on. Target <asset id>#joint:<joint id>. |
item.prefab.joint.limit-max |
Range (°) | angle |
degrees |
asset |
W | ≥ 0, ≤ 180, step 5 | Highest hinge angle (0..180 degrees) from the placed pose; present only while Limit swing is on. Target <asset id>#joint:<joint id>. |
item.prefab.joint.add-type |
Joint type | select |
— | asset |
W | hinge, fixed, spring |
The type the next Add joint creates. Changes nothing until the action runs. |
item.prefab.viewport.snap |
Snap | select |
— | asset |
W | — | Grid snap for gizmo moves in the 3D view: off or a step in world feet; any step also snaps gizmo turns to 15 degrees. A view setting — never written to the document. |
Actions (17)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.prefab.save |
Save | W | asset |
Validate the draft against the prefab schema and write the .prefab.json to the project draft (refused while any problem is listed). Placed copies reload with the change; publishing is separate. |
item.prefab.close-tab |
Close tab | R | asset |
Close a Prefab tab whose file is missing or unreadable (the only state that shows this button). |
item.prefab.snap-point.add |
Add snap point | W | asset |
Add a snap point to the draft (id slot-<n>) and select it: at the prefab origin, or one catchment-width beside the last one with the same facing and radius, so a row builds up. Unsaved until Save. |
item.prefab.snap-point.remove |
Remove snap point | D | asset |
Remove one snap point from the draft. Target <asset id>#snap:<snap point id>. Unsaved until Save. |
item.prefab.attachment.add |
Add part | W | asset |
Bolt the model chosen in item.prefab.attachment.add-source onto the draft at the origin (static, unit scale, id part-<n>) and select it. Disabled until a model is chosen. Unsaved until Save. |
item.prefab.attachment.remove |
Remove part | D | asset |
Remove one attachment from the draft AND every joint naming it. Target <asset id>#attachment:<attachment id>. Unsaved until Save. |
item.prefab.joint.add |
Add joint | W | asset |
Add a joint of the type in item.prefab.joint.add-type between the body and the SELECTED part (else the first part), pivot at that part's origin, axis +Y, and select it. Needs at least one part. Unsaved until Save. |
item.prefab.joint.remove |
Remove joint | D | asset |
Remove one joint from the draft. Target <asset id>#joint:<joint id>. Unsaved until Save. |
item.prefab.joint.axis-x |
X axis | W | asset |
Set one joint's axis to the prefab's X axis. Target <asset id>#joint:<joint id>. Unsaved until Save. |
item.prefab.joint.axis-y |
Y axis | W | asset |
Set one joint's axis to the prefab's Y axis (up). Target <asset id>#joint:<joint id>. Unsaved until Save. |
item.prefab.joint.axis-z |
Z axis | W | asset |
Set one joint's axis to the prefab's Z axis. Target <asset id>#joint:<joint id>. Unsaved until Save. |
item.prefab.undo |
Undo | W | asset |
Undo the last change to this tab's prefab draft (a gizmo drag is one step). Nothing is written until Save. |
item.prefab.redo |
Redo | W | asset |
Redo the last undone change to this tab's prefab draft. |
item.prefab.outline.select |
Select | R | asset |
Select a row — open its card (or close it if already open) and put the 3D view's gizmo on it. Target <asset id>#body, #attachment:<id>, #snap:<id> or #joint:<id>. Changes no document. |
item.prefab.viewport.move |
Move | R | asset |
Show the move gizmo (axis arrows and a ground-plane square) on the selection in the 3D view. |
item.prefab.viewport.rotate |
Rotate | R | asset |
Show the rotate gizmo (rings) on the selection in the 3D view; on a joint it turns the axis. |
item.prefab.viewport.frame |
Frame | R | asset |
Fit the 3D view's camera to every part, snap point and joint. |
item.die#
Die tab · surface editor · target asset
How it opens: Open the .die.json from the explorer (models/dice), or New ▸ Die.
Fields (58)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.die.name |
Name | text |
— | asset |
W | — | The die's name (1-60 characters), at the top of the tab; becomes the baked model's node and material names. While the slug still matches the name, renaming also changes the slug (and so the baked file names). |
item.die.slug |
Slug (file name) | text |
— | asset |
W | — | The file name Save bakes, beside the design: <slug>.glb, <slug>.collider.glb, <slug>.meta.json. Lower-case letters, digits and single hyphens. A file already at that name that is not this die's last bake blocks Save. Changing it bakes NEW files on the next save; the previous ones are left in place for anything still using them. |
item.die.rounding |
Edge rounding | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | How rounded the edges and corners are, 0 (sharp) .. 1 (very round). The flat faces stay on the built-in die's planes (same size and face reading); the mesh and collider are rebuilt together. |
item.die.body-color |
Body colour | color |
— | asset |
W | — | Colour of the die itself, [r, g, b] in 0..1. |
item.die.ink-color |
Ink colour | color |
— | asset |
W | — | Colour of numbers, text, pips and mask-mode images, [r, g, b] in 0..1. Colour-mode images keep their own colours. |
item.die.ink-material |
Ink material | select |
— | asset |
W | — | What numbers, text, pips and mask images are made of: "" = flat ink colour, or a die material preset id (the same ids as item.die.material.set — metal-gold, marble, wood…). The material brings its colour, pattern, wear, roughness and metalness; one without a colour of its own uses item.die.ink-color. Ink is always solid. A scanned material records its CC0 credit on Save. |
item.die.ink-ignore-body-effects |
Keep body effects off the lettering | boolean |
— | asset |
W | — | When true, the body's wear (cracks, scratches, dents, rust pitting, kintsugi seams) does not deform numbers, pips or images: their relief stays smooth where the body around them is damaged. |
item.die.depth |
Engrave depth | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | How deep numbers, pips and mask images are cut, 0 (printed flat) .. 1 (deep). Shading only: the collider never changes. |
item.die.opacity |
Opacity | number |
— | asset |
W | ≥ 0.05, ≤ 1, step 0.01 | How see-through the body is, 0.05..1 (1 = solid). Below 1 the die is clear like resin or glass and a model inside shows through; ink always stays solid. |
item.die.pattern |
Pattern | select |
— | asset |
W | — | The body's pattern: none, a scanned CC0 texture (texture:granite, texture:marble, texture:onyx, texture:oak — saving records its credit in the project), or a generated speckle/swirl/veins/grain. |
item.die.pattern-color |
Pattern colour | color |
— | asset |
W | — | Colour of a generated pattern's speckles, swirls, veins or grain lines, [r, g, b] in 0..1. Shown only for generated patterns. |
item.die.pattern-scale |
Pattern size | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Feature size of the pattern, 0 (fine) .. 1 (coarse); for a scanned texture, how large it is tiled on the die. |
item.die.pattern-amount |
Strength | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Generated patterns: how strong, 0..1. Scanned textures (labelled Recolour): how far the scan is tinted towards the body colour, 0 = its own colours. |
item.die.inclusion.model |
Model | select |
— | asset |
W | — | A project .glb sealed inside the die ("" = none); the live options list every eligible model. It is welded into the baked die and can never extend outside it. |
item.die.inclusion.size |
Size | number |
— | asset |
W | ≥ 0.05, ≤ 1, step 0.01 | The sealed-in model's size as a fraction of the largest that fits at its current position and rotation (1 = as large as possible while every vertex stays inside the die). |
item.die.inclusion.rotation-x |
Turn X | angle |
degrees |
asset |
W | ≥ -180, ≤ 180, step 1 | The sealed-in model's rotation about X, degrees. |
item.die.inclusion.rotation-y |
Turn Y | angle |
degrees |
asset |
W | ≥ -180, ≤ 180, step 1 | The sealed-in model's rotation about Y, degrees. |
item.die.inclusion.rotation-z |
Turn Z | angle |
degrees |
asset |
W | ≥ -180, ≤ 180, step 1 | The sealed-in model's rotation about Z, degrees. |
item.die.inclusion.offset-x |
Move X | number |
— | asset |
W | ≥ -1, ≤ 1, step 0.01 | The sealed-in model's position on X as a fraction of the die's inner radius (0 = centred). Pulled back in if it would leave the die; size shrinks to keep it inside. |
item.die.inclusion.offset-y |
Move Y | number |
— | asset |
W | ≥ -1, ≤ 1, step 0.01 | The sealed-in model's position on Y as a fraction of the die's inner radius (0 = centred). Pulled back in if it would leave the die; size shrinks to keep it inside. |
item.die.inclusion.offset-z |
Move Z | number |
— | asset |
W | ≥ -1, ≤ 1, step 0.01 | The sealed-in model's position on Z as a fraction of the die's inner radius (0 = centred). Pulled back in if it would leave the die; size shrinks to keep it inside. |
item.die.inclusion.tint |
One colour | boolean |
— | asset |
W | — | Give the sealed-in model one solid colour (item.die.inclusion.color) instead of its own materials. |
item.die.inclusion.color |
Colour | color |
— | asset |
W | — | The sealed-in model's colour, [r, g, b] in 0..1. Shown only while One colour is on. |
item.die.surface |
Made of | select |
— | asset |
W | — | What the die is physically made of on the table: its impact sound, grip and bounce (plastic, resin, glass, metal, stone, wood). Choosing one resets Weight to that material's density. |
item.die.density |
Weight | number |
— | asset |
W | ≥ 0.3, ≤ 12, step 0.1 | Density in g/cm³ (plastic 1.2, glass 2.5, stone 2.7, zinc-alloy metal 6.8, iron 7.8, oak 0.7). The placed die's mass is scaled from it; throws travel the same distance whatever the weight. |
item.die.overlay.scratches |
Scratches | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Fine bright grooves, rougher than the surface around them. 0 = none, 1 = heavy. |
item.die.overlay.bumps |
Bumps / hammered | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Round dents, like hammered metal or sea glass. 0 = none, 1 = heavy. |
item.die.overlay.rust |
Rust | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Matte, non-metallic orange-brown patches with pitting. 0 = none, 1 = heavy. |
item.die.overlay.tarnish |
Tarnish / patina | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Darkening with a green patina; reduces shine and metalness. 0 = none, 1 = heavy. |
item.die.overlay.cracks |
Cracks | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | A crackle network with a fainter echo deeper in — best on glass or resin. 0 = none, 1 = heavy. |
item.die.overlay.kintsugi |
Gold repair (kintsugi) | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Kintsugi: the die looks broken and mended, every seam filled with solid, polished metal (item.die.overlay.seam-color). Higher = more, smaller pieces. 0 = none. |
item.die.overlay.seam-color |
Seam metal | color |
— | asset |
W | — | The metal filling kintsugi seams, [r, g, b] in 0..1 — gold by default; silver, copper and platinum are offered. Shown while Gold repair is above 0. |
item.die.faces.preset |
Preset | select |
— | asset |
W | — | Apply a whole-die face preset — what every face prints AND counts as: numbers, pips, blank, FATE (d6), average 2-3-3-4-4-5 (d6), percentile 00-90 (d10), zero-based 0-9 (d10). Applies on selection; the live options list those for this shape. |
item.die.faces.image |
Same image on every face | select |
— | asset |
W | — | Put one project image on every face (applies on selection; faces keep what they count as). |
item.die.faces.labels |
Printed text, face 1 first | text |
— | asset |
W | — | A list of what each face prints, face 1 first, comma- or line-separated; an empty entry skips a face. Applied by item.die.faces.labels.apply. |
item.die.faces.labels-count |
Faces also count as their text | boolean |
— | asset |
W | — | When applying the printed-text list, also make each face COUNT as its text (a number when it reads as one). |
item.die.faces.values |
Values, face 1 first | text |
— | asset |
W | — | A list of what each face counts as, face 1 first: numbers are added to totals, anything else is counted as text. Applied by item.die.faces.values.apply. |
item.die.faces.names |
Names, face 1 first | text |
— | asset |
W | — | A list of face names, face 1 first, shown beside each result in summaries and chat. Applied by item.die.faces.names.apply. |
item.die.roughness |
Roughness | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | Surface finish, 0 (glossy) .. 1 (matte). |
item.die.metalness |
Metalness | number |
— | asset |
W | ≥ 0, ≤ 1, step 0.01 | 0 for plastic, resin or wood; 1 for a metal die. |
item.die.font-family |
Font | text |
— | asset |
W | — | CSS font family for numbers and text (e.g. Georgia). Any font installed on this computer works: it is baked into the texture at save, so players do not need it. |
item.die.font-weight |
Weight | select |
— | asset |
W | normal, bold |
Font weight for numbers and text. |
item.die.font-italic |
Italic | boolean |
— | asset |
W | — | Italic numbers and text. |
item.die.glyph-scale |
Glyph size | number |
— | asset |
W | ≥ 0.3, ≤ 1.2, step 0.01 | Size of numbers, text and images as a fraction of the face (0.3-1.2). |
item.die.pip-scale |
Pip size | number |
— | asset |
W | ≥ 0.5, ≤ 1.5, step 0.01 | Pip diameter multiplier (0.5-1.5). |
item.die.six-nine |
6 / 9 marker | select |
— | asset |
W | underline, dot, none |
How a number that reads as another upside down (6/9, 16/91…) is marked. |
item.die.texture-size |
Texture size | select |
— | asset |
W | 512, 1024, 2048 |
Pixel size of the baked texture atlas. Bigger is sharper and heavier to download. |
item.die.face.content |
Shows | select |
— | asset |
W | number, text, pips, image, blank |
What one face prints: its number, any short text, pips, an image, or nothing. The face still REPORTS its number when rolled. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.text |
Text | text |
— | asset |
W | — | Text one face prints when it shows text (up to 6 characters; emoji work). Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.image |
Image | select |
— | asset |
W | — | Project image one face prints when it shows an image ("" = none); the live options name every project image. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.image-mode |
Image style | select |
— | asset |
W | mask, color |
mask: the image's shape is engraved in the ink colour (its alpha, or its darkness when opaque); color: printed flat in its own colours. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.scale |
Size | number |
— | asset |
W | ≥ 0.2, ≤ 1.6, step 0.01 | Multiplier on the design's glyph size for one face (0.2-1.6). Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.rotation |
Rotation (°) | angle |
degrees |
asset |
W | ≥ -180, ≤ 180, step 1 | Clockwise turn of one face's content, in degrees. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.font |
Face font | text |
— | asset |
W | — | Font family for one face only ("" = the design's font). Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.name |
Name | text |
— | asset |
W | — | Optional name of one face ("" = none), shown beside its value in roll summaries and chat. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.result-type |
Counts as | select |
— | asset |
W | number, text |
Whether one face counts as a NUMBER (added to a roll's total) or a TEXT value (tallied, e.g. Hit). Switching to text seeds the value from the face's printed text, name or number. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.result-number |
Value | number |
— | asset |
W | ≥ -9999, ≤ 9999 | The number one face counts as when "Counts as" is number (defaults to the face number; decimals and negatives allowed). Shown only for number faces. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.face.result-text |
Value | text |
— | asset |
W | — | The text one face counts as when "Counts as" is text (1-24 characters, e.g. Hit). Shown only for text faces. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
Actions (18)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.die.save |
Save | W | asset |
Write the design (.die.json) and bake the die beside it: <stem>.glb (the stock mesh with the painted textures), <stem>.collider.glb (the stock hull) and <stem>.meta.json (kind die, collider, face layout). Placed copies reload. |
item.die.close-tab |
Close tab | R | asset |
Close a Die tab whose file is missing or unreadable (the only state that shows this button). |
item.die.shape.set |
Shape | W | asset |
Switch the die's shape. Target <asset id>#shape:<preset id> (die-d4, die-d6, die-d8, die-d10, die-d12, die-d20). Style and surviving faces are kept. Unsaved until Save. |
item.die.face.select |
Select face | R | asset |
Select one face for editing and turn the 3D preview to show it. Target <asset id>#face:<value> (the number that face reports, 1..sides). |
item.die.faces.numbers |
All numbers | W | asset |
Set every face to print its number AND count as its own number (clears custom values and names). Unsaved until Save. |
item.die.faces.pips |
All pips | W | asset |
Set every face to print pips (its number as dots) AND count as its own number (clears custom values and names). Unsaved until Save. |
item.die.material.set |
Material | W | asset |
Start the body from a material preset. Target <asset id>#material:<id> (plastic, resin, glass, metal, granite, marble, onyx, wood, stone). Sets finish, metalness, opacity and pattern (and the colour for materials that are one); every setting stays editable. Unsaved until Save. |
item.die.inclusion.center |
Centre | W | asset |
Put the sealed-in model back in the middle of the die, unrotated. Unsaved until Save. |
item.die.material.category |
Material type | R | asset |
Show one material category's presets. Target <asset id>#category:<plastic|resin|glass|metal|stone|wood>. View state only. |
item.die.faces.text |
Text | W | asset |
Make every face print text (its current text, or its number until changed). Unsaved until Save. |
item.die.faces.blank |
Blank | W | asset |
Make every face blank; faces still count as their numbers. Unsaved until Save. |
item.die.faces.reset-style |
Reset sizes & turns | W | asset |
Clear every face's own size, rotation and font. Unsaved until Save. |
item.die.faces.labels.apply |
Apply | W | asset |
Apply the printed-text list (item.die.faces.labels) to the faces in order. Unsaved until Save. |
item.die.faces.values.apply |
Apply | W | asset |
Apply the values list (item.die.faces.values) to the faces in order. Unsaved until Save. |
item.die.faces.names.apply |
Apply | W | asset |
Apply the names list (item.die.faces.names) to the faces in order. Unsaved until Save. |
item.die.view.turntable |
Spin | R | asset |
Start or stop the 3D preview's slow turntable spin. View state only. |
item.die.view.environment |
Lighting | R | asset |
Light the 3D preview with the table and room Edit Mode has loaded (target <asset id>#environment:table, a fresh capture from just above the table) or a neutral studio (#environment:studio). Preview only; nothing is saved. |
item.die.view.reset |
Reset view | R | asset |
Turn the 3D preview back to its default three-quarter view. View state only. |
item.pack#
Pack tab · surface editor · singleton (no target)
How it opens: Open the pack reference from the explorer (Pack tab).
No field or action is registered on this panel yet. panel_open can still open it, and describe_panel / screenshot_panel can read it.
item.audio#
Audio tab · surface editor · target asset
How it opens: Open the audio file from the explorer (Sounds folder).
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.preview.loop |
Loop preview | boolean |
— | asset |
W | — | Loop the preview playback, to listen for the seam. View state only; nothing is saved. |
Actions (5)
| Action id | Label | Class | Target | Description |
|---|---|---|---|---|
item.audio.play |
Play | R | asset |
Play the EDITED sound in the tab (a preview; nothing is saved). |
item.audio.stop |
Stop | R | asset |
Stop the preview. |
item.audio.save |
Save & optimize | D | asset |
Render the staged edits from the preserved original and REPLACE this file's bytes with the optimised MP3. Recoverable: the lossless original under originals/ is kept, and the settings are stored in the file, so a later save can undo them. |
item.audio.revert |
Discard changes | W | asset |
Throw away the staged edits and go back to the file's saved settings. |
item.audio.reset |
Reset all | W | asset |
Stage every setting back to its default (untrimmed, no fades, no gain). Save to apply. |
item.audio.trim#
Audio trim · surface editor · target asset
How it opens: Audio tab ▸ Trim.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.trim.start |
Start | number |
— | asset |
W | ≥ 0, step 0.01 | Seconds of the source to skip at the start. |
item.audio.trim.end |
End | number |
— | asset |
W | ≥ 0, step 0.01 | Where the sound ends, in seconds of the source (the full length = untrimmed). |
item.audio.fades#
Audio fades · surface editor · target asset
How it opens: Audio tab ▸ Fades.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.fade.in |
Fade in | number |
— | asset |
W | ≥ 0, step 0.05 | Seconds to fade in from silence. |
item.audio.fade.out |
Fade out | number |
— | asset |
W | ≥ 0, step 0.05 | Seconds to fade out to silence. |
item.audio.level#
Audio level · surface editor · target asset
How it opens: Audio tab ▸ Level.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.level.gain |
Gain (dB) | number |
— | asset |
W | ≥ -40, ≤ 24, step 0.5 | Level change in decibels, -40..24, applied after Normalize. Peaks past full scale are clipped. |
item.audio.level.normalize |
Normalize | boolean |
— | asset |
W | — | Scale the sound so its loudest peak sits at -1 dBFS. |
item.audio.loop#
Audio loop · surface editor · target asset
How it opens: Audio tab ▸ Loop.
Fields (1)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.loop.crossfade |
Loop crossfade | number |
— | asset |
W | ≥ 0, ≤ 30, step 0.05 | Seconds of the end blended into the start so the file loops without a seam (0 = off). Shortens the sound by that much. |
item.audio.output#
Audio output · surface editor · target asset
How it opens: Audio tab ▸ Output.
Fields (2)
| Field id | Label | Kind | Unit | Target | Class | Range / options | Description |
|---|---|---|---|---|---|---|---|
item.audio.output.mono |
Mono | boolean |
— | asset |
W | — | Mix to one channel: about half the size, and positional emitters are heard as mono anyway. |
item.audio.output.quality |
Quality | select |
— | asset |
W | small, balanced, high |
MP3 preset: small (32 kHz mono, ≈64 kbps), balanced (44.1 kHz, ≈96–130 kbps), high (44.1 kHz, ≈170–190 kbps). |
