Baltor Get started

Gallery / Asset contracts

Animation export trap checker with a Blender declare and repair procedure

In your harnessAsset contractMIT

Catch exports that keep every mesh but lose animation: only the playing action exported, clips merged, channels without targets, clips baked to one pose or over the whole scene range. Ships the Blender scripts that declare a scene's clips and put every action on its own NLA track.

Files, names only

  • ATTRIBUTION.md
  • LICENSE
  • README.md
  • animation_export_trap_checker.py
  • asset_report.py
  • component.json
  • fixtures/bad_active_action_only.gltf
  • fixtures/bad_declaration_path.clips.json
  • fixtures/bad_merged_clips.gltf
  • fixtures/bad_no_animations.gltf
  • fixtures/bad_scene_range_bake.gltf
  • fixtures/bad_static_clip.gltf
  • fixtures/bad_unresolved_target.gltf
  • fixtures/door.clips.json
  • fixtures/door.gltf
  • gltfio.py
  • pngio.py
  • procedure/declare_clips_blender.py
  • procedure/push_actions_to_nla.py
  • schema_lite.py
  • test_animation_export_trap_checker.py
  • test_package.py
  • verification/native.json

Full files in your harness.

What it takes and gives

Entry points
export_clips, read_declaration, compare, check, run, main, procedure/declare_clips_blender.py, procedure/push_actions_to_nla.py
Proves
The export carries a clip of each declared name, each declared target (node and path) has a resolved channel in it, at least one channel of it changes value, its play length is within tolerance of the declaration, and no channel of any clip points at a missing node.
Does not prove
That the motion is the intended motion (only that something moves), that interpolation matches the source curves, or that an engine plays the clip on the right node at run time.
Catches
asset_unreadable, declaration_invalid, animations_missing, clip_missing, clips_merged, clip_target_missing, channel_target_unresolved, clip_static and 1 more

Limits. Clips are matched by exact name; a renamed clip is reported missing with similar names as a hint. Motion is detected as any output value changing by more than 1e-5, so a quaternion that flips sign without turning counts as motion. The Blender scripts read actions through slots and channel bags (Blender 4.4 and later) and fall back to plain F-curves; they handle object, bone and shape key channels, not drivers, constraints or geometry nodes animation. The declared play length is the last frame of the action range divided by the scene frame rate.

Details

Kind
Asset contract
Engine
Python 3.10 or later
Files
23 files, 190.2 KB
Licence
MIT
Declared effects
reads files, runs commands, writes files
Checks
checker matches contract, godot plays the same clips, blender plays the same clips, comparator rejects altered engine facts, trap reproduced by blender default export, procedure fix exports every declared clip, godot plays the repaired export
Techniques
glTF 2.0 specification: animations, channels, samplers and interpolation, Blender NLA tracks and strips as the unit of separate glTF clips, Blender layered actions: slots and channel bags
Tags
gltf, animation, export, blender, nla, clips, procedure, 4d
Identity
library.supply.creative_originals.f6ba574decda59d983a0d5ef.8d15b0a4f3d668c8
Version
8d15b0a4f3d668c85343195e3ee5e17ac395c7cf29b3e335d9304a61849e71ae

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.