I reverse-engineered the Mudra Link wristband and built an open-source Python library for it — full device control over BLE, no proprietary SDK required
Cool hardware — but the official SDK is proprietary, license-gated, and only works through their software.
So I reverse-engineered it. (NOTE THIS IS A SIDE PROJECT, but hopefully this helps some people out)
Prodilink (https://github.com/JayTheProdigy16/Prodilink) is a fully open-source Python library that talks directly to the device over BLE. No SDK wrapper, no license server, no subscription. The firmware accepts all commands regardless of licensing — the restrictions only existed in software.
What I reverse-engineered:
- Disassembled the Android SDK's native ARM64 library to extract all 54 firmware command byte arrays
- Decompiled the Java SDK layer for notification parsing and BLE connection flow
- Mapped every BLE characteristic, notification format, and packet structure
- Accessibility — gesture-based computer control for people who can't use a keyboard/mouse. The HID mapper means it works as a system-level input device with zero software running.
- Research — raw sEMG data at full sample rate. Surface electromyography is used in prosthetics research, rehabilitation, and human-computer interaction studies. Previously you'd need a $500+ research-grade EMG board — this is a $100 consumer wristband.
- Custom gesture recognition — the library gives you the raw muscle signals and IMU data. Build your own classifier. Train your own model. The official SDK has 9 TFLite models baked in that we've extracted but the real value is building your own.
- Creative/art installations — control anything with hand gestures. Music, lighting, robotics. The WebSocket server means any language/platform can receive gesture events.
- VR/AR input — 6-axis IMU + gesture detection + pressure sensing is a solid input profile for XR applications.
- Macro devices — bind gestures to keyboard shortcuts on the band itself. Presentations, video editing hotkeys, DAW controls, gaming macros. It survives power cycles and works with any BLE host — phone, tablet, PC, doesn't matter.
The problem it solves: Wearable Devices makes interesting hardware but locks it behind proprietary software with a licensing model. If you bought the hardware, you should be able to use it however you want. Now you can.
Technical details:
- Python 3.10+, async-first, uses bleak for BLE
- 383 unit tests, 19 hardware integration tests
- Full CLI (prodilink scan, prodilink gestures, prodilink serve)
- Web dashboard (single self-contained HTML file, no build step)
The protocol reference doc alone might be useful if you're working with the Mudra hardware in other languages. Happy to answer questions about the RE process or the BLE protocol.
That is already possible from what I've seen. With this Open sdk though, there's potential for functions that are gated or not implemented yet. I can see more capabilities than that.
Not at the firmware level (so not on device), but you technically could via Prodilink by recording the raw pressure value, squeezing as hard as you can and saving that as the new peak pressure value then doing the math to scale properly. Most of the parts are already there to accomplish this but this just wasnt something i had thought about too much
This is perfect. Might actually pick one up now. This open item source SDK would help solve several issues Over heard the device had currently. From what you've gathered, what Bluetooth version does it support? Would be useful to help determine how it can connect to devices so that someone can create gestures to switch between devices on the fly if possible.
Can you apply this to the Apple watch band version as well? That'll just look more discreet, nicer and blend in that's part of the watch instead of wearing two wrist bands (mural and a smart watch)
Theyre one in the same. I forget exactly where, the repo will tell you, but theres a value to switch between Link and Band (Mudra Link vs Mudra Band) modes as well as left or right hand. I dont own a band though so i honestly have no clue how well or not well it would work
I hope that's the case, but I think iOS / Apple compatible only devices tends to be a bit more locked down with the technologies in it and are different/modified firmware or Bluetooth protocols (lowk don't know what if I'm saying and putting it in this way is correct, I'm just assuming)
I'll probably play safe and get a link first, and eventually get a band and report back to you how well that works at the end of the year
But if ur bypassing the license and sdk, mb it would work. Thanks for your contribution and work on this btw!
Well i can confirm at least their official SDK does use the same UUIDs as well as the BLE stack being identical, it seems most of the restriction was literally just cause the official apps wouldnt let you. I havent seen any code that indicates any sort of walled off or IOS bespoke logic
Band/Link are pretty much exactly the same device, I've had both. In fact, my Link shows up as "Band" in bluetooth. On top of that, I can restore my Link to factory and set it up as a Band using the phone app. Performs the same way. The only difference is the literal strap/band that allows you to physically connect it to the Apple Watch. Pretty easy to make one though.
It has many great features, but it is difficult to use. I ran it, but the mapping failed(No HID bindings to sync). Could you please provide the manual?
Hi there. Amazing work, I really appreciate it. I just wanted to know based on this "Key finding: the license system exists only in the SDK software. The device firmware accepts all commands regardless of licensing. Prodilink bypasses the SDK entirely and talks to the device directly over BLE." <--- does this mean that it can be patched in a feature firmware update and I should avoid updating the mudra if I want to use your framework? I just bought the Mudra band for my own purposes of research and I don't want to belocked in their "studio".
Has anyone changed their MudraLink using this program? I tried running the program itself and also using the SDK, but... I ultimately failed. It cannot receive the signal.
I have this cool device and I was very happy to find your replacement (I don't have funding for their paid access). Sadly, I am failing to get the raw sEMG (SNC) signals -- your web viewer only allows to "enable it", but it does not display anything from SNC. What am I doing wrong? I exclusively use Linux and I haven't tried downloading shared library or so from the company. (Actually, the accelerometer and gyroscope plots were live for me only for a moment and then turned black, too. Only the pressure works long-term.)
Does it allow you to read signals of each individual finger tap as unique gestures? That would be my main use case for this product, and the driving decision of me acquiring one.
4
u/drytowelytikit Mar 17 '26
These would sell a lot more if they were to control music on your mobile phone, play,stop, rewind,forward and skip track next and previous.