Inspiration
Blender has over 14 million monthly active users, making it the world's most popular free 3D creation tool. Yet on the Logitech MX Marketplace, there is no native Blender plugin — only basic keyboard shortcut profiles inherited from the old Loupedeck platform, which have known modifier key compatibility issues on macOS.
We saw an opportunity to build the first true API-level Blender plugin for the MX Creative Console, and to push it further with AI-powered 3D generation.
What it does
BlenderFlow AI transforms the MX Creative Console into a dedicated Blender control surface, talking to Blender directly via a WebSocket bridge rather than synthetic keystrokes:
- Dial — Smooth, continuous viewport orbit and zoom (direct quaternion and view-distance manipulation — no discrete 15° Numpad jumps)
- LCD keys — One-tap mode switching (Object / Edit / Sculpt / Texture Paint) with dynamic, color-coded icons that reflect Blender's live state
- Mesh tools — Extrude, Bevel, Loop Cut; plus Undo, Redo, Save, Render, and direct orthographic-view keys (Front / Right / Top / Camera)
- Roller dials — Brush size, brush strength, and timeline frame scrub (press to play/pause)
- Haptic feedback — Physical confirmation on mode changes and operation completion
The AI layer — what sets us apart:
- Press one key to generate 3D models from text, with three
providers built in:
- Hyper3D Rodin (default) — zero-config via a shared free-trial key, so the first model is one keypress away
- Hunyuan3D (Tencent Cloud) — reachable from mainland China without a VPN, unlocking a huge slice of the 3D community
- Tripo — for users already on that stack
- Live progress on Blender's status bar as the model generates; automatic import into the scene on completion
How we built it
- Logi Actions SDK (C# / .NET 8) — plugin core with Commands and Adjustments, custom-drawn theme-aware icons for every action
- Blender Python addon — asyncio WebSocket server on
ws://localhost:9876, routing events tobpy.opson Blender's main thread viabpy.app.timers - Hyper3D Rodin / Hunyuan3D / Tripo APIs — unified provider
abstraction with a common
generate → poll → importlifecycle - TC3-HMAC-SHA256 signing for Hunyuan3D, hand-rolled to avoid pulling in Tencent's full SDK
Challenges we ran into
macOS strips modifier keys from synthetic events. Our first cut
used SendKeyboardShortcut(VirtualKeyCode.KeyZ, ModifierKey.Command)
for Undo, Save, etc. It works fine for Spotlight, but Blender's GHOST
window layer filters the modifier flag off — Cmd+Z arrived as a bare
Z, which opens the shading pie instead of undoing. We tried
ControlOrCommand, AppleScript injection, several alternatives — all
stripped. The fix: stop pretending to be a keyboard entirely and call
Blender operators directly over the WebSocket. Works identically on
macOS and Windows, doesn't require Blender to be focused.
Silent mode-switch failures. Pressing the mode key would
occasionally do nothing. Cause: bpy.ops.object.mode_set silently
no-ops if there's no active object, or if the active object's type
can't accept the target mode (Camera can't enter Edit mode).
Exceptions went to stdout, invisible on macOS unless Blender was
launched from a terminal. We added a compatibility table that
auto-picks a suitable object, and surfaces genuine failures as a
3-second status-bar flash.
Smooth orbit at fine steps. Numpad keystroke-per-tick felt jerky;
even throttled. The real fix was to mutate region_3d.view_rotation
(a quaternion) directly, which produces genuinely continuous dial
motion.
Accomplishments that we're proud of
- First native API-level Logitech plugin for Blender — closes a visible gap in the MX Creative Console's app ecosystem
- Works in mainland China without a VPN, via Hunyuan3D — a real unlock for a huge slice of the 3D community
- Zero-config AI 3D generation — a brand-new user can produce their first model with no signup required
- Custom iconography system — every action has a hand-drawn, theme-accurate icon, so the console feels native to Blender
- Haptic feedback + live status-bar progress — the console and Blender stay visually in sync with each other throughout every operation
What we learned
- "Synthetic keyboard events" is a leaky abstraction. Where modifier keys matter, prefer a domain-level IPC.
- Blender's addon reload semantics are subtle —
importlib.reloaddoesn't reload__init__.py, which bit us more than once. - Provider abstraction pays off fast. The second provider took 40% of the first's effort; the third even less.
- "Open the terminal to see the error" is not a UX. Every failure path needs a user-visible signal.
What's next
- Windows real-hardware validation — the code is cross-platform, but a full end-to-end pass on Windows with a physical console is still pending
- More Blender actions — Knife tool, Snap menu, material swatches on dials, reference-image drop zones, and other high-frequency editor operations
- A proper onboarding flow — so the very first run makes it obvious that pressing AI Generate opens a dialog for the prompt
- Logitech Marketplace launch — polished docs, icon pack, demo video, and a public release
Built With
- .net
- blender
- c#
- hunyuan3d
- hyper3d-rodin
- logi-actions-sdk
- logitech
- python
- tripo
- websockets
Log in or sign up for Devpost to join the conversation.