Baltor Get started

Gallery / Asset contracts

Articulation manifest with a Godot runtime joint builder

In your harnessAsset contractMIT

Give a glTF asset working hinges and sliders: a manifest binds joints (axis, pivot, limits) to named nodes, a checker validates the binding and predicts poses at the limits, and a Godot 4 node applies it at run time with clamping, clips and a saved scene.

Files, names only

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • articulation_manifest_godot_builder.py
  • asset_report.py
  • component.json
  • fixtures/bad_axis_zero.articulation.json
  • fixtures/bad_duplicate_names.gltf
  • fixtures/bad_joint_type.articulation.json
  • fixtures/bad_limits_reversed.articulation.json
  • fixtures/bad_node_jointed_twice.articulation.json
  • fixtures/bad_node_missing.articulation.json
  • fixtures/bad_record_type.articulation.json
  • fixtures/door.articulation.json
  • fixtures/door.gltf
  • fixtures/toolbox.articulation.json
  • fixtures/toolbox.gltf
  • gltfio.py
  • godot/articulated_asset.gd
  • godot/articulation_probe.gd
  • pngio.py
  • schema.json
  • schema_lite.py
  • test_articulation_manifest_godot_builder.py
  • test_package.py
  • verification/native.json

Full files in your harness.

What it takes and gives

Entry points
read_manifest, joint_motion, pose, predictions, check, run, main, godot/articulated_asset.gd and 2 more
Proves
Every joint names exactly one node, no node carries two joints, axes are unit vectors, pivots are finite, and limits are ordered around the rest value; the reported poses are the forward kinematics of the manifest.
Does not prove
That the motion is free of collisions, that the limits match the real object, or that a physics engine would behave the same way (the Godot node sets transforms; it adds no physics joints).
Catches
asset_unreadable, manifest_invalid, joint_type_invalid, node_missing, node_ambiguous, node_jointed_twice, axis_invalid, pivot_invalid and 2 more

Limits. Hinges and sliders only; no ball, planar or coupled joints. Axes and pivots are in the moving node's own frame at rest. The Godot node moves nodes by transform, not with physics joints, and its clips approximate a hinge arc with ten linear steps (exact at every step). Node names are matched exactly against the glTF names, so a renamed node breaks the binding. The saved scene embeds meshes and materials as sub-resources.

Details

Kind
Asset contract
Engine
Python 3.10 or later
Files
26 files, 161.8 KB
Licence
MIT
Declared effects
reads files, runs commands
Checks
checker matches contract, schema agrees with jsonschema, godot moves each joint to its limits, godot joint player reaches each limit, godot reopens the built scene, godot builder refuses each known wrong binding, blender finds every bound node
Techniques
Forward kinematics with rest transform times joint motion, Rotation about an axis through a pivot: T(p) R(axis, angle) T(-p), Godot 4 GLTFDocument and GLTFState run-time loading, AnimationLibrary, PackedScene.pack with owners, JSON Schema draft 2020-12
Tags
articulation, joints, hinge, slider, godot, gltf, forward kinematics, animation player
Identity
library.supply.creative_originals.622dfd6ff09f6c87c1baa0d0.6ab6a95b2d9142fa
Version
6ab6a95b2d9142fa4109400abc05263cbd8235c733e4c4a883642f99ff95b7d4

The version is the SHA-256 of the item your harness downloads; every file in it names its own checksum.

Something wrong with this item, its rights or its safety? Report it on the support page, or from your harness after a download.