"Forge delivery fails but the preview GLB is still downloadable: recover it"
▸ SYMPTOM
A Forge asset's deliver job errors out. You assume the entire generation spend is lost and need to re-run it.
▸ CAUSE
Forge's pipeline has separate build and deliver stages. When deliver fails (network timeout, malformed payload, etc.), the build stage's output (including previewGlbUrl, a fully textured GLB) remains downloadable from the asset-detail API. The spend isn't wasted; only the final delivery step failed.
▸ FIX
-
Fetch the GLB from the asset-detail API:
snippetGET /api/assets/{game}/{kind}-{slug}Header:
x-forge-token. The response'siterations[].previewGlbUrlpoints to the surviving build artifact. -
Recover via headless Blender into your standard delivery shape:
import_scene.gltf→ join meshestransform_apply(rotation + scale: the glTF importer applies its own Y-up rotation on import)- Ground at Blender z = 0
- Extract the first
TEX_IMAGEnode's.imageas the base-color PNG - Export Y-up OBJ:
forward_axis='NEGATIVE_Z', up_axis='Y'
-
Fix the material line: Blender's
export_materials=Falsedropsusemtlentirely;export_materials=Truewrites an unwanted stray.mtlfile. Manually injectusemtl <slug>_matbefore the firstfline in the exported OBJ. -
Author
.vmdl/.vmatwrappers from the recovered OBJ + PNG using the same schema as your other Forge-delivered assets (modeldoc29header,DefaultMaterialGroupremapping both"name"and"name.vmat",TextureColoras the full root-relative path).
▸ WHY IT WORKS
Forge stores build artifacts independently of the delivery pipeline. The preview GLB is the same fully-textured mesh that would have been delivered. It just never made it through the final handoff. Recovering it through Blender reproduces the exact same asset at zero additional generation cost.