blendertk
Blender 4.x+ tech-art toolkit mirroring mayatk's public API (btk.X ↔ mtk.X) — modeling, animation, materials, rigging, and scene-pipeline automation over native bpy/bmesh, plus tool panels and one-click bridges into Marmoset, Substance Painter, RizomUV, Maya, Unity, and the browser.
blendertk is the Blender layer of the pythontk → uitk → {mayatk, blendertk} → tentacle ecosystem. It mirrors mayatk at the name + behavior level — not signatures, not line counts — so the shared tentacle slot/UI layer stays branch-free across DCCs. Where Blender ships the capability natively, blendertk stays a thin adapter over bpy/bmesh operators; where it doesn't, the DCC-agnostic core lives upstream in pythontk and both DCC layers adapt it.
Installation
pip install blendertk
Requirements: Blender 4.x+ (developed against 5.1 / Python 3.13) · pythontk. bpy is provided by the Blender runtime — importing blendertk and resolving its surface never needs a running Blender (all bpy imports are deferred into call bodies).
Packages
Same subpackage names, main-module filenames, and namespace classes as mayatk — the full correspondence map (including what is deliberately absent on each side, and why) is STRUCTURE.md.
| Package | What it covers |
|---|---|
anim_utils |
Shots suite (store, manifest, sequencer panels over the shared pythontk shots engine), smart bake, blendshape animation, key scaling/staggering |
audio_utils |
Sound-strip CRUD over the Video Sequence Editor (deliberately not a mirror of Maya's DG-node audio machinery) |
cam_utils |
Camera utilities |
core_utils |
CoreUtils, AutoInstancer, Preview, script-job manager over bpy.app.handlers, diagnostics |
display_utils |
Color ID, exploded view, Blender-only OutlinerTint |
edit_utils |
EditUtils, mirror, cut-on-axis, duplicate (linear/radial/grid), bevel, bridge, snap, naming, curtain rig, target weld |
env_utils |
BlenderConnection, workspaces (workspace.mel shared with Maya), reference manager, hierarchy sync, FBX/USD, scene exporter, Maya + Unity bridges, WebXR preview, docked script console |
light_utils |
Lightmap baker + web export, HDR manager, lights-from-geometry |
mat_utils |
Game shader, material updater, texture path editor, shader templates, render opacity, image-to-plane, emissive groups, Marmoset + Substance live-RPC bridges |
node_utils |
NodeUtils, DataNodes (shared scene data carriers), Channels tool |
nurbs_utils |
Curve helpers (relaxed mirror), ImageTracer, curve-to-tube |
rig_utils |
Constraints/drivers/armature primitives; tube / wheel / telescope / shadow rigs |
ui_utils |
BlenderUiHandler, native-menu wrapper, Qt dock container, calculator, style setter |
uv_utils |
UV utilities, Rizom bridge |
xform_utils |
Transforms and matrix IO |
Classes — and, for the wildcard-scanned *_utils roots, their public methods — are exposed at the package root via the lazy-loading resolver:
import blendertk as btk
btk.selected_objects() # bare form — CoreUtils.selected_objects, wildcard-exposed
btk.EditUtils.mirror(...) # class-qualified — mirrors mtk.EditUtils.mirror
btk.AutoInstancer(tolerance=0.001).run() # same call in mayatk: mtk.AutoInstancer(...).run()
Full public surface (auto-generated): API_REGISTRY.md; compact index: API_INDEX.md.
Highlights
- Maya bridge, both directions —
MayaBridge.send()exports the selection and launches an interactive Maya on it;save_as()runs mayapy headlessly and returns a written.ma/.mb;MayaSceneImportpulls a Maya scene in via a blocking headless FBX round-trip, translating FBX-hostile shaders and rebuilding packed PBR maps from a manifest sidecar. Mirrored by mayatk'sBlenderBridge, so each DCC reads and writes the other's native format off one shared export pipeline. - Lightmap pipeline —
LightmapBakercommits bake state (markers + manifest) that every exporter reads on its own: Unity via the FBX carrier, GLB via pythontk's lightmap applier, andLightmapWebExportwraps Blender's own glTF exporter for the live WebXR preview — a clean no-op on unbaked scenes. mayatk's Blender bridge drives this baker headlessly for the Maya round trip. - Drive Blender from outside —
BlenderConnectionmirrors mayatk'sMayaConnection: fresh--backgroundinstances only, the backbone of the test suite. An artist's open session is never touched. - Hierarchy sync — diff a scene against a reference
.blend(or.fbx, staged to a temp.blend) linked as a library, then repair drift: stub missing objects, quarantine extras, fix fuzzy renames and reparents;ObjectSwapperpulls matched reference objects in fresh. - Shared workspaces — one project folder serves Maya natively and Blender via blendertk: the
workspace.melcodec and template store live in pythontk, and the co-located Workspace Editor panel mirrors Maya's Project Window. - Tool panels — every engine that warrants one ships a co-located uitk panel (
<tool>.py+<tool>.ui), discovered byBlenderUiHandler— the same split mayatk uses, so tentacle's navigation stays a thin layer.
Parity — how the mirror stays honest
Parity is measured, not eyeballed: compare_panel_surface.py regenerates a per-element matrix (tentacle/docs/PARITY_SURFACE.md), every conscious divergence is ledgered with a reason in tentacle's parity_map.py, and untriaged deltas fail the sweep. The coarse gap and port-this-next recipes live in PARITY_AUDIT.md and PARITY_PORTING_PLAN.md.
Session safety
Nothing in blendertk attaches to a running Blender. Tests and headless tooling always launch a fresh blender --background --factory-startup process; BlenderConnection does the same. See CLAUDE.md for the full rule.
Guides
- Scene data nodes — the
data_internal/data_exportcarriers and how their metadata rides into the FBX (Blender delta of mayatk's owner doc) - Emissive groups → Unity (mayatk, cross-package SSoT) — runtime-toggleable emissive regions; blendertk's
EmissiveGroupsstores membership as per-group boolean face attributes - Live WebXR preview (pythontk) — the shared DCC → glTF → headset pipeline behind
btk.WebXrPreview
Links
- Full API:
API_REGISTRY.md·API_CHANGES.md - Structure / parity map:
STRUCTURE.md - Test suite:
test/README.md— suite layout, sentinel conventions, fresh-instance runner - Changelog:
CHANGELOG.md - Contributor / AI-agent guide:
CLAUDE.md - PyPI: https://pypi.org/project/blendertk/
- Issues: https://github.com/m3trik/blendertk/issues
License
MIT — see LICENSE.
Release files for blendertk 0.5.79
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| blendertk-0.5.79-py3-none-any.whl | Python 3 | none | any | Details |
Release files / blendertk-0.5.79-py3-none-any.whl
| Download URL | blendertk-0.5.79-py3-none-any.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
521ef39787ec58fb1ff7fd49008d584b9583f193a22498433776f68bc249a948
|
|
BLAKE2b-256 checksum How to use checksums |
aefeb5fc1332fe1b25c53fd9ede1e22b01d0d868815c67b8810159398bc5ef3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|