Skip to content

Kinema v0.3.1

Choose a tag to compare

@ebgenius ebgenius released this 03 Sep 15:50
· 27 commits to main since this release
eeb0864

A maintenance release. It clears the warning triangle Blender puts on Kinema in Preferences → Add-ons, and changes nothing about using the add-on.

If 0.3.0 works for you, this is not urgent — but the warning it removes is the last thing standing between Kinema and the extensions.blender.org listing.

Requires Blender 5.2 LTS or newer. Every dependency ships inside the extension zip; nothing is downloaded at runtime.

Download

Platform File Size
Windows kinema-0.3.1-windows_x64.zip 116.5 MB
Linux kinema-0.3.1-linux_x64.zip 136.4 MB
macOS (Apple silicon) kinema-0.3.1-macos_arm64.zip 99.7 MB

Install with Edit → Preferences → Add-ons → Install from Disk.

Fixed

  • 28 extension policy violations. Blender flags any module loaded from inside an extension's folder that is not named under the extension's own package, and any sys.path entry pointing inside it. Kinema tripped both, and they were one decision: the vendored PyRoki and jaxls source was put on sys.path so it could import under its own top-level names. That produced one warning per vendored module — 13 for jaxls, 14 for pyroki — plus one for the path. Present since 0.2.0.

    Both packages now import as part of the add-on, so nothing goes on sys.path and every module is namespaced. Blender's own checker reports zero warnings where it previously reported 28.

    This is what the extensions.blender.org review was asking for, and it settles the open question from it: vendored source is allowed — it just has to live under the add-on's own name.

Removed

  • jaxls/_py310 from the vendored payload: 13 files selected by sys.version_info for Python 3.10 and 3.11, which Blender 5.2's Python 3.13 can never reach.

Under the hood

Nothing here changes behaviour, but it is why this should not regress:

  • tools/vendor.py rewrites the vendored packages' absolute self-imports on every vendor run, and refuses to stage a tree where one survives — parsed with ast rather than matched with a regex, so import os, jaxls cannot slip through.
  • The vendored trees' provenance stamp now records a fingerprint of the whole vendoring recipe, not just the upstream commit. A tree built before a recipe change reads as stale and fails the build, instead of quietly producing a release with the old imports in it.
  • tests/integration/test_extension_policy.py asserts the policy rules directly, so a regression fails a test rather than waiting for someone to open Preferences.

Full changelog: v0.3.0...v0.3.1