CraftControl banner

CraftControl

18 devlogs
20h 20m 25s

A simple Python MIDI monitor for using DDJ-FLEX4 as alternative input devices for Minecraft.

This project uses AI

Used AI to:
- ONLY correct spelling mistakes in devlogs and documentation
- Pack the project into an EXE file
- Find the mouse handling code in the Minecraft source code (=> for better implementation)
- Fix 1 tricky bug that cost me more than 1.5 hours

Demo Repository

Loading README...

Ivole32

Shipped this project!

Hours: 3.09
Cookies: 🍪 88
Multiplier: 23.68 cookies/hr

CraftControl is Shipping again

What is CraftControl

CraftControl is a powerful and flexible MIDI controller mapping system that converts MIDI inputs from DJ controllers (like the DDJ FLX-4) into keyboard shortcuts and mouse movements. Perfect for controlling games, software, or any application like Minecraft with your DJ controller!

It comes with a configuration software for Windows.

Why I Made CraftControl

Personally, I made CraftControl because I wanted to create a cool way to use my DDJ FLX-4 DJ controller I got for Christmas. That’s because I currently don’t have that much time to practice, as I’m busy coding, so I can’t really use it as intended.

What changed since the last ship?

Since the last ship I focused on some small changes requested by users. I implemented a auto mapping gfeature for keybinds and improved some of the documentation. I would do more if I had enought time until Flavortown ends. But I really need ~75 cookies to get my dream prices so I hope you like it :D

What Challenges I Faced

I faced some challenges during the development of CraftControl. Especially the mouse control was really hard because Minecraft handles mouse movement much differently than your desktop, which made the development way harder. I had to read the Minecraft source code to see how they do it, but still couldn’t figure out a perfect way. But figuring out a way is better than not figuring out a way, so that’s a win even if it’s not perfect. One challenge since the last ship was getting the click feature for opening the auto-binding window from the MIDI logs to work.

But in the end, I got everything working exactly the way I wanted it to.

What I Learned Building This

During building the project, I learned how MIDI messages work and how to write efficient code to bind every input type to specific actions with different requirements. In this specific ship, I learned how to use tags in CustomTkinter.

Future Possibilities

I think the project is finished for now, but there are always ways to improve it. So I think in the future I could make the UI more intuitive or implement a Minecraft mod for this, as it would probably solve the mouse movement problems.

Ivole32

2026-04-29 [2]

I think the project is ready to ship again, as I don’t know any other features I could implement in the remaining time of Flavortown.

As my final action, I documented the MIDI router so I’ll understand what’s going on when I open the project again in the future.

Thanks for your support, and have fun with my project!

Changelog

0
Ivole32

2026-04-29 [1]

After mentioning in my last devlog that the hovering bug causing lag when hovering over MIDI log outputs was fixed, it happened as expected: another bug in the MIDI log output appeared.

When hovering over the log widget and then leaving it on the right side, the text would remain stuck in the hover state. Fortunately, I was able to fix it quickly, as it was only caused by a typo in my code: I wrote midi_messahe_hover instead of midi_message_hover.

After fixing this issue, I released a new version (v1.0.2), which you can find here:
https://github.com/Ivole32/CraftControl/releases/tag/v1.0.2

I believe the project is now in a stable state.

Changelog

0
Ivole32

2026-04-28 [2]

I did what I thought would be really complicated. I fixed the lag that I mentioned in the last devlog that was caused when hovering over a MIDI log entry. It was a quick fix that introduced the issue that you couldn’t scroll in the MIDI logs, so I fixed that too.

Changelog

0
Ivole32

2026-04-28 [1]

After some changes to the user experience and documentation in the last devlog, I implemented the requested feature of an auto-mapping function. You can now click on MIDI log entries and auto-map them to a specific keybind. Sadly, I could only implement this feature for keyboard binds. I couldn’t implement it for mouse actions, as mouse movement requires two different 7-bit control values that are used to calculate a specific value for faders, etc. I couldn’t implement this yet.

