โ† All examples

asset contracts

glTF semantic recovery against an asset specification

Recover what an asset means from the file alone (named parts, hierarchy, real dimensions in metres, pivots, part materials, clips with durations) and compare it with a declared asset specification, naming the likely cause of each mismatch.

What this component contains

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • asset_report.py
  • component.json
  • fixtures/bad_centimetres.gltf
  • fixtures/bad_flattened.gltf
  • fixtures/bad_no_clips.gltf
  • fixtures/bad_renamed_material.gltf
  • fixtures/bad_short_clip.gltf
  • fixtures/bad_spec_part_without_name.spec.json
  • fixtures/bad_unnamed_panel.gltf
  • fixtures/bad_z_up.gltf
  • fixtures/door.gltf
  • fixtures/door.spec.json
  • gltf_semantic_recovery.py
  • gltfio.py
  • pngio.py
  • schema_lite.py
  • test_gltf_semantic_recovery.py
  • test_package.py
  • verification/native.json

How it works

Entry points
recover, compare, check, run, main
Proves
The named parts, parents, rest-pose world dimensions and pivots, part materials, material list and clip play lengths that a reader recovers from the file equal the specification within the stated tolerances.
Does not prove
That the geometry has the intended shape, that the clips move the parts plausibly, or that joints work. Dimensions are axis-aligned world boxes at the rest pose, not oriented or tight measurements.
Catches
asset_unreadable, specification_invalid, part_missing, part_ambiguous, part_parent_mismatch, part_dimensions_mismatch, part_pivot_mismatch, part_material_mismatch and 3 more

Recorded checks

blender_and_godot blender 5.2.1 LTS (hash 9e2066aef7ef built 2026-08-25 02:12:34); godot 4.7.2.stable.official.ed1daf0bf

  • checker_matches_contract
  • godot_recovers_the_same_facts
  • blender_recovers_the_same_facts
  • comparator_rejects_altered_engine_facts

Limits to consider

Parts are matched by exact node name; renamed parts are reported missing with similar names as a hint. Dimensions are axis-aligned boxes in world axes at the rest pose, so a rotated part measures larger than its own extents. Skinned meshes are measured at their bind pose without skinning. Unit and axis hints recognise one uniform factor (centimetres, millimetres, inches, feet, decimetres) or a Y and Z swap, not combinations.