
KnobKraft-orm
Hype12/100The KnobKraft Orm - The free modern cross-platform MIDI Sysex Librarian
KnobKraft-orm is custom firmware for the Korg minilogue xd, Elektron Analog Rytm, and Elektron Digitone, by @christofmuc. Open source under AGPL-3.0, latest release 2.10.2 (September 2026), 295 stars on GitHub.
forKorg minilogue xd,Elektron Analog Rytm,Elektron Digitone·by@christofmuc
Unclaimed. Is this yours? Sign in with GitHub as @christofmuc to claim it.
knobkraft_orm_setup_2.10.2.exe· 66 MB· +3 files
AGPL-3.0· christofmuc/KnobKraft-orm·downloads come from the creator’s GitHub releases
2.10.2Latest4 files
Features:
- #417 and #579 Added separate actions to check saved connections, find all synths, check one synth's saved route, or search only for that synth. This makes it much quicker to reconnect a DIN synth powered on after KnobKraft and keeps existing MIDI input listeners intact during searches. Thanks to @RadekPilich for the request! The automated connection and cancellation tests pass; physical reconnection during an active scan still needs hardware verification.
- #478 and #578 Python adaptations can now provide named, preformatted patch views for the current-patch sidebar and patch comparison. Formatting is preserved, matching views are compared with JUCE's text diff, and the Korg MS2000 adaptation includes an unescaped payload view with offsets. Thanks to @RadekPilich for the idea and detailed examples!
- #468 and #580 Fixed the secondary MIDI output so program changes, bank select, notes, SysEx and realtime messages are forwarded independently of the MIDI log filter. Adaptation API level 3 also adds optional
onPatchSelectedandonPatchSenthooks, allowing a personalized adaptation to send controller setup messages when browsing or successfully sending a patch. Thanks to @RadekPilich for the original request, testing and Faderfox EC4 use case!
Bug fixes:
- #547 and #563 Corrected Korg R3 program and edit-buffer dump sizes. Valid hardware dumps are now recognized instead of leaving bank downloads at zero, while incomplete and malformed messages remain rejected. Thanks to @molenick for the report, the working implementation reference and the captured response! Automated protocol fixtures pass; a complete hardware capture is still welcome for the separate A1-request/B1-response observation.
- #582 and #583 Fixed a missing pybind11 STL converter that made Python adaptation
bankSelectcalls fail on macOS, as reported with the Sequential Prophet 12. Thanks to @kisielk for the report! The regression passes on macOS and Windows. - #553 Updated JUCE from 8.0.12 to 8.0.15, including its Linux ALSA fix that falls back to legacy byte-stream MIDI when a destination does not support UMP. This addresses the all-message output failure isolated with the Kawai K5000S loopback test. Thanks to @firstnevyn for the logs, captures and careful testing! A K5000 hardware retest is still required; the separate Bank D import-before-detection and unsupported Multi-classification problems remain open.
- Improved macOS release packaging by retrying forced detach of temporary disk images and preserving the failure result when every attempt fails.
2.10.14 files
Features:
- #426 Python adaptations can now wait for a synth to acknowledge uploads. Bank sends advance only after each patch is accepted, while device errors, timeouts and cancellations stop the transfer instead of continuing blindly. The Kawai K5000 uses this to recognize Write Complete and report write protection, full memory, missing expansion memory and other write failures. This is covered by simulated MIDI and C++ integration tests, but still needs confirmation on real K5000 hardware. Thanks to @markusschloesser for clarifying the K5000 write-acknowledgement protocol!
Bug fixes:
- #573 Long bank downloads such as the Korg X3 no longer time out after ten seconds while partial SysEx data is still arriving. Thanks to @rolfoosting for the clear regression report! Automated timeout regressions pass; a hardware retest is still welcome.
- #574 Behringer UB-Xa edit-buffer and bank downloads now recognize the broadcast FDS transfer followed by the device-addressed universal end message seen in the hardware trace. Thanks to @figman2 for the report and MIDI log! The parser and simulated transfers are covered, but the reported native crash was not present in the capture and should still be retested on the synth.
- #559 and #570 Malformed Clavia Nord Lead MIDI files with embedded status bytes are now rejected instead of silently returning only the earlier valid patches. The setup documentation also clarifies that live memory-card banks depend on the model and installed card. The adaptation remains alpha and this hardening was not tested on hardware.
2.10.04 files
Features:
- #518 Adaptations can now reply during bank transfers, including the handshakes needed by older synths such as the MKS-50. Failed or rejected transfers are reported as failures instead of importing a partial bank, and stalled transfers have timeout handling.
- Added an adaptation API level check. Adaptations which need newer host functionality can now explain why they cannot run in an older KnobKraft version. The new MKS-50 adaptation uses this check, so please update the application as well as the Python file!
- Expanded the automated tests with real patch files, simulated MIDI transfers, malformed dumps, database operations and import/rename regressions. This helps catch problems without having every supported synth here, though it is still no replacement for your hardware testing!
Synths:
- #531 and #558 Three new adaptations from @Casuallynoted: Behringer UB-Xa, Casio CZ-101/CZ-1000, and Ensoniq Mirage running SoundProcess OS. Many thanks for the contribution and the testing! All three are included as alpha adaptations, with additional validation and regression tests. The Mirage adaptation is for SoundProcess, not the original sampler OS, and uses Patch 1 as its audition buffer, replacing its contents. UB-Xa and the Mirage's alternate SysEx header still need more hardware testing. Thanks also to @and-kal for making the Casio test patch available under the Unlicense.
- #535 Added Sequential Fourm support, including all four banks and edit-buffer audition. Tested with a real patch dump and simulated MIDI; marked beta until we have more hardware feedback.
- #550 and #559 Added Clavia Nord Lead / Nord Lead 2 / Nord Lead 2X support. This includes normal program dumps and older MIDI-file banks, with official Nord files used for testing. Direct downloads cover four banks; the 2X's additional ROM banks can be imported from files. Percussion kits, performances and Nord Lead 3 or later are not covered. This is alpha support, so feedback from owners is very welcome!
- #307 and #518 Replaced the native Roland MKS-50 implementation with a Python adaptation, including Alpha Juno-1/2 tone-bank compatibility and proper 64-tone bulk-bank export. Existing patches saved by the old C++ implementation remain readable. Start bank downloads from the synth's front panel; two-way transfers now receive handshake replies. Patch-parameter and chord-memory banks are not supported. Many thanks to @planist79 for the detailed report, example banks and patient follow-up, and to @markusschloesser for connecting the related bank-export reports!
- #545 Improved Sequential Pro 3 user/factory bank handling, with U1-U4 and read-only F5-F8 labels, clearer setup help, and a 50 ms message delay following the hardware report. Thanks to @gmtta for reporting the trouble and @RadekPilich for investigating and supplying the changes! A hardware retest of the original import problem is still welcome.
- #533 and #567 The Roland SE-02 adaptation can now import
.PRMfiles from USB backups directly, without a separate conversion step. Many thanks to @MammaScan for the converter, reference file and the suggestion to integrate it! Conversion uses the converter's parameter mapping and template defaults;COM_OCT,COM_TRNS,COM_PWM_DEPTHandCOM_PWM_RATEare not converted, so this is not yet a lossless backup restore. Tested against the original converter, but hardware playback still needs verification. Store auditioned sounds permanently with WRITE on the SE-02. - #503 Thanks to @Casuallynoted for testing Roland U-20/U-220 support and reporting that it works well! The adaptation was added in 2.9.0; this release adds the deserved credit.
Bug fixes:
- #542 The Sequential Trigon-6 adaptation was listed as supported but missing from the installer. It is now shipped. Thanks to @CoolColJ for spotting this!
- #543 and #566 Reimporting a Trigon-6 patch called "Basic Program" no longer replaces the custom name assigned in KnobKraft. Thanks again to @CoolColJ for the report and the follow-up details! This fixes the lost-name symptom; the separately reported skipped/misaligned bulk-rename rows still need investigation.
- #548 Sending an empty or partially filled user bank now shows an error instead of crashing before any MIDI is sent. Fill every slot before sending the bank. Thanks to @molenick for the Korg R3 crash report and reproduction steps!
- #555 and #556 Fixed banks being parsed twice when the same incoming data was recognized both as individual program dumps and as a complete bank, as with the Access Virus. Identical sounds in different bank slots are still preserved.
- #556 Fingerprint checks now work on copies of patch data, so an adaptation's duplicate-detection code cannot accidentally modify the patches being imported.
- #560 Shared Roland adaptations now validate complete DT1 dumps and preserve block addresses when converting or renaming reordered messages, including supported JV family length variants. This prevents equal-sized tone blocks from silently trading places and rejects incomplete or corrupt dumps.
- #561 Roland XV-3080/5080/5050 requests and patch sends now consistently use the detected device ID, including compatible JV imports, rather than falling back to the default ID.
- #562 Equivalent Roland program and edit-buffer dumps now share a fingerprint regardless of patch name, device ID or block order. Back up your database, restart Orm, then use Edit > Reindex patches... for each affected JV/JD-Xi/XV synth before importing more patches. Ordinary program hashes are preserved, but some old representations need reindexing and duplicate sounds may merge. Recordings named by old fingerprints are not automatically renamed. Please read the compatibility and migration details first.
- Hardened SysEx parsing against truncated and unterminated messages, and added regression tests for rejected bank transfers and recovery on the next import.
Thanks also to @art507 for the additional naming feedback in #543, and to everybody sending reports, logs, patch files and hardware test results. Not every report is solved yet, but these details make a big difference!
2.9.02.9.0 - Many new synths4 files
Features:
- #438 Added the LegacyLoaderCapability for adaptations that need to load older or non-standard file formats, and documented the new hook in the Adaptation Programming Guide.
- #508 Added the CustomProgramChangeCapability Python binding so adaptations can define their own program change behavior.
- Added a simulated MIDI wire test layer for adaptation tests, covering bank downloads, edit buffer requests, and send-to-synth code paths.
- Exposed the filename currently being processed to Python adaptations, so file-based import logic can make better decisions.
Synths:
- #433 and #72 Added the Kawai K5000 adaptation with bank import support and test data. Heroic effort by @markusschloesser on this what I think is our most complex adpatation yet!
- #517 Added the Roland SE-02 adaptation contributed by @MammaScan. Many thanks for this!
- #501 Improved Korg microKORG/microKORG S bank dump requests from @ilantz by returning the request sequence in the format expected by the C++ sender.
- #460 Korg R3 adaptation added. By now it is possible to get adaptations 100% written by AI by just giving them the manual download. This adds a new GenericKorg python module which can be used for new Korg adaptations to reduce code duplication.
- #464 Roland JD-Xi adaptation added, also 100% AI
- #503 Roland U-20/U-220 adpatation added, also 100% AI.
- Improved the Roland D-50 adaptation and used it to the new mock MIDI tests, extending test coverage.
Bug fixes:
- #520 Improved CMake Python detection with a fallback path and explicit Python 3.12+ version checks. Thanks for @ilantz for this!
- #525 Updated bundled third-party libraries, including JUCE 8.0.12, pybind11 3.0.3, spdlog 1.17.0, fmt 12.1.0, doctest 2.5.2, json 3.12.0, json-schema-validator 2.4.0, ICU, and WinSparkle.
- #524 Updated pytest to 9.0.3.
- #319 Added a docker build step testing that the archlinux version can be built as described by the README. Thanks to @fractalf for the details!
- Hardened the macOS
hdiutilretry script and fixed an off-by-one retry loop error. - Fixed a crash when a program buffer synth returned an empty list of bank descriptors.
2.8.42.8.4 - Fixing duplication and refresh issues4 files
Bug fixes:
- #512 and #408: Fix patch grid not refreshing properly on category assignments and flag setting be fixed by 2.8.3, potentially causing duplicate user bank names.
- Bug fix: Remove patch duplication in Library view occuring with patches imported multiple times.
- Added unit tests for the various patch search combinations
2.8.32.8.3 - bug fixes to get 2.8.x out of beta statusBeta4 files
Bug fixes:
- #504: Fix user banks created as synth banks by 2.8.x, causing the first save to work and subsequent saves to go into a different list (potentially duplicating the list in that process). Database will be fixed by 2.8.3, potentially causing duplicate user bank names.
- #499 Categories do not refresh when database is changed and that has different categories
- #484 Fix rotating behavior in auto fill new user bank from start patch. If there are not enough patches, just repeat the last one instead of starting again from the first one.
- #408: Macro keyboard does not properly allow page transitions forward and backward. Stop hiding patches immediately when hide is clicked because it confuses the macro navigation.
- #136: Generic timeout mechanism by forwarding empty MIDI messages into the callback handler when a timeout has passed. By default, the timeout is 30 seconds in order not to break any existing slow synths, but shorter timeouts can be reported by the adaptations via the messageTimings function. Adaptation Programming Guide was adapted.
- Macro detection is now edge-triggered: The Orm tracks active macro states and only fires when a macro chord transitions from not-matched to matched, preventing repeated triggers while holding the chord and playing/releasing other notes.
- All Notes Off (CC123) is now respected: incoming CC123 clears the internal MidiKeyboardState and resets macro armed states while still forwarding the message to the synth, so held external notes no longer block shortcut detection.
- Setting and clearing the "is regular" flag now got its own macro entry
2.8.22.8.2 HotfixBeta4 files
Bug fixes:
- Hotfix for duplication of patches on flag update. This actually inserted a new item into the import list on every click, the surprise came from the hidden side effect of the merge upsert. Furthermore, column names became suddenly ambiguous in certain filter combinations.
- Change of behavior - lists currently can only be sorted by position of patch in list. This doesn't make much sense for import lists, so relaxed that for now only for imports. Maybe we want to be able to sort other lists as well.
2.8.12.8.1 HotfixBeta4 files
Bug fixes:
- Hotfix for database migration failures caused by duplicate EditBufferImport lists that were disambiguated by synth only. Not sure why the database I have did not expose this problem, potentially cured by some intermediate inofficial build. Check your list and import data after updating!
2.8.02.8.0 (beta)Beta4 files
Features:
- #498 Bigggest database change since a long time - backup your databases (Orm will keep a copy before the database migration)! This is to store Imports as normal lists just like Banks and User Lists. This allows for better drag and drop interoperability, and will enable important future features requested, like #362, different names of patches per bank.
- #468 Adding support for routing all of KnobKraft's output to a secondary device via the Macro setup screen.
- #457 Add a third state "regular" to all patches. This can be used to not only mark favorites and hide unwanted patches, but also to flag those which have already been reviewed and need no further attention. Added appropriate filter button to the search bar and defined the combinatorial search filter with all of these possibilities. now.
Synths:
- #495 and #496 Fixing the Yamaha DX-7II adaptation. Thanks to @AgtSlick for the report and the fix!
Bug fixes:
- #410 When importing a bank via the Import dialog instead of the active bank sync, the bank itself was not refreshed. This was now merged to be the same operation - either clicking on the "In Synth" bank or use the dialog to select which banks to import, both will produce an import list and refresh the In Synth bank.
- #497 Sort the synths by name alphabetically both for the tree view on the left and the synth buttons at the top of the screen so we have a stable order.
2.7.24 files
Features:
#484 Added a new bank fill mode - From active patch - which will create a new bank filling it up with patches from the visible grid starting at the currently selected patch. If that is not visible, will fallback to fill from first element. Switch Mac builds to build on Mac OS 14 on ARM architecture (still fat binary also including Intel chip support) becasue the Mac OS 13 builders are being retired by github
Synths:
#304 Experimental adaptation for the Behringer Pro 800. Sending to the synth is slow, this could benefit from sending the patch as a CC flood instead of real program dumps, which go into flash memory immediately.
Bug fixes:
Fixed crash of the software when encountering a database with a schema that is too new for it. Works only for this version and even newer databases, old versions will crash and you need to edit the settings file to prevent the software from opening the wrong file again on the next launch. #485, the MIDI Input Device and the Fixed Synth name on the Macros page were wrongly persisted in the settings file. #482 Increased the length of patch names to max 50 from max 20 before. Note that if the synth implements renamePatch(), the name entered by the user will be run through renamePatch() and then nameFromDump(), so the name can only be something that can actually be stored in the synth. This includes limitations to character set and length. #474 Address delete bug throwing a SQL exception on ambiguous column name.
2.7.12.7.1 Fix macOS build4 files
Synths:
- #450 Implemented patch rename functionality for the Generic Roland module, this should provide all modern Rolands with patch name change and upload.
- #411 Added a sort order column to the Edit Categories... catalog so that you can order the categories in a different order than they were created.
Bug fixes:
- #459 Changed the build process hoping to get the file chooser dialogs backs on macOS 15.5 and newer
2.7.02.7.0 - Three new synths and some UI updates4 files
Features:
- #463 Trying to make the currently selected patch stand out better in the colour grid - using white background and black font now.
- #461 Alt-Tabbing away did lose current edit of the tree control. This is complex, trying a better handler for now only for the inline editing in the tree control. You can tab away and back again and the current editor should still be active.
- Updated JUCE to 8.0.8.
- Updated embedded Python to version 3.12.10 for Windows.
- Now building with Visual Studio 2022 instead of discontinued Visual Studio 2019.
Synths:
- #467 Novation Bass Station II adaptation provided by @cockroach! Awesomely nice to contribute, and this will be much loved I guess!
- #469 Behringer Wave adaptation provided by @willxy! How great to have a second new synth supported by the community!
- #465 Korg microKorg S adaptation provided by @ilantz! This is a first to have three new adaptations submitted for a single release. My friends, you rock!
2.6.43 files
Synths
- A fix for the Analog Rytm which prevented it from being able to send Sounds.
2.6.32.6.3 - Ubuntu adaptation fix4 files
Features:
- Turning off bank load retries to allow further testing of the K-5000 adaptation.
Bug fixes:
- #455 Linux builds no longer contained the GenericSequential adaptation and other helper files. This was a regression introduced in 2.5.0 and now reported, thanks to @SpotlightKid!
- #452 and #453 Fixing Linux builds for gcc 14. Thanks to @SpotlightKid for providing these!
2.6.22.6.2 Yamaha TX81Z, and DX7 bank dumps4 files
Features:
- #306 Allow adaptations to create full bank dumps instead of only program dumps. Implemented this for the Yamaha DX-7, which finally has the possibility to upload full banks, and to save banks via the export dialog. Other adaptations can now implement this capability as well.
- #434 Added clear button to the Keyboard Macro View - you can now remove a macro in case you set it on error.
- Added a new test method to simulate the handshake protocol between the Orm and a Synth, to be able to test full communication in the adaptation independent of the C++ software. This effectively implements the full Librarian logic from C++ again in Python.
Synths
- #449 Adding in the Yamaha TX81Z adaptation contributed by @summersetter. Thanks for that!
- #445 Allow to import categories from the XV-3080 and XV-5080 by extending the mapping_categories.json file as suggested by @summersetter!
Bug fixes:
- #72 Trying to fix the retry bank download problem occuring with the K5000 because the messages are large and there are partial sysex messages incoming.
2.6.12.6.1 hotfix creating new databases4 files
Features:
- #389 Removed the special case of the user list save to database button. Now, any change is immediately persisted to the database, and there is no undo much like in the rest of the system.
Bug fixes:
- #430 Exception on creating new database was fixed. Migrating existing worked, but creating new was broken.
2.6.04 files
Features:
- #383 Adding two new metadata fields for each patch, Author and Info. There is a new display mode that shows the author as subtitle in the grid. The Info field is a generic single line metadata field. Both fields are searchable via the text search. Thanks to @RadekPilich for the suggestion!
- #401 Right click or shift/modifier click on any category or filter button will not automatically turn off the other filters already set, this allows for faster swichting e.g. between Lead and Pad, without having to deactivate the previously selected category. The same works when assigning a catageory to the currently selected patch in the side bar. I like this so much I might make it the default! Again, also a suggestion from @RadekPilich!
- #389 Removed the special case of the user list save to database button. Now, any change is immediately persisted to the database, and there is no undo much like in the rest of the system.
Synths:
- #73 First alpha version for the Yamaha FS1R. Thanks to @markusschlosser for relentless testing!
- #244 Waldorf Pulse adaptation now confirmed to work by @markusschlosser. Thanks again!
- #428 Fixed tag import for the Generic Roland module, preventing tag import e.g. for JV-2080 to work. Thanks to @ivruebj for finding it and providing the fix!
- #420 Added 4 Addons banks to the Prophet X adaptation. Thanks to @Walleye-Sencza for pointing this out!
- #429 Applied fix for Korg M1 detection supplied by @Philippe593, thanks for this!
Bug fixes:
- #386 Fixed deleting patches which were part of a synth bank via the menu. This did throw an error message and would just refuse to delete the patches. This new version allows to delete the patches also if they are part of a user list via the Edit... Delete... menu item - if a patch is part of a bank though it is hidden not and not deleted, as the bank structure needs to remain intact. Thanks to @RadekPilich for reporting!
- #425 Fixed text message on import that was confusing. Thanks @markusschlosser!
- Patch button in current patch side bar did not show color anymore. Fixed.
2.5.34 files
Bug fixes:
- #419 Banks of varying sizes led to incorrect start index when downloading banks. This hit the Waldorf Pulse adaptation.
- Crash on download bank for adaptations which implement the BankDumpCapability but not the BankDumpRequestCapability. This hit the alpha version of the Yamaha FS1R adaptation.
2.5.24 files
Synths:
- #407 Roland D-50/D-550 finally we can confirm we have a working adaptation for the Roland D-50/D-550. Special thanks to @summersetter for relentless and systematic testing!
- #398 Waldorf M - works now! Thanks to @RadekPilich for testing!
- Sequential Trigon-6 confirmed as working!
- #335 #415 Oberheim OB-X8 works now, also detects module and name length fix.
2.5.12.5.1 A ton of new synth adaptations4 files
This release brings a whole load of new adaptations, some of which are brand new and some have been around but not part of the official release for a while. If you encounter any problems, just let me know!
Synths:
- #274 Roland Juno-DS - adaptation created by @mslinn, a thousand thanks for developing this from scratch and contributing it!
- #394 Moog Voyager - nicely working adaptation for the classic. Thanks to Thanks to @troach242 for the nudge and test!
- #395 Akai AX80 - beta version of the adaptation. Feedback please by owners! Thanks to O.S.R.C. on YT for the nudge!
- #396 Korg M1 - beta version of the adaptation. Feedback please by owners! Thanks to Jentusalentu at YT for the nudge!
- #398 Waldorf M - alpha version of the adaptation. Thanks to @RadekPilich for testing!
- #397 Elektron Analog Rytm -- beta version. Thanks to @RadekPilich for the request!
- Elektron Digitone -- alpha version, as it looked very similar to the Analog Rytm. This needs more work, owners please provide feedback so we can complete it.
- #244 Waldorf Pulse alpha, this needs some more work and investigation. Thanks to @markusschlosser and chatGPT for the groundwork.
- Sequential Trigon-6 beta, this should be relatively straightforward as the Sequential synths all behave well.
- Oberheim Teo-5 beta, this is a newer synth and probably close to the Take-5 in terms of MIDI.
- Oberheim OB-X8 beta, this is now based on the generic Sequential module. Fingers crossed this works!
Bug fixes:
- Fixed #388: Switching the database would not clear the right hand side panels for current patch, bank, and patch history.