But there is another problem that I will fix very soon. Hovering over the MIDI log entries is a bit laggy. But I figured that it is okay for now and released a pre-release on GitHub: https://github.com/Ivole32/CraftControl/releases/tag/v1.0.2_Beta.

I’ll fix this soon, so stay tuned.

Changelog

0
Ivole32

2026-04-27 [2]

In the last 0.5 hours, I made some small changes to the documentation and developer experience. First, I added a notice to the documentation stating that you can bind keyboard shortcuts to MIDI buttons. I linked specific documentation for the library I used for this, and I hope that helps some people. I also implemented a new build argument in the build_exe.ps1 file to support a version string as an argument named -version, which includes the version number in the file names of newly built .exe files.

Changelog

0
Ivole32

2026-04-27 [1] - Here we go again

Hey guys. I never thought that I would be posting a new devlog for this project again. But as if the universe wanted it this way, I need 74 more cookies to get the prizes I really want and thought that this is the project I had the most fun with and got the best feedback on. So here we go again.

What Features Will Be Added

In the time until the next ship, I will implement a requested auto-mapping feature and much more that comes to my mind.

Changelog

Attachment
0
Ivole32

Shipped this project!

Hours: 17.25
Cookies: 🍪 374
Multiplier: 21.7 cookies/hr

CraftControl is Shipping

What is CraftControl

CraftControl is a powerful and flexible MIDI controller mapping system that converts MIDI inputs from DJ controllers (like the DDJ FLX-4) into keyboard shortcuts and mouse movements. Perfect for controlling games, software, or any application like Minecraft with your DJ controller!

It comes with a configuration software for Windows.

Why I Made CraftControl

Personally, I made CraftControl because I wanted to create a cool way to use my DDJ FLX-4 DJ controller I got for Christmas. That’s because I currently don’t have that much time to practice, as I’m busy coding, so I can’t really use it as intended.

What Challenges I Faced

I faced some challenges during the development of CraftControl. Especially the mouse control was really hard because Minecraft handles mouse movement much differently than your desktop, which made the development way harder. I had to read the Minecraft source code to see how they do it, but still couldn’t figure out a perfect way. But figuring out a way is better than not figuring out a way, so that’s a win even if it’s not perfect.

What I Learned Building This

During building the project, I learned how MIDI messages work and how to write efficient code to bind every input type to specific actions with different requirements.

Future Possibilities

I think the project is finished for now, but there are always ways to improve it. So I think in the future I could make the UI more intuitive or implement a Minecraft mod for this, as it would probably solve the mouse movement problems.

Ivole32

2026-04-16 [1]

I’m proud to announce that this is the last devlog before I ship this project. I think it is finished now, as I can’t think of other features I could add (let me know by a feature request in my repo if you think differently). In the time span of the devlog, I focused on making clean documentation / README to have a good-looking repository. I now have a wiki page and a proper README.

Thanks for your support and see you soon in other projects!

Changelog

0
Ivole32

2026-04-15 [1]

In the past time I developed a full UI application in CustomTkinter to manage keybind configuration and starting/stopping the MIDI listener and much more. I even managed to pack everything into a working EXE file that can be downloaded in my newest GitHub release

Sadly, I couldn’t track the time for that as I developed it on another machine. I’m really proud of my project and think it will soon come to an end. But now I’ll have to do the most annoying part: writing documentation on how to use the project and maybe cleaning up some code and documenting it too.

If you have any feature requests, please let me know by opening a GitHub issue.

Changelog

Attachment
0
Ivole32

2026-04-13 [1]

Sadly, I didn’t find a perfect solution to the mouse movement problems, but I managed to get a usable version working by recreating parts of the Minecraft source code and using its sensitivity logic in my own program. It is not perfect, but sometimes you have to accept that not everything is perfect and some things may never be (hopefully this one will improve over time).

