Skip to main content

A multi-application marking menu and UI framework for Maya, 3ds Max, and Blender.

Project description

Tests License: LGPL v3 Version

Tentacle

A Qt marking-menu (pie-menu) launcher for DCC apps. Hold a hotkey, flick toward a wedge, release — the tool runs. Submenus open along the gesture path.

Tentacle is the Maya-flavored shell on top of uitk.MarkingMenu. It ships ~60 Maya tool panels (modeling, UV, materials, rigging, animation, rendering, …) and wrapper entry points for Blender and 3ds Max.

Demo

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).

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 (wrapper, no slot library yet)
├── slots/
│   ├── _slots.py          Slots base — repeat-last-command shortcut
│   └── maya/              ~60 SlotsMaya subclasses
└── ui/                    .ui definitions; maya_menus/ holds Maya submenus

Platform support

DCC Status
Maya 2025+ Full — entry point, slot library, all menus wired.
Blender Wrapper only (TclBlender).
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.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tentacletk-0.12.3-py3-none-any.whl (255.0 kB view details)

Uploaded Python 3

File details

Details for the file tentacletk-0.12.3-py3-none-any.whl.

File metadata

  • Download URL: tentacletk-0.12.3-py3-none-any.whl
  • Upload date:
  • Size: 255.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for tentacletk-0.12.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6179adb50f65604cff39e11c48bf0de1de6d9cb0e41b69e6f515a4b34046eb97
MD5 5dc3fbb2a4225a55c3b9f5056fd3c49c
BLAKE2b-256 6d057d341df8d7beebc893fbf64570693d82b632889e62eef4b0bb6410232a96

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page