Skip to content

Library and Catalogs

Everything you place in a layout comes from a library. The library window lists the available sources as tabs, and which tabs you see is a deliberate choice rather than a side effect of the build: a catalog is either part of the project, shipped as the standard library, or explicitly attached by you.

The library window in the Layout Planner: the catalog picker set to realvirtual Library, the component count, a search field and the thumbnail grid of placeable objects below it

The project you are working in is the first tab and the default one. Everything you or the Editor saved into it is placeable straight away, with no publishing, registration or copying step in between.

The tab lists every document of the project, not just a designated library folder. Filter chips narrow it by where the document lives — scenes, models, library — but the folder is a place, not a type: any document can be placed.

Where a project document and a catalog entry are the same file, the project wins: the duplicate is hidden in the other tab, and a catalog tab left with nothing to show disappears from the list rather than sitting there empty.

A standard parts library ships with every build and loads automatically at startup from the assets bundled with the deployment — not from any remote service. It appears as a catalog tab named realvirtual Library, and thumbnails for its entries are rendered as you browse.

Additional catalogs are opt-in; none is loaded by default. Add one from the Catalog tab, or pass it on the URL (see below). Four kinds are supported:

SourceWhat it is
Built-inThe catalogs bundled with the deployment, including the standard library.
Local FolderA folder on your machine, picked once through the browser’s folder access. The planner scans library/ for .glb files and splats/ for .splat, .ksplat and .ply.
Remote URLA catalog JSON hosted at a URL.
GitHub repositoryA repository URL. The planner walks the repository tree through the public GitHub API, turns every .glb it finds into an entry, and needs no manifest file at all.

For a Local Folder catalog, subfolders become collection chips you can filter by. The first subfolder additionally maps to a category when it is one of conveyor, robot, machine, fixture or des. A GitHub scan does the same with the immediate parent folder of each file.

  • https://github.com/<owner>/<repo>
  • https://github.com/<owner>/<repo>/tree/<branch>
  • https://github.com/<owner>/<repo>/tree/<branch>/<subfolder>

A URL pointing directly at a .json file, or at a /blob/ path, is treated as a catalog manifest or a single file rather than as a repository to scan.

An entry without a supplied thumbnail gets one rendered from its GLB. For Local Folder catalogs the generated thumbnail is written back next to the source asset, so it does not have to be re-rendered on the next visit.

?library=<url> appends a catalog source on top of the standard library. It is repeatable:

https://<your-deploy>/?mode=planner&library=<url-a>&library=<url-b>

It accepts both catalog-JSON URLs and GitHub repository-scan URLs, which makes a prepared planning link a single address: the workspace, the document and the catalogs to plan with.

Pivots — where an object sits on the cursor

Section titled “Pivots — where an object sits on the cursor”

The pivot decides where a placed object meets the floor and where the transform gizmo appears. It is recomputed when the object is loaded, in two steps:

  1. A WebPivot marker wins. If the asset carries one, its position becomes the object’s origin. Author it in Unity at the robot base, the flange or the corner you actually want to grab.
  2. Otherwise: bottom-centre of the bounding box. The origin becomes the centre of the object’s bounding box, projected down to its floor — so a dropped object lands centred on the cursor with its lowest point on the ground.

The fallback uses the full bounding box, not the contact footprint. On an asymmetric object — a robot with a long overhanging arm, an L-shaped fixture — that puts the pivot over empty floor. That is predictable rather than clever; where you need it elsewhere, add a WebPivot.

Gaussian splat entries are excluded from the recalculation by default, since a splat has no meaningful bounding-box floor. A WebPivot marker still wins either way.

  • Layout Planner — the workspace and the planning workflow
  • Snap points — how placed objects connect to each other
  • Editor — authoring the objects you place
  • Documents — projects, documents and how libraries are attached