However, I now have mouse movement working via the DDJ FLX-4 faders. There are still some things missing though. What about clicking? Mining and fighting in Minecraft depend on that, so that is what I will focus on next. I hope and believe this will be much easier now that I have the right foundation.

See you soon :D

Changelog

0
Ivole32

2026-04-12 [1]

Like I told you all in my last devlog, I’m currently working on the mouse control for CraftControl. And how am I going to say this… there is no real progress after so many hours.

The thing is, I got mouse controls working on my desktop, but not in Minecraft since it uses a different system for mouse control. So I could just set a multiplication somewhere so it works, right? But that would break my code for everyone who doesn’t have a 4K monitor like me.

So I’m trying to figure out a way to get it to automatically calibrate to the monitor and not use a hardcoded value. I guess I have to dig into the Minecraft source code to find how mouse movement is handled.

Hopefully you’ll read another devlog when I find a solution :D

Changelog

0
Ivole32

2026-04-11 [1]

For this devlog, let’s take a look back at what I did:

I implemented a functional program to bind buttons on my DDJ FLX-4, and it works great.
But do you see the catch?

There is no functionality to bind any mouse actions to the DJ deck.
So I wanted to change that and immediately ran into some issues. The faders I wanted to use to simulate the mouse seemed to return two random values, and working with them is really hard if you don’t know what they even mean. So I had to find out what their meaning is to make mouse movement via the board possible.

Turns out the DDJ FLX-4 uses a 14-bit way of transferring fader values. These are split into two 7-bit values, where one of them is an MSB value and the other is an LSB value. I didn’t know what that meant, so I asked our great friend ChatGPT to explain it to me, and it is basically a good way to represent exact values. I asked it to generate a graphic so I (and you) could understand it, and it is really good. Look at it yourself.

So I wanted to share this with you because I think it is important to remember that progress is not always measured in what you build, but in what you learn along the way.

Changelog

Attachment
0
Ivole32

2026-04-10 [3]

Since my last devlog, I implemented a “simple” way to configure keybinds for MIDI inputs. I now have a configuration file where you can specify a combination of MIDI message values and map them to a real action, such as a shortcut or a keyboard key.

While implementing this feature, I came across two major bugs:

  • A theoretical bug that would cause a value of 0 not to be used in the bindings list
  • A bug that caused every keybind to trigger the last registered one

This second bug cost me more than an hour and could only be solved with the combined brainpower of my dad and me, because it was caused by a tricky lambda behavior.

Next steps

The next steps will be creating a fully functional preconfigured setup for the DDJ-FLX4 controller for Minecraft.
I may also implement a GUI application and clean up the code.

Changelog

0
Ivole32

2026-04-10 [2]

In the past 1.5 hours, I implemented a system to register MIDI keybinds and bind them to custom keyboard keybinds. This includes support for most of MIDI values like channel control and value/velocity. Now I want to implement an easy-to-use configuration file and work out a basic configuration you can try out.

Changelog

0
Ivole32

2026-02-10 [1]

After a long time, I decided to work on this project again. But there is one catch: I made some parts of the project with AI, and it got really messy and buggy. So I decided to start all over again. I really want to do everything by myself and not have it made by AI. Even if I spend some time using it, it is not the right way for this project.

0
Ivole32

I’ve got some basic controls working. As shown in the video, movement (WASD) is controlled using the jog wheels on both decks. My next goal is to build a fully configurable system that anyone can adapt to their own preferences.

0
Ivole32

I wrote a Python script that allows selecting a MIDI controller and displays all incoming input data in real time. The script detects buttons, knobs, faders, and jog wheels and prints their MIDI events, making it easy to analyze and understand the controller’s behavior. Next, I’m starting to figure out the best way to track these inputs and translate them into real Minecraft key bindings.

Attachment
0