Propose a change
Name Last commit message Last updated
adom-3d-viewer-babylon9.tar.gz Migrate asset from Helium wiki 1mo ago
install.sh Add adompkg installer files 1mo ago
package.json Add adompkg installer files 1mo ago
page.json Remove internal identifiers from page.json 11d ago
README.md Initial commit: app/adom-3d-viewer-babylon9 1mo ago
screenshot-1777683900308.png Migrate asset from Helium wiki 1mo ago
SKILL.md Add adompkg installer files 1mo ago
uninstall.sh Add adompkg installer files 1mo ago

adom-3d-viewer-babylon9

A fork of Colby's adom-3d-viewer (Babylon 7.54) bumped to Babylon 9.5.0 with the redesigned Inspector v9. Built as an ESM bundle for downstream Adom tools to vendor — chiplinter consumes it today, and we expect it to back the next ~10 Adom 3D viewers.

Why fork

Colby's adom-3d-viewer is the canonical viewer for InstaPCB previews and chipfit, but it's pinned to Babylon 7.54 because chipfit-v2 + tscircuit ship the same renderer. We needed Babylon 9's redesigned Inspector for chiplinter's scene-graph debugging and didn't want to disturb Colby's surface area, so this is a parallel fork.

What's in the bundle

The build produces a single ESM entry plus code-split chunks:

adom-3d-viewer-babylon9.esm.js     ← entry, sets window.Adom3DViewerBabylon9
chunk-*.js                          ← code-split chunks (Babylon core, inspector, etc.)
VERSION

Loaded via:

<script type="module">
  await import('/path/to/adom-3d-viewer-babylon9.esm.js');
  const v = window.Adom3DViewerBabylon9;
  v.init(host, { zUp: true, modelUrl: 'asset/foo.glb' });
</script>

Why ESM (not IIFE)

Babylon 9's @babylonjs/inspector has circular imports that resolve to TDZ when collapsed into a single IIFE scope (regardless of minifier). Vite's ESM output preserves module boundaries so the inspector initializes cleanly. Consumers load via <script type="module">, which all modern browsers support.

API

window.Adom3DViewerBabylon9 = {
  init(host, options),         // mounts the viewer in `host`, returns ViewerInstance
  rotateYUpToZUp(scene),       // for kicad-cli GLBs (Y-up) → adom viewer (Z-up)
  addLaserEtch(scene, opts),   // bake a laser-etched chip-marking text overlay
  BABYLON: <full @babylonjs/core namespace>,  // re-exported for consumers
};

ViewerInstance exposes:

  • loadModel(url) / clearScene() / frameModel(fillFraction?)
  • getScene() / getEngine() / getCamera() / getShadowGenerator()
  • addContentRoot(node, opts?) / removeContentRoot(node)
  • toggleDebugLayer() / showDebugLayer() / hideDebugLayer()
  • setGroundVisible(visible) / goHome()
  • setProjectionMode(ortho) / getProjectionMode()
  • destroy()

The full @babylonjs/core namespace is exposed at Adom3DViewerBabylon9.BABYLON so consumers don't need their own import side — chiplinter uses V.BAB.MeshBuilder.CreateDisc, V.BAB.PBRMaterial, V.BAB.Quaternion, V.BAB.Tools.CreateScreenshotUsingRenderTarget, etc. directly.

Install (drop into a tool's vendor/3d-viewer/)

The wiki ships the bundle as a tarball. Pull it into your tool's vendor directory at install time:

# Install everything to a known shared location
sudo mkdir -p /usr/local/share/adom-3d-viewer-babylon9
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-3d-viewer-babylon9/adom-3d-viewer-babylon9.tar.gz \
  | sudo tar -xz -C /usr/local/share/adom-3d-viewer-babylon9

# Then symlink (or copy) into your tool's vendor/3d-viewer/
ln -sfn /usr/local/share/adom-3d-viewer-babylon9 /usr/local/bin/vendor/3d-viewer

Or just curl individual files if your tool only needs the entry (adom-3d-viewer-babylon9.esm.js):

curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-3d-viewer-babylon9/adom-3d-viewer-babylon9.tar.gz | tar -xz -C ./vendor/3d-viewer

Browser shims required

The inspector's React deps (Fluent UI) assume a Node environment. Add this shim before loading the bundle:

<script>
  window.process = window.process || { env: { NODE_ENV: 'production' } };
  window.global = window.global || window;
</script>
<script type="module">
  await import('/path/to/adom-3d-viewer-babylon9.esm.js');
</script>

Defaults (3d-viewer-design skill compliance)

Rule Status Notes
§1 Babylon engine @babylonjs/core 9.5.0
§3b Background gradient #5a6b7e → #2a3340 SceneBuilder.ts
§4a HDRI environment bundled .env cube texture
§4b Bottom-light toggle exposed via consumer toolbar (HemisphericLight ground-color boost)
§4d Ground plane + ShadowGenerator(8192) medium-gray ground, blur PCF, optional via showGround prop
§5a PBRMaterial default every internal material is PBR
§6a zoomToMouseLocation = true AdomCamera.ts
§6c Shift+Alt+Click recenter AdomCamera.ts
§7 ViewCube + tween presets ViewCubeBuilder.ts
§8a World-origin axes (default ON) v0.2.0 R/G/B at scene origin, scaled to 15% of scene radius via refreshAxisScale after each frameModel
§8b Mesh-local axes (default OFF, toggleable) v0.2.0 parented to each loaded GLB root via addMeshLocalAxes
§8c Screen-space corner triad (always on) deferred to v0.3.0 Second-camera-with-viewport approach didn't render — engine.runRenderLoop(() => scene.render()) honors scene.activeCamera only, not the activeCameras array. v0.3.0 will use UtilityLayerRenderer with an explicit secondary engine.render() pass. §8a + §8b cover the bulk of "where is origin" debugging in the meantime.
§6b.i Adaptive wheelDeltaPercentage (100/R) ⚠ open currently a constant 0.1; pan + radius limits ARE adaptive
§11 Y-up→Z-up rotateYUpToZUp(scene) exposed on the global

§8 axis-helper API (v0.2.0)

// World axes (default ON) — R/G/B at scene origin, sized to 15% of scene radius.
viewer.toggleAxes('world');                      // toggle
viewer.toggleAxes('world', true);                // explicit set
viewer.getAxesState();                           // → { world: bool, meshLocal: bool }

// Mesh-local axes (default OFF) — auto-attaches to each loaded GLB root.
viewer.toggleAxes('mesh-local');                 // toggle

Reach the helpers directly via scene.metadata.__adomAxes if you want to add or remove per-root helpers programmatically (e.g. while debugging a custom loader path that bypasses loadModel).

Consumers

  • adom-chiplinter — vendors dist-standalone/ into vendor/3d-viewer/
  • (future) adom-chipfit-v3 — when v2 lands its own Babylon 9 upgrade
  • (future) standalone scene-graph utility scripts

Source

Source code lives at adom-inc/adom-3d-viewer-babylon9 (private repo). The canonical install artifact is the wiki tarball.