Skip to content

Asset pipeline

weld asset make turns a description into an imported, previewed, provenance-tracked Unreal asset. Generation runs on your own NVIDIA GPU (or a teammate’s, through jobs), cleanup runs in headless Blender, and a human approves each of three gates along the way.

Terminal window
weld asset make "a brass oil lantern with a warm glow" --kind prop --tris 5000

Or just ask Claude: “make a lantern prop in our style”. The make-asset skill writes a brief, starts the pipeline and stops for you at every gate.

prompt ─► concept ─► [gate 1: concept] ─► image-to-3D ─► [gate 2: mesh]
─► Blender cleanup, rig, LODs, export, previews ─► library + Git LFS
─► Unreal import ─► [gate 3: engine] ─► done
Stage What runs Where
Concept A concept image from your prompt and the game’s style preset, with FLUX.1 [schnell]. Bring your own instead with --image. GPU node
Image-to-3D BiRefNet cuts the object out of the approved concept, then TRELLIS.2 turns it into a textured mesh (GLB with PBR textures). GPU node
Blender cleanup Headless Blender: merge by distance, optional voxel remesh, decimate to the triangle budget, remove loose geometry, fix normals, UV unwrap when needed, scale to real-world height, pivot at the base. Any node with Blender
Rig Humanoid characters get a Rigify rig; props are never rigged by accident. Blender
LODs and export LOD chain by decimation, FBX + GLB for Unreal (SM_ / SK_ naming, correct units and axes). Blender
Previews A normalized GLB, thumbnail and turntable for the asset library. Blender
Register The files, previews and provenance are stored on the hub; the engine-ready files are copied into the game for a Git LFS commit. Hub + your checkout
Import Unreal Interchange import through the editor’s MCP server, plus an in-engine screenshot. Your editor

Default triangle budgets come from the asset kind and the game’s style (for example a stylized prop: 5,000; a stylized character: 20,000). Override with --tris and --height.

The pipeline never skips a gate, and agents never approve one.

Gate You see Check
1 · Concept The concept image(s) Matches the brief and style; readable silhouette; nothing off-brief
2 · Mesh Turntable renders, wireframe, triangle count, texture sheet Shape matches the concept; no holes or floaters; within budget; clean UVs
3 · Engine In-engine screenshot in a lit test map, LODs, collision Scale next to the player, materials, pivot, collision

At each gate: approve, reject with a note (the note updates the brief, so make it specific and visual) or regenerate (same brief, new seed). After three attempts at one gate you’re asked whether to change the brief or stop (--max-attempts).

Decide wherever you are: in the terminal that started the run, in the web asset library, or with weld asset gate <id> concept|mesh|engine --approve|--reject|--regenerate. The run continues on the first decision.

An asset’s detail page: each gate with its evidence and the provenance of every step.

Image generation needs CUDA. On a Mac (or any machine without a suitable NVIDIA GPU), weld asset make sends the concept and image-to-3D steps to a GPU node as typed, signed asset.concept and asset.gen3d jobs. The node needs CUDA and 12 GB or more of VRAM.

Terminal window
weld asset make "a mossy rock" # auto: here if this machine has CUDA, else a GPU node
weld asset make "a mossy rock" --gpu remote --gpu-role gpu-gen
weld asset make "a mossy rock" --on nod_5b0e # a specific node, e.g. the RTX PC

The concept image is uploaded as a job artifact; the mesh and its provenance come back as sha256-verified artifacts, and Blender continues locally. The job id is saved next to the output, so weld asset make --resume <dir> waits for the same job instead of starting another.

On the GPU node, Weld picks settings for the card: on 16 GB cards TRELLIS.2 uses its 1024 cascade with low-VRAM mode (about 76 s to generate and 56 s to export on an RTX 4080 SUPER), smaller cards use 512. If Windows silently pages GPU memory to system RAM, Weld notices, warns, and steps down on the next run. GPU jobs wait while Unreal is compiling or building on that machine.

Set up a GPU node with weld setup --roles gpu-gen, see Windows PC as a build and GPU node.

Every generated step records the model, version, license, seed, node and job. A project’s allowed model licenses live in .weld/project.toml:

[assets]
model_licenses = ["MIT", "Apache-2.0", "BSD", "DINOv3 License"] # the default

Assets made with a model outside the list are flagged, and the merge queue checks the same rule. TRELLIS.2 and BiRefNet are MIT-licensed; FLUX.1 [schnell] is Apache-2.0. Two of the models are gated on Hugging Face (FLUX.1 [schnell] and DINOv3, which TRELLIS.2 uses): accept their licenses there once and weld setup --roles gpu-gen downloads them. Until then you get WELD-E4213.

  • State is saved after every step in the run’s work directory (by default <game>/.weld/out/assets/<name>-<time>). weld asset status <dir> shows where it is; weld asset make --resume <dir> continues a failed or interrupted run.
  • GPU out of memory: retry; Weld steps down to lower settings.
  • A Blender step failed: read the job log (weld jobs logs <id>) and retry once.
  • No GPU node available: the error names what’s needed. Check weld node caps on the GPU PC.
  • --fake runs the whole pipeline with placeholder generation, without a GPU, to test the wiring.

Step-by-step: Making an asset.