Skip to main content

Tests License: LGPL v3 PyPI

Tentacle

A Qt marking-menu launcher for DCC apps — less a fixed menu than a framework you extend: pair a UI panel with a same-named slot module and its widgets wire themselves, or point Tentacle at a slot library of your own.

Built on uitk.MarkingMenu, it ships ~60 Maya tool panels spanning the full pipeline (modeling, UV, materials, rigging, animation, rendering, …), a Blender integration whose slot library is still in progress, and a thin 3ds Max wrapper.

Demo

Install

Maya (2025+) — install into mayapy:

"C:/Program Files/Autodesk/Maya2025/bin/mayapy.exe" -m pip install tentacletk

Blender (4.x+) — same package, into Blender's bundled Python:

"C:/Program Files/Blender Foundation/Blender 5.1/5.1/python/bin/python.exe" -m pip install tentacletk

Prefer a menu? Download and run the package manager for your DCC — mayapy-package-manager.bat / blenderpy-package-manager.bat — pick your DCC version, press 1, type tentacletk. Each is a self-sufficient single-file download.

Requires Python 3.9+ and a Qt binding (PySide2 or PySide6 — Maya ships its own; Blender's Qt-less Python gets PySide6 pip-installed automatically on first launch). The upstream toolkit packages pythontk, uitk (with the qtpy shim), mayatk, and blendertk are pulled in automatically.

Once running, updating is in-app: Settings → Update Package checks the whole toolkit against PyPI.

Launch

In Maya's userSetup.py:

from maya.utils import executeDeferred

def start_tentacle():
    from tentacle import TclMaya
    TclMaya(key_show="Z")

executeDeferred(start_tentacle)

key_show accepts bare keys ("Z", "Space") or Qt names ("Key_Z"); if omitted it defaults to F12.

In Blender, save this as tentacle_startup.py in your user startup folder (%APPDATA%\Blender Foundation\Blender\<version>\scripts\startup\):

import bpy

def _start_tentacle():
    from tentacle import tcl_blender
    tcl_blender.register()  # hosts Qt + wires the activation key

bpy.app.timers.register(_start_tentacle, first_interval=0.5)

The Blender activation key defaults to F12; override with the TENTACLE_KEY environment variable (e.g. Z).

Bindings

Defined in tcl_maya.py; chords are parsed by uitk.MarkingMenu (see uitk/docs/MARKING_MENU.md). The table below assumes key_show="Z" from the example — substitute your chosen key.

Chord Opens
Z hud#startmenu
Z + LMB cameras#startmenu
Z + MMB editors#startmenu
Z + RMB main#startmenu
Z + LMB + RMB maya#startmenu

Ctrl+Shift+R repeats the last command (configurable in Preferences).

The bare-key landing menu (hud#startmenu) is a live HUD: scene status, current selection and component info, and rule-based warning icons — each warning check is individually toggleable.

How it works

flowchart LR
    A[TclMaya] --> B[uitk.MarkingMenu]
    B --> C[uitk.Switchboard]
    C --> D[ui/*.ui]
    C --> E[slots/maya/*.py]

uitk.Switchboard pairs each .ui file with a slot module of the same basename, then connects each widget's objectName to a method of the same name on the slot class:

ui/materials.ui          ──pairs with──►   slots/maya/materials.py
  └─ widget objectName "b005"  ──calls──►    def b005(self): ...
  └─ widget objectName "b005"  ──setup──►    def b005_init(self, widget): ...  (optional)

That's the whole convention. Widget object names are arbitrary; whatever name a widget has, a method of that name on the slot class will fire when it's interacted with.

Submenu routing: a widget's accessibleName (e.g. "cameras#lower") names the submenu UI to open when the gesture lands on it.

Customization

TclMaya(
    key_show="F11",
    slot_source="my_studio/slots",   # use your own slot library
    log_level="DEBUG",
    bindings={                        # replace defaults entirely
        "Key_F11":               "main#startmenu",
        "Key_F11|RightButton":   "cameras#startmenu",
    },
)

User preferences (theme, repeat-last shortcut, etc.) live in the in-app Preferences panel.

Project layout

tentacle/
├── tcl_maya.py            TclMaya entry point + default bindings
├── tcl_max.py             TclMax  (wrapper, no slot library yet)
├── tcl_blender.py         TclBlender entry point — Qt host + keymap bridge + launcher + add-on
├── slots/
│   ├── _slots.py          Slots base — repeat-last-command shortcut
│   ├── maya/              ~60 SlotsMaya subclasses
│   └── blender/           SlotsBlender subclasses (Phase 3+)
└── ui/                    .ui definitions; maya_menus/ + blender_menus/ hold DCC submenus

Platform support

DCC Status
Maya 2025+ Full — entry point, slot library, all menus wired.
Blender Entry point + keymap activation live (TclBlender); slot port in progress.
3ds Max Wrapper only (TclMax).

Development

git clone https://github.com/m3trik/tentacle
pip install -e ./tentacle
cd tentacle && python -m pytest test/

CI runs test_package.py, test_slot_integrity.py, test_ui_integrity.py, and module-specific suites — see .github/workflows/tests.yml.

More

License

LGPL v3.

Release files for tentacletk 0.13.45

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for tentacletk 0.13.45
File Interpreter ABI Platform
tentacletk-0.13.45-py3-none-any.whl Python 3 none any Details

Release files / tentacletk-0.13.45-py3-none-any.whl

Download URL tentacletk-0.13.45-py3-none-any.whl
Size 537.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d95c52856a5a47509e28819c7b73fe0d3dce1734eb1fe94753bdcfda442e5d15
BLAKE2b-256 checksum
How to use checksums
a980497d9940d68ee38773439e3ce7f8bfdad4f4aaaac936119b7c218c293035
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

0.13.91

1 release file

0.13.90

1 release file

0.13.89

1 release file

0.13.88

1 release file

0.13.87

1 release file

0.13.86

1 release file

0.13.85

1 release file

0.13.78

1 release file

0.13.77

1 release file

0.13.76

1 release file

0.13.75

1 release file

0.13.72

1 release file

0.13.66

1 release file

0.13.64

1 release file

0.13.61

1 release file

0.13.59

1 release file

0.13.56

1 release file

0.13.53

1 release file

This release

0.13.45 This release

1 release file

0.13.33

1 release file

0.13.29

1 release file

0.13.26

1 release file

0.13.22

1 release file

0.13.20

1 release file

0.13.16

1 release file

0.13.14

1 release file

0.13.10

1 release file

0.13.6

1 release file

0.13.3

1 release file

0.12.99

1 release file

0.12.95

1 release file

0.12.91

1 release file

0.12.88

1 release file

0.12.84

1 release file

0.12.80

1 release file

0.12.51

1 release file

0.12.48

1 release file

0.12.45

1 release file

0.12.42

1 release file

0.12.39

1 release file

0.12.36

1 release file

0.12.34

1 release file

0.12.30

1 release file

0.12.27

1 release file

0.12.25

1 release file

0.12.8

1 release file

0.12.5

1 release file

0.12.4

1 release file

0.12.3

1 release file

0.12.0

1 release file

0.11.99

1 release file

0.11.95

1 release file

0.11.94

1 release file

0.11.93

1 release file

0.11.92

1 release file

0.11.88

1 release file

0.11.84

1 release file

0.11.79

1 release file

0.11.75

1 release file

0.11.70

1 release file

0.11.66

1 release file

0.11.62

1 release file

0.11.59

1 release file

0.11.56

1 release file

0.11.52

1 release file

0.11.48

1 release file

0.11.44

1 release file

0.11.40

1 release file

0.11.36

1 release file

0.11.32

1 release file

0.11.29

1 release file

0.11.25

1 release file

0.11.21

1 release file

0.11.17

1 release file

0.11.9

1 release file

0.11.5

1 release file

0.11.1

1 release file

0.10.77

1 release file

0.10.75

1 release file

0.10.74

1 release file

0.10.72

1 release file

0.10.70

1 release file

0.10.68

1 release file

0.10.65

1 release file

0.10.60

1 release file

0.10.56

1 release file

0.10.38

1 release file

0.10.33

1 release file

0.10.30

1 release file

0.10.25

1 release file

0.10.21

1 release file

0.10.13

1 release file

0.10.12

1 release file

0.10.9

1 release file

0.10.6

1 release file

0.10.1

1 release file

0.9.101

1 release file

0.9.97

1 release file

0.9.92

1 release file

0.9.89

1 release file

0.9.78

1 release file

0.9.77

1 release file

0.9.76

1 release file

0.9.75

1 release file

0.9.74

1 release file

0.9.73

1 release file

0.9.72

1 release file

0.9.71

1 release file

0.9.70

1 release file

0.9.69

1 release file

0.9.68

1 release file

0.9.67

1 release file

0.9.66

1 release file

0.9.64

1 release file

0.9.63

1 release file

0.9.62

1 release file

0.9.61

1 release file

0.9.60

1 release file

0.9.59

1 release file

0.9.58

1 release file

0.9.57

1 release file

0.9.56

1 release file

0.9.55

1 release file

0.9.54

1 release file

0.9.53

1 release file

0.9.52

1 release file

0.9.51

1 release file

0.9.50

1 release file

0.9.49

1 release file

0.9.48

1 release file

0.9.47

1 release file

0.9.46

1 release file

0.9.45

2 release files

0.9.44

2 release files

0.9.43

2 release files

0.9.42

2 release files

0.9.41

2 release files

0.9.38

2 release files

0.9.37

2 release files

0.9.36

2 release files

0.9.35

2 release files

0.9.34

2 release files

0.9.29

2 release files

0.9.26

2 release files

0.9.25

2 release files

0.9.24

2 release files

0.9.22

2 release files

0.9.21

2 release files

0.9.20

2 release files

0.9.19

2 release files

0.9.17

2 release files

0.9.16

2 release files

0.9.15

2 release files

0.9.14

2 release files

0.9.13

2 release files

0.9.12

2 release files

0.9.11

2 release files

0.9.10

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page