absolute
Start from a point
Move a part’s selfAnchor to a point in its parent’s frame.
Build low-poly assets from named parts, anchors and attachments. A deterministic compiler resolves the coordinates and produces the meshes and bakes.
Change the width: the supports follow the tabletop. Edit the JSON to create your own relationships. Drag the preview to orbit; click a part to inspect its stable ID.
Ctrl / ⌘ + Enter to compile · no network requests
[]
Six authored assets from Foundry & Ledger, rendered live from their exported meshes. These use the compatibility path; they are distinct from the declarative examples above.
Paint changes affect the accent layer. Fixed materials retain their colors. Drag to orbit.
Source: Foundry commit fadf93b. Asset examples authorized by the owner. Geometry
and source hashes are retained in the private repository.
absolute
Move a part’s selfAnchor to a point in its parent’s frame.
attach
Align two named anchors and apply a target-local offset. Declaration order is irrelevant.
repeat / corners
Expand stable instances at the corners of a top or bottom face. Insets measure edge to outer bound.
The coordinate frame is right handed: +X right, +Y up, −Z front. Built-in anchors are the center and the six face centers of geometric bounds. Groups provide nested translation frames. Rotation, arbitrary expressions, Boolean operations and soft constraints are rejected in schema 0.1.
For a target width W, support width w and edge inset i, the
support centers are ±(W/2 − i − w/2). The compiler rejects targets too small to contain
distinct supports.
import { compileAsset, validateAsset } from
"@victorqueiroz/ludic-assembly";
import { bakeAsset } from
"@victorqueiroz/ludic-assembly/bake";
const diagnostics = validateAsset(spec);
const asset = compileAsset(spec);
const frame = bakeAsset(asset, { ppu: 128 });
// Mesh layers, part transforms, bounds, source hash.
// frame.color and frame.depth contain pixel bytes.
| Entry point | Purpose |
|---|---|
ludic-assembly |
Types, validation, deterministic compilation, material layers and hashes |
/bake |
CPU rasterization with explicit camera basis and bounded image allocation |
/browser |
Event-driven canvas previews, part picking and explicit disposal |
/compat |
Imperative MeshBuilder primitives for incremental adoption |
/schema |
Versioned structural JSON schema; semantic validation uses the compiler |
The package and repository are private. Authorized consumers install the scoped package from GitHub Packages. Read installation, ownership and API contracts →
An invalid asset fails explicitly. The compiler returns a code, a JSON Pointer path and the information needed to repair that field.
{
"code": "UNKNOWN_ANCHOR",
"path": "/parts/handle/placement/target/anchor",
"received": "upper-surface",
"expected": ["top-center", "bottom-center", "center"],
"message": "Choose an anchor exported by this part."
}
Mesh and bake compatibility are compared against captures made before extraction. Compiler checks cover resizing, reference order, cycles, custom anchors, group frames, normals, materials and budgets. Browser checks cover the actual controls, picking and disposal.
LLM usability is measured separately across positional primitive calls, named coordinates and relational descriptions. The protocol uses 60 tasks across 12 families and three model families, repeated trials, and paired diagnostic-only and render-feedback repairs. Provider failures and unsuccessful cases remain in the report.
Automated geometry predicates do not establish aesthetic quality or sustained device performance. Existing Foundry assets retain their prior visual provenance; the new fixtures require their own visual acceptance.