LIBRARIES / LUDIC ASSEMBLYTry it live ↗
ASSET AUTHORING, BY RELATIONSHIP

Describe the parts.
Keep them together.

Build low-poly assets from named parts, anchors and attachments. A deterministic compiler resolves the coordinates and produces the meshes and bakes.

TypeScript + JSONRenderer independentOffline + runtime
Version 0.1 is implemented and qualified on the published test corpus. Model-comparison results and visual acceptance are recorded separately. See the evidence.
01 / COMPILE IN YOUR BROWSER

A live assembly

Actual compiler output

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

Loading compiler…
INSTANCES—
TRIANGLES—
SELECTED PARTClick preview
Compiler diagnostics 0
[]
Resolved instance transforms and bounds

        
03 / A SMALL, EXPLICIT VOCABULARY

Placement that survives an edit

absolute

Start from a point

Move a part’s selfAnchor to a point in its parent’s frame.

attach

Connect named parts

Align two named anchors and apply a target-local offset. Declaration order is irrelevant.

repeat / corners

Keep four supports fitted

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.

04 / PACKAGE SURFACE

One model. Several outputs.

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 →

05 / FAIL AT THE EDITABLE LOCATION

Diagnostics for a repair loop

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."
}
06 / EVIDENCE AND LIMITS

What has been checked

Version 0.1 passes compiler and compatibility checks, three browser engines and the published bounded-repair qualification. See the report for results and limits.

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.

Qualification report ↗ · Original research proposal ↗