โ† All examples

asset contracts

Asset specification schema with validator and blockout generator

Declare what a 3D asset must be before it is modelled: parts with parents, dimensions, centres, pivots and materials; joints with axes and limits; clips and behaviors. Validate a specification and generate a placeholder glTF that realises it.

What this component contains

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • asset_report.py
  • asset_specification_schema.py
  • component.json
  • fixtures/bad_axis_zero.spec.json
  • fixtures/bad_behavior_reference.spec.json
  • fixtures/bad_clip_target.spec.json
  • fixtures/bad_dotted_name.spec.json
  • fixtures/bad_joint_unknown_part.spec.json
  • fixtures/bad_limits_reversed.spec.json
  • fixtures/bad_material_unknown.spec.json
  • fixtures/bad_negative_dimension.spec.json
  • fixtures/bad_parent_cycle.spec.json
  • fixtures/bad_unknown_field.spec.json
  • fixtures/bad_unknown_parent.spec.json
  • fixtures/cabinet_with_drawer.spec.json
  • fixtures/desk_lamp.spec.json
  • gltfio.py
  • pngio.py
  • schema.json
  • schema_lite.py
  • test_asset_specification_schema.py
  • test_package.py
  • verification/native.json

How it works

Entry points
schema.json, validate, blockout, check, run, main
Proves
The document matches schema.json and its cross-references hold: unique part, clip and material names, parents that exist without cycles, joints on existing parts (one per part) with unit axes and limits that suit the joint type, clip targets and behavior references that exist, part materials that are declared.
Does not prove
That a real model satisfies the specification (gltf_semantic_recovery compares a model with it) or that the declared motion is physically plausible. The blockout is a placeholder of boxes, not a model.
Catches
specification_unreadable, schema_violation, part_name_repeated, parent_unknown, parent_cycle, joint_part_unknown, joint_part_repeated, joint_axis_zero and 7 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
  • schema_agrees_with_jsonschema
  • godot_realises_each_valid_specification
  • blender_realises_each_valid_specification

Limits to consider

Rest poses carry no rotation: the blockout places parts by translation only, and joint axes are read in the asset frame. Names are limited to letters, digits, underscore, space and hyphen so that Godot and Blender keep them unchanged. Continuous and fixed joints get no limit clip. The standard-library schema check implements the keywords this schema uses, not all of JSON Schema.