twin-asset-import

Import non-BIM GLB props into a Godot digital twin and mint synthetic GlobalIds for data binding.

Updated Jul 8, 2026
One-click install
npx skills add https://github.com/arthur0n/xenodot-twin --skill twin-asset-import-arthur0n
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: twin-asset-import
Source: https://github.com/arthur0n/xenodot-twin/tree/main/plugin/skills/twin-asset-import
Command: npx skills add https://github.com/arthur0n/xenodot-twin --skill twin-asset-import-arthur0n

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Vendor equipment models and CC0 props (pumps, valves, racks) delivered as GLB/FBX have no IFC GlobalId, so they cannot join a digital twin's data layer and remain decorative geometry that live tags can never reach. ## Core Features & Use Cases - Runtime GLB loading: Loads props at runtime via GLTFDocument (FBX converted to GLB first), reusing the same load contract as the BIM building importer. - Scale and material sanity: Measures the world AABB to catch 100x/1000x unit errors and verifies metallic-roughness PBR materials render correctly under Forward+. - Synthetic GlobalId minting: Renames the prop's node to a unique 22-char synthetic GlobalId with a reserved PROP$ prefix so binding_map.gd resolves it exactly like a real IFC element, plus a props sidecar for the property panel and join gate. - Use Case: You receive a vendor pump model as FBX that imports at 1000x scale and must respond to a live temperature tag; this Skill converts it, fixes the unit scale, mints a synthetic id, and binds the tag so the pump color-ramps with live data. ## Quick Start Import the vendor pump GLB into the twin viewer and bind it to the live tag pump_1.temp using a minted synthetic GlobalId.

Frequently Asked Questions about twin-asset-import

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I import a GLB or FBX model into a Godot digital twin at runtime?

Load GLB files at runtime with GLTFDocument.append_from_file after globalizing the res:// path, then add the generated scene to the model host. FBX files must be converted to GLB first with a tool like fbx2gltf, since GLTFDocument reads glTF/GLB only.

How do I bind live data to a 3D prop that has no IFC GlobalId?

Mint a synthetic GlobalId: rename the prop's node to a unique 22-char base64 string with a reserved PROP$ prefix so binding_map.gd's node channel resolves it like a real IFC element. Add a props sidecar keyed by that id and reference it in the binding map's globalid field.

Why does my vendor model import at 1000x scale in Godot?

A 100x or 1000x size mismatch is a unit error: the vendor export baked millimetres or centimetres instead of glTF's metres. Measure the loaded prop's world AABB against its known real size, then fix the exporter's unit setting or apply one uniform scale on the root node.

Can I use the twin_globalids meta on a plain MeshInstance3D prop?

No. The mmi channel requires the host to be a MultiMeshInstance3D; on a plain MeshInstance3D the meta resolves to locators that silently paint nothing. A single prop must join through the node channel by naming its node a synthetic GlobalId.

What is the difference between twin-import and twin-asset-import?

twin-import handles BIM/IFC buildings where the GlobalId is intrinsic and stamped during conversion. twin-asset-import handles non-BIM props with no intrinsic id, where you mint and own a synthetic GlobalId. Both share the same runtime-load contract, sidecar shape, and verification gates.

Why does my imported prop render pitch black in Godot Forward+?

A pitch-black prop usually shipped an emissive/unlit setup or lost its textures in an FBX round-trip. glTF core supports only metallic-roughness PBR, so legacy specular-glossiness exports must be reconverted, and .gltf files need their external textures kept beside them.