English | 日本語
An unofficial patch for the official M-VAVE FM-1 firmware V15. It makes every button, key and knob send a USB-MIDI note.
The patch alone does not turn the FM-1 into a macro pad. The patch turns every input into MIDI, and an app on your computer turns that MIDI into shortcuts. Together they let you use the FM-1 as a macro pad.
This repository does not contain any M-VAVE firmware. Download FM-1.fwsc (V15) from the official
website yourself and apply the patch locally.
Unofficial and not affiliated with M-VAVE. This project is not endorsed or supported by M-VAVE. M-VAVE and FM-1 are trademarks or product names of their respective owners. No M-VAVE firmware is included in this repository.
Use at your own risk. Flashing modified firmware may void your warranty. A failed update can, in the worst case, leave the unit unusable (no recovery method for this model is known). The software comes with no warranty, and the author is not liable for any damage arising from its use. Read the notes in docs/FLASHING.md before flashing.
| Input | Count | Note sent (channel 1) |
|---|---|---|
| Buttons | 14 | 39–52 |
| Keys | 27 | 53–79 (same as stock) |
| Knobs, clockwise | 7 | 87–93 |
| Knobs, counter-clockwise | 7 | 95–101 |
- 55 inputs in total. Buttons and keys send note-on when pressed and note-off when released. Knobs send a single note-on per detent.
- Note-on velocity follows the unit's own setting (1 on the author's unit). Note-off velocity is 100.
- The settings screen is no longer reachable after patching, so change the velocity setting with the official firmware before flashing if you need to.
- All LEDs stay off. The display shows nothing, but the patch does not touch the backlight, so the screen still glows faintly.
- The unit still makes sound when you use it. The MASTER knob (volume) is left as is and sends no MIDI, so turn it down when using the FM-1 as a macro pad.
- Full mapping: docs/NOTE_MAP.md. To see it live, use the input monitor (Chrome / Edge): the control you press or turn lights up on the diagram.
The FM-1 only sends MIDI notes, so you need an app that receives them and turns them into shortcuts.
| App | OS | Price | Notes |
|---|---|---|---|
| Keyboard Maestro | macOS | Paid | MIDI note triggers |
| BetterTouchTool | macOS | Paid | MIDI note triggers |
| MidiKey2Key | Windows | Free (donationware) | Turns MIDI input into keystrokes or launches programs |
| Bome MIDI Translator Pro | Windows / macOS | Paid (trial available) | Advanced rules, logic and layers |
- See the table above and docs/NOTE_MAP.md for the note numbers.
- Whether a note-on with velocity 1 triggers an action depends on the app. Set triggers to accept any velocity.
- All synthesizer functions (patch selection and editing, sequencer, arpeggiator, etc.).
- Flash the official firmware to get them back (docs/FLASHING.md).
- An M-VAVE FM-1
- Official firmware V15:
FM-1.fwscfrom the M-VAVE Downloads page- Only the file with SHA-256
db1642b2b6fa5c2cccb11ffd13878068bb28601678d3644049f99dc40e7edb8ais accepted. If M-VAVE replaces this file, the patcher will stop working.
- Only the file with SHA-256
- The official updater M-UPGRADE (Windows / macOS; the generic version on the M-VAVE Downloads page)
- To apply the patch: a web browser (Chrome, Edge, Safari, etc.) or Python 3.9 or later
- Open the patcher page: https://smememe.github.io/fm1-macropad-patch/
- Drop
FM-1.fwsconto the page, or click "choose a file" - When it shows "Official V15 firmware confirmed" and "All 16 patch sites match", click "Download FM-1-macropad.fwsc"
Everything runs inside your browser and the file is not uploaded anywhere (the page is configured to block all network requests).
You can also download this repository as a zip and double-click docs/index.html; it works the same way offline.
For those who want to read and check the source. Put FM-1.fwsc in the same folder as fm1patch.py and run this in that folder.
On Windows, use py instead of python3.
python3 fm1patch.py FM-1.fwsc -o FM-1-macropad.fwscBoth methods check the SHA-256 of the official firmware and the original bytes at all 16 patch sites before writing anything.
If anything does not match, nothing is produced. The output always has SHA-256
4192103baeef0b4601a60e0ec55cd517371ec9834ce2e6b2964647e22aa98641.
- Start M-UPGRADE and connect the FM-1 over USB. Check that the unit is shown as FM-1 (its current firmware version does not matter).
- Click "Select Firmware" and choose
FM-1-macropad.fwsc. It should show "Firmware version:51". - Click "Update Firmware" and wait until it reports completion (about 20–60 seconds). The unit restarts by itself.
- In your shortcut app (see "Apps for assigning shortcuts" above), assign a shortcut to one key and check that pressing it works.
When flashing from Windows in a virtual machine (e.g. Parallels), the unit reconnects as a different USB device during the update. If you are asked where to connect it, choose Windows, and allow the connection if asked again.
Flash the official FM-1.fwsc with M-UPGRADE.
- The patcher stops with a SHA-256 mismatch: the input is not the official V15
FM-1.fwsc. This also happens if M-VAVE replaces the file on their site; please report it in Issues. - M-UPGRADE does not find the unit: reconnect the USB cable and restart M-UPGRADE. Close any other MIDI app that may be holding the device.
- "A firmware that does not conform to the device was selected": no file is selected, or it is not an FM-1 file. Select the
.fwscmade by the patcher again. - The update stopped halfway: keep USB connected, power-cycle the unit, and try flashing again with M-UPGRADE (the author has not tested an interrupted update).
- A shortcut does not fire: check whether the unit sends notes with the input monitor (Chrome / Edge) or a MIDI monitor app (e.g. MIDI Monitor on macOS or MIDI-OX on Windows). If it does, check your shortcut app (velocity conditions, etc.). If it does not, suspect the flashing or the connection.
- Going back to stock: flash the official
FM-1.fwscwith M-UPGRADE.
Bug reports are welcome in Issues. This is a personal hobby project, so replies and fixes are not guaranteed.
| Item | Details |
|---|---|
| Firmware | Official V15 (FM-1_015) |
| Flashing | M-UPGRADE for macOS (released 2026-09-08) / for Windows (Windows 11 on ARM in Parallels) |
| Verified | Flashing the patch, reverting to official (macOS), all 55 inputs, all LEDs off, reception in Keyboard Maestro |
| Patcher | Browser: Chromium-based, Safari (macOS), Edge (Windows 11), and a saved copy of the page; the output matched the expected result in each. Python: 3.9 and 3.14 on macOS |
| Not verified | Flashing from an x64 Windows PC, reverting from Windows |
All changes are same-length, so the firmware size does not change. The patch rewrites 84 bytes at 16 sites in the app area, changes the version string and one padding byte in the EQ name, then updates the checksums. See docs/PATCHES.md and docs/HOW_IT_WORKS.md.
fm1patch.pyholds the patch table. The browser patcher (docs/index.html) is built fromweb/src/:python3 web/export_patches.py && python3 web/build_web.py. The input monitor (docs/monitor.html) and the layout diagrams (node web/make_layout_svg.cjs) shareweb/src/fm1layout.js.- Tests need the official
FM-1.fwsc:FM1_FWSC=/path/to/FM-1.fwsc python3 tests/test_patch.pyandnode tests/test_web.cjs /path/to/FM-1.fwsc
- AL-255/FM-1-RE: analysis of the firmware structure and the update protocol. This work builds on it.
- kagaimiq/jl-misctools: CRC and cipher routines for JieLi firmware containers (MIT; partly bundled in
jltech/).
- Code written by the author of this repository: MIT License
- Bundled third-party code: see THIRD_PARTY.md
- The M-VAVE firmware, and the original byte sequences listed in docs/PATCHES.md for verification, belong to M-VAVE (or their respective owners) and are not covered by the MIT License.
- M-VAVE and FM-1 are trademarks or product names of their respective owners.