Demo
Connector snapping
Pieces are placed by joining typed connectors, so nobody types coordinates. The SDK computes every position to within 1 mm and refuses connectors that do not fit or are already taken.

Connector types in this kit
| Type | Joins with | Found on |
|---|---|---|
awning-socket | awning-plug | cafe-01, shop-01 |
fence-2m | fence-2m | fence-01 |
ground-edge | ground-edge, road-side | lawn-tile-01, plaza-tile-01 |
hedge-2m | hedge-2m | hedge-01 |
lot-front | road-side | cafe-01, house-01, house-02, shop-01, townhall-01 |
prop-base | prop-socket | bench-01, bus-stop-01, mailbox-01, market-stall-01, shrub-01, street-lamp-01, trash-bin-01, tree-01, tree-02 |
prop-socket | prop-base | lawn-tile-01, plaza-tile-01, road-corner-01, road-straight-01, road-tee-01 |
road-4m | road-4m | road-corner-01, road-cross-01, road-crosswalk-01, road-straight-01, road-tee-01 |
road-side | ground-edge, lot-front | road-corner-01, road-crosswalk-01, road-straight-01, road-tee-01 |
A snapped instance
In the scene file, attach_to names the piece and the connector to join. No position is written.
From town-small.scene.json
[
{
"instance_id": "tile-a3",
"asset": "stylized-town/road-straight-01@0.3.0",
"position_m": [
-4,
0,
0
],
"rotation_euler_rad": [
0,
0,
0
],
"uniform_scale": 1,
"customize": {}
},
{
"instance_id": "house",
"asset": "stylized-town/house-01@0.2.0",
"attach_to": {
"instance_id": "tile-a3",
"anchor_id": "anchor-side-north",
"connector": "anchor-lot-front"
},
"uniform_scale": 1,
"customize": {
"front-door": "door-02",
"roof": "roof-hip-01",
"wall-color": "paving"
}
}
]Check a scene with npx agent-ready-assets scene validate and the --resolve option: it prints every computed position. Three.js guide.
What the SDK refusesall or nothing
A scene with a snap that cannot be made is refused as a whole; nothing is placed approximately. The error names the cause: SNAP_INCOMPATIBLE, SNAP_OCCUPIED, SNAP_CYCLE, SNAP_TILTED, SNAP_ANCHOR_UNKNOWN or INSTANCES_OVERLAP.