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.
Install
"C:/Program Files/Autodesk/Maya2025/bin/mayapy.exe" -m pip install tentacletk
Or use the bundled mayapy package manager — pick your Maya version, press 1, type tentacletk.
Requires Python 3.9+ and Qt via qtpy (PySide2 or PySide6). The upstream toolkit packages pythontk, uitk, and mayatk are pulled in automatically.
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.
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
API_REGISTRY.md— every public class/method, with file:line links.CHANGELOG.md— notable changes.CLAUDE.md— contributor conventions.uitk/docs/MARKING_MENU.md— chord syntax, gesture mechanics.
License
Release files for tentacletk 0.13.29
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 |
|---|---|---|---|---|
| tentacletk-0.13.29-py3-none-any.whl | Python 3 | none | any | Details |
Release files / tentacletk-0.13.29-py3-none-any.whl
| Download URL | tentacletk-0.13.29-py3-none-any.whl |
|---|---|
| Size | 508.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9ba3d01701701cbc97bbee7f09d01584da22b5c3991a85484326a2c5048c4c40
|
|
BLAKE2b-256 checksum How to use checksums |
8a865416e684e91a5be33924f7e0835a2cedc711d85f330692736411db868930
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|