
RemoteFM1
Peaking98/100RemoteFM1 is custom firmware for the M-VAVE FM-1, by @Quixotic7. Open source under GPL-3.0, latest release v0.3.3 (November 2026), 25 stars on GitHub.
forM-VAVE FM-1·by@Quixotic7
Unclaimed. Is this yours? Sign in with GitHub as @Quixotic7 to claim it.
remote-0.3.3.fwsc· 597 KB· +5 files
GPL-3.0· Quixotic7/RemoteFM1·downloads come from the creator’s GitHub releases
v0.3.3RemoteFM1 0.3.3Latest6 files
Released 2026-11-04, built and signed on GitHub with
tools/hub_build.sh 0.3.3(docs/RELEASING.md). It replaces 0.3.2. Both packages install asFM-1_52000303.Package sha256 remote-0.3.3.fwsc, USB + Bluetooth MIDI (the default)f123329b1b0b98ed0dc1085e39d2ab8368d50da4ffe410426ab3ad7688d60242remote-usb-0.3.3.fwsc, USB onlyc57b0141d0d9a7fd354fb8bd0f027b4cfa5d28fcbf8ad72d4179e4f1c47c1d06What changed from 0.3.2
- The newer FM-1s' flash chip. FM-1s sold from late 2026 (the M-VAVE logo printed on the front) carry another maker's 1 MiB flash (JEDEC id 0xB36014; the older units' Puya part is 0x856014). Earlier RemoteFM1 versions did not accept it, so on those units they ran from RAM only: no cartridges or loops saved, and no update possible from RemoteFM1 itself. 0.3.3 accepts both parts (fm1-base patch 0009, as ChoralRoot 0.29.1 does; the SMK-37 builds too).
- Nothing else: your cartridges, loops and settings stay.
A unit stuck on an earlier version that cannot update: start it in the ROM bootloader and restore V15 with MvaveFM1Unbricker (github.com/Quixotic7/MvaveFM1Unbricker), then install 0.3.3.
remote-0.3.3.fwscis the package with USB and Bluetooth MIDI (the one The Firmware Hub lists),remote-usb-0.3.3.fwscthe USB-only one;SHA256SUMSlists both. GitHub built and signed each file from this tag's source (The Firmware Hub's shared workflow); check one withgh attestation verify remote-0.3.3.fwsc --repo Quixotic7/RemoteFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. The build downloads Yamaha's DX7 ROM cartridges and checks them against the sha256s pinned intools/hub_build.sh; they are compiled in, never in the repository or the release.LICENSE,LICENSING.mdandLICENSES.zipcarry every licence. Installing firmware is at your own risk.Show all 6 filesHide 3 files
v0.3.2RemoteFM1 0.3.26 files
The first release that GitHub builds and signs from this repository's source, with The Firmware Hub's shared build workflow (
zvenson/fm1-build@v1, docs/RELEASING.md). The firmware is 0.3.1's: the same sources, built withtools/hub_build.sh 0.3.2(./build.sh --release 0.3.2, and--no-blefor the USB-only package). It replaces 0.3.1. Both packages install asFM-1_52000302.Package sha256 remote-0.3.2.fwsc, USB + Bluetooth MIDI (the default)f814257effa8c972d407db271bd8c40392a980a2c0d73cd206132a776e99548aremote-usb-0.3.2.fwsc, USB only46f0e9ea218bc3a64125439a95f83b06ff31c42f3b335e56f4a4c9bfe7717ef2What you get
- On its own, a DX7: Yamaha's 256 ROM voices and up to 16 of your own cartridges, with velocity, scales, latch, an arp and a 16-loop looper.
- A MIDI controller over USB, Bluetooth and the TRS jack.
- The panel for the RemoteFM1 apps (remotefm1.com, iOS, Android, the Mac plugin): the FM-1's keys, knobs, screen and lights for a firmware running on the host.
What changed from 0.3.1
- Nothing in the firmware. The version (and so the identity) is new, and the release is built and signed on GitHub. Your cartridges, loops and settings stay.
remote-0.3.2.fwscis the package with USB and Bluetooth MIDI (the one The Firmware Hub lists),remote-usb-0.3.2.fwscthe USB-only one;SHA256SUMSlists both. GitHub built and signed each file from this tag's source (The Firmware Hub's shared workflow); check one withgh attestation verify remote-0.3.2.fwsc --repo Quixotic7/RemoteFM1 --signer-workflow zvenson/fm1-build/.github/workflows/build.yml. The build downloads Yamaha's DX7 ROM cartridges and checks them against the sha256s pinned intools/hub_build.sh; they are compiled in, never in the repository or the release.LICENSE,LICENSING.mdandLICENSES.zipcarry every licence. Installing firmware is at your own risk.Show all 6 filesHide 3 files
v0.3.1-smk37.3RemoteFM1 0.3.1 for the SMK-37 (test build 3: faders at a quarter turn rate)Beta8 files
A community test build, third round. It replaces
v0.3.1-smk37.2. Have M-Vave's stock package for your model and M-UPGRADE at hand before you install.Try it first in the browser: remotefm1.com/installer/smk37/emu/. Its "Connect to the RemoteFM1 player" button makes the emulated SMK-37 the player's keyboard.
New in this build: the faders don't overshoot
When a fader acts as the FM-1's KNOB 1..4, it now turns the knob a quarter as far as in test build 2: about 31 knob steps for the full travel instead of 127. That is the case with a host (RemoteFM1.com, the iOS app, FM1VST), in the instrument's menus, and with GLO held.
- To line a fader up with a value, pull it to the bottom. The value stops at its minimum, and the fader covers the range from there. Use the knob to shift it wherever you need.
- Unchanged:
- on the instrument's CC pages, a fader sets the CC to its position (0..127);
- in MIDI REMOTE with ABSOLUTE knobs, it does the same;
- in MIDI REMOTE with relative knobs, it sends one step per fader step.
Everything else is as in test build 2:
- the FM-1's button layout (ARP is FX, BT is GLO, PATCH is HOME, and so on);
<and>turn SELECT;- to every host, the keyboard is an FM-1 running RemoteFM1 0.3.1.
Model Package Update identity sha256 SMK-37 Pro, Starrykey 37 Play remote-smk37-0.3.1.fwscSMK-37 Pro_52000301c9b8b6192d485d44c13f200a29c0fa38aafca398a0998b8cfda095d317ef6e67remote-smk37-usb-0.3.1.fwsc(USB only)85c24d4250c2d5a2c73ed8a66aeedcf947985228cd1a2a77333756a80326c4faSMK-37 Elite remote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301a90ef92395ddfb71c6fb8ea2ddbf1458eb6836395684ed9f52fe1ad40e4734b1remote-smk37-elite-usb-0.3.1.fwsc(USB only)a5f8d99409ad7aaa3357f0ea8ec28d3d5e245c8ba3ba9848170d1909b88315f2MKE-P37 remote-smk37-mke-0.3.1.fwscMKE-P37_5200030100302ab2a5ee4ff7efaa09f644fdd5a76090a222329e6336ded94769d1bb1205remote-smk37-mke-usb-0.3.1.fwsc(USB only)c2e6bb555f2ffaf373dace158bc7aa19c1c9c2ef92c30ff3737b7a67a3ecfe99Built from #11 with
BOARD=smk37 [MODEL=elite|mke] ./build.sh [--no-ble] --release 0.3.1. The control table and the tester steps are inSMK37.md(attached).Install
- In the browser: remotefm1.com/installer/smk37/, in Chrome or Edge on a computer.
- From the command line:
python3 tools/fm1_install.py remote-smk37-0.3.1.fwsc, using your model's package.
Both check that a package is for the connected keyboard.
Going back: use M-Vave's stock package with M-UPGRADE. The calibration, the Bluetooth pairing and the key areas are never written.
Please report what works and what doesn't in the issues, with your model, the package and what you saw.
Credits: the SMK-37's hardware facts are from genkigenki's porting guide and from what ChoralRoot's tester-confirmed SMK-37 port relies on. The board layer is new code under MPL-2.0, built on fm1-base (Charles Vestal) and felucca-bsp (Leo Kuroshita, Hügelton Instruments).
🤖 Generated with Claude Code
v0.3.1-smk37.2RemoteFM1 0.3.1 for the SMK-37 (test build 2: the FM-1's layout)Beta8 files
A community test build, second round. Nothing here has run on an SMK-37 yet, except one tester's first build. It replaces
v0.3.1-smk37. Have M-Vave's stock package for your model and M-UPGRADE at hand before you install.Try it first in the browser: remotefm1.com/installer/smk37/emu/ runs this build's own code on an SMK-37 Pro's panel.
New in this build: the FM-1's layout
The controls now sit where the FM-1's do, both on the keyboard's own and with a host (RemoteFM1.com's player, the iOS app, FM1VST).
- The 12 buttons right of the pads are the FM-1's two rows, in the same places:
- Top row: ARP is FX, NOTE REPEAT SEL, SCALE ENV, CHORD LFO, GLOBE EDIT, BT GLO. FX..EDIT pick the CC banks A..E, as on the FM-1.
- Bottom row: PATCH is HOME, PARA SAVE, FX ARP, SEQ SEQ, SEQ PLAY PLAY, SEQ REC REC.
<and>turn SELECT.- The faders are KNOB 1..4:
- On the instrument's CC pages, a fader sets the CC to its position (0..127).
- With a host, or in a menu, it turns the knob.
Everything else is as in
v0.3.1-smk37:- To every host the keyboard is an FM-1 running RemoteFM1 0.3.1.
- The keys: the middle 27 keys (F3..G5) are the FM-1's, with velocity.
- The pads are the FM-1's white keys.
- K1..K8: K1 is MASTER, and K2..K8 are SELECT, ALGORITHM, PRESETS and KNOB 1..4.
- The other controls: the outer keys, wheels and pedal reach the host's firmware as MIDI.
Model Package Update identity sha256 SMK-37 Pro, Starrykey 37 Play remote-smk37-0.3.1.fwscSMK-37 Pro_520003017f23f2316f7b02bbbc2b19df112a686fffa5af3acfa4412a2a875995ec47d885remote-smk37-usb-0.3.1.fwsc(USB only)34b863904bcb2f1a628a724e5e013418d3592d449525a8ef18f52ba422331e31SMK-37 Elite remote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301ddb1d5897d336b57b7cce6cd8dc96c5370f4b34015fbc511c1f933ac94036b41remote-smk37-elite-usb-0.3.1.fwsc(USB only)6367080d6aef30f22f3cfc2e7b5b7720d8d9edd448d4c3a75901223cb799de59MKE-P37 remote-smk37-mke-0.3.1.fwscMKE-P37_520003012ea293ebcafbceb40a33da2f0e67fd5c5d7be7ec211314a01cb27dd01112916aremote-smk37-mke-usb-0.3.1.fwsc(USB only)37340d22fbe57b0307b2e0906d03fd6871519e812ce2502663fef47b660a7e30Built from #8 with
BOARD=smk37 [MODEL=elite|mke] ./build.sh [--no-ble] --release 0.3.1. The full control table, what's missing and the tester steps are inSMK37.md(attached).Install
- In the browser: remotefm1.com/installer/smk37/ (Chrome or Edge on a computer).
- From the command line:
python3 tools/fm1_install.py remote-smk37-0.3.1.fwsc, using your model's package. - The model check: both installers check that a package is for the connected keyboard, and the SMK-37 build refuses FM-1 packages itself.
Going back: use M-Vave's stock package with M-UPGRADE. The calibration, the Bluetooth pairing and the key areas are never written.
Please report what works and what doesn't in the issues, with your model, the package and what you saw. "What to test" in SMK37.md lists what to try.
Credits: the SMK-37's hardware facts are from genkigenki's porting guide and from what ChoralRoot's tester-confirmed SMK-37 port relies on. The board layer is new code under MPL-2.0, built on fm1-base (Charles Vestal) and felucca-bsp (Leo Kuroshita, Hügelton Instruments).
🤖 Generated with Claude Code
- The 12 buttons right of the pads are the FM-1's two rows, in the same places:
v0.3.1-smk37RemoteFM1 0.3.1 for the SMK-37 (test build)Beta8 files
A community test build: nothing here has run on an SMK-37 yet. Nobody on the project has one. It follows genkigenki's porting guide (fm1-to-smk37) and passes the simulator's tests, nothing more. Have M-Vave's stock package for your model and M-UPGRADE at hand before you install.
RemoteFM1 0.3.1 on the M-Vave SMK-37 Pro, SMK-37 Elite and MKE-P37 (the Starrykey 37 Play takes the Pro's package). To every host the keyboard is an FM-1 running RemoteFM1 0.3.1: RemoteFM1.com's player, the iOS app and FM1VST use it as their panel, and with no host it is RemoteFM1's own DX7. Built from the
smk37branch (#3) withBOARD=smk37 [MODEL=elite|mke] ./build.sh --release 0.3.1(and--no-blefor the USB-only packages).Model Package Update identity sha256 SMK-37 Pro, Starrykey 37 Play remote-smk37-0.3.1.fwscSMK-37 Pro_5200030121431ea2388be8415c9148950e240cb4539b50233711c42a0ced3381c7a4de7cremote-smk37-usb-0.3.1.fwsc(USB only)fd82d8df94196805953202583bcb1390a517e90f6f4e62d1e3de9b93c65f52c9SMK-37 Elite remote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301e1d0bae31257be687760cb74b09fe4e7c2d7abfc266a3d3ce547e61207980fe8remote-smk37-elite-usb-0.3.1.fwsc(USB only)fe39be6e944213866a03d78d5fe35585801c95d7b9aec2ab806564c8e4bbdf2fMKE-P37 remote-smk37-mke-0.3.1.fwscMKE-P37_52000301a9473ab7f9d232fd2ad4142a89e8dd1a48995517675b9d615892982e92dbbfc0remote-smk37-mke-usb-0.3.1.fwsc(USB only)191a77c03da44eb63a7d220bcf860a026edf214db4af21d25e70beeddbb5f3d5Controls
- Keys: F3..G5 are the FM-1's 27 keys, with velocity.
- Pads: the 16 pads are the FM-1's 16 white keys, and their lights show those keys' LEDs.
- Buttons and knobs: the printed names. K1 MASTER, K2 SELECT, K3 ALGORITHM, K4 PRESETS, K5..K8 KNOB 1..4; PATCH HOME, BT SAVE, and so on.
- Extras: the outer keys, faders, wheels and pedal reach a host's firmware as MIDI. With no host, they play the DX7.
The full table, what is missing (aftertouch, the black-key LEDs, TRS MIDI), the flash map and the tester steps are in
SMK37.md(attached).Install
- From the command line:
python3 tools/fm1_install.py remote-smk37-0.3.1.fwsc(your model's package). - The browser test installer will be at RemoteFM1.com/installer/smk37/ once #3 is merged.
- Both check that a package is for the connected keyboard, so an SMK-37 package never goes on an FM-1 and an FM-1 package never on an SMK-37. The SMK-37 build also refuses FM-1 packages itself.
Going back: M-Vave's stock package with M-UPGRADE. The calibration, the Bluetooth pairing and the key areas are never written. The first start clears another firmware's data in RemoteFM1's areas (ChoralRoot's on the SMK-37 among them), so back that up first.
Please report what works and what doesn't in the issues ("What to test" in SMK37.md lists what to try): note your model, the package and what you saw.
Credits: the SMK-37's hardware facts are from genkigenki's porting guide and from what ChoralRoot's tester-confirmed SMK-37 port relies on. The board layer is new code under MPL-2.0, built on fm1-base (Charles Vestal) and felucca-bsp (Leo Kuroshita, Hügelton Instruments).
🤖 Generated with Claude Code
v0.3.1RemoteFM1 0.3.13 files
Released 2026-10-31, built with
./build.sh --release 0.3.1(and--no-blefor the USB-only package). It replaces 0.3.0. Both packages install asFM-1_52000301.Package sha256 remote-0.3.1.fwsc, USB + Bluetooth MIDI (the default)11680a48829ee5f4687da1148a60df192eb97e39d333ae18fd63931e3cd7e724remote-usb-0.3.1.fwsc, USB only3d7d88535fe003dd57ba465ba552b798a23ed420e50e7c29525247d92248da12What changed from 0.3.0
- 16 user cartridges (was 3), USER1..USER16. New SysEx (docs/CART-UPLOAD.md, PROTOCOL.md section 8): list the banks with their names, send into a chosen slot (replace), delete, rename, and a STORED reply after every upload. The website's player (settings, under Use my FM-1) and the iOS app use them. 0.3.0's banks are carried over.
- Loops saved on the unit: SAVE held also writes the 16 loops; they load at power-on. Power-cut safe.
- Where it saves: 0.3.1 uses 0x97000..0xD8FFF, where ChoralRoot and FIZZ keep their saves (the owner's choice: both can back up and restore). Going back to ChoralRoot or FIZZ on the same unit: restore their backup.
- VELOCITY on / off in the settings page (hold HOME, now titled SETTINGS); off plays every note at 100.
- For hosts: TOUCH (
0x14, caps bit 10): the keys' real velocity and pressure (poly aftertouch) during a session, opted in by the host (docs/VELOCITY-HOSTS.md). The website has a switch for it.
Testing
On an FM-1 on 2026-10-31: both packages installed as
FM-1_52000301, macOS shows the FM-1's USB audio devices with each, the DX7's render hash equals the computer's on one and two cores, the three user banks from earlier stayed. The owner tested the velocity build. Simulator, host, site, installer and remote-link suites pass.🤖 Generated with Claude Code
Show all 3 filesHide 1 files
Other filesv0.3.0RemoteFM1 0.3.03 files
Released 2026-10-30, built with
./build.sh --release 0.3.0(and--no-blefor the USB-only package). It replaces 0.2.3. Both packages install asFM-1_52000300.Package sha256 remote-0.3.0.fwsc, USB + Bluetooth MIDI (the default)0403415f68afd8c087004ab65683378b3d52dd7669cd46fed11bdb7c923b9a9fremote-usb-0.3.0.fwsc, USB onlyacde3717ef90e5f60c43c2e14636537e34feb3c95020ff0b7872e666a108c584What changed from 0.2.3: the FM-1 on its own
Without a host, RemoteFM1 is now an instrument of its own (the full control map: README.md "Standalone", STANDALONE-PLAN.md section 3). A host's SESSION still takes it over as its panel, exactly as in 0.2.
- A DX7. saadet's FM6 engine (Kerem Kilic; MSFA's DX7 maths, sample for sample as saadet renders it), 8 voices over the FM-1's two cores. Yamaha's 8 ROM cartridges (256 voices) built in; send your own 32-voice cartridges over SysEx (up to 3 user banks). PRESETS the voice (rolling into the next cartridge), GLO + SELECT the cartridge.
- Playing. Velocity keys, OCT-/OCT+ (both: panic), scales that snap the keys (GLO + PRESETS the root, GLO + ALGORITHM the scale), LATCH (hold LFO), an arp (tap / hold ARP), SELECT the tempo, MIDI clock in.
- A looper. REC records exactly what you play, from the first note; 16 loops on SEQ (white keys pick, launch instantly, at the bar or at the end); count-in and a metronome; save / load over SysEx.
- A MIDI controller. Notes and 5 banks of 4 CCs out over USB and Bluetooth at once; MIDI in from USB, Bluetooth and the TRS jack plays the DX7. REMOTE MIDI (GLO + FX): every key, button and knob just sends MIDI, with its own settings page (hold HOME): screen, absolute / relative knobs, channels, keys, octave keys, scale shortcuts, knob LEDs.
- Looks. A pixel-art UI with 9 themes and background colours (SAVE), Notes / Scope / Keys views (HOME).
- For hosts. The TRS jack's MIDI goes to the host's firmware during a session (MIDI_IN,
0x54;capsbit 9). A bare HELLO no longer hands the unit over: only a SESSION start does. - Settings live only in 0xF2000..0xF3FFF (and user banks in 0x93000..0x96FFF), where no other FM-1 firmware keeps data; Bluetooth pairing is now saved too.
Testing
On an FM-1 on 2026-10-30: the release package installed as
FM-1_52000300; the DX7's render hash on the unit equals the computer's on one and two cores; macOS shows the FM-1's USB audio devices; the owner played it, MIDI over USB, Bluetooth and TRS (an OMX-27), and the website with FIZZ getting the TRS jack's MIDI. The simulator suite (every standalone feature), the site, installer and remote-link tests pass.🤖 Generated with Claude Code
Show all 3 filesHide 1 files
Other filesv0.2.3RemoteFM1 0.2.33 files
Released 2026-10-28, built with
./build.sh --release 0.2.3(and--no-blefor the USB-only package). It replaces 0.2.2. Both packages install asFM-1_52000203.Package sha256 remote-0.2.3.fwsc, USB + Bluetooth MIDI (the default)211f06f63e8ca09de2812c017db9bb229713ce8e5a102eba887031551b2b403cremote-usb-0.2.3.fwsc, USB onlye94574ee081dac596479a3de4ec0fd2aa0cea109a2692551b07037ad8eb17e4eWhat changed from 0.2.2
- Recording from the FM-1 over USB works. In 0.2.1 and 0.2.2 a computer recording the FM-1's USB audio input got
mostly silence (82-85 % zeros, 2-15 ms of sound every ~29 ms). felucca-bsp's stall check (the host stopped
reading for over 20 ms) counted USB polls as if only its 2 kHz timer polled; RemoteFM1 also polls from its main
loop, 100,000-225,000 times a second, so the stream was dropped every millisecond. It now counts milliseconds
(felucca-bsp patch 0003, hook
FELUCCA_USB_MS). - Playing to the FM-1 over USB, Bluetooth, the screen and the protocol are unchanged.
Testing
On an FM-1 on 2026-10-28, with a Mac: a 1503 Hz tone played to the FM-1's USB audio output and recorded back from its input. 0.2.2: 15 % of the samples sound, 234 gaps over 1 ms in 7 s. 0.2.3: continuous, no gap over 1 ms, every 20 ms window a clean sine. A RemoteFM1 session (HELLO) over USB-MIDI answered as before.
🤖 Generated with Claude Code
Show all 3 filesHide 1 files
Other files- Recording from the FM-1 over USB works. In 0.2.1 and 0.2.2 a computer recording the FM-1's USB audio input got
mostly silence (82-85 % zeros, 2-15 ms of sound every ~29 ms). felucca-bsp's stall check (the host stopped
reading for over 20 ms) counted USB polls as if only its 2 kHz timer polled; RemoteFM1 also polls from its main
loop, 100,000-225,000 times a second, so the stream was dropped every millisecond. It now counts milliseconds
(felucca-bsp patch 0003, hook
v0.2.2RemoteFM1 0.2.22 files
Install from the web installer: https://remotefm1.com/installer/ (Chrome or Edge), or with
python3 tools/fm1_install.py remote-0.2.2.fwsc.Released 2026-10-27, built with
./build.sh --release 0.2.2(and--no-blefor the USB-only package). It replaces 0.2.1. Both packages install asFM-1_52000202.Package sha256 remote-0.2.2.fwsc, USB + Bluetooth MIDI (the default)489857fcc91104cd4edf19c7c975c0e6258d311931830838e9d9e6913bb3cb89remote-usb-0.2.2.fwsc, USB only4414f8f0b0936cb22c3fac91889e0df2cfa274d6322844edf13af5408841fc4dWhat changed from 0.2.1
- Bluetooth about 6x faster. The radio now uses the 2M PHY, 251-byte link-layer packets (Data Length
Extension), an ATT MTU of 247 (244-byte writes), 16 receive buffers and a 1024-packet input queue, and asks for a
7.5 ms connection interval first. JieLi's SDK left all of these off. Measured on an FM-1 with a Mac, 1 KB SysEx
frames: about 6 KB/s in 0.2.1, about 35 KB/s now (38 KB/s with more in flight), nothing lost with 14 KB
unacknowledged. macOS took 2M, 130-byte link packets and 7.5 ms. HELLO_R
capsbit 8 says so. - Each screen change appears whole over Bluetooth. A new TILES flag, HOLD (
capsbit 7): the FM-1 draws held frames into its off-screen copy and shows them with the frame that completes the change. Turning a knob that changes big text shows whole screens, never half old and half new. A change that stalls is shown by itself after 1.5 s. - Hosts (this site's player and libremotefm1): over Bluetooth they pace frames for the link (30 KB/s with 0.2.2, 5.5 KB/s with older units), send busy tiles with 4 colours first and the exact colours once the screen is still for a second, and send each change as one snapshot. USB and the vendor bulk interface are unchanged.
- STATS_R carries what the Bluetooth link negotiated (interval, MTU, data length, PHY), for diagnosing a slow link.
Testing
On an FM-1 on 2026-10-27: installed over 0.2.1 and development builds; over USB-MIDI SysEx a session, every TILES encoding, FRAME_ACK and LEDS (about 300 small frames a second round trip); over Bluetooth MIDI with a Mac, this site's player running ChoralRoot: page changes and a turning PRESETS knob shown whole, no timeouts or lost frames.
- Bluetooth about 6x faster. The radio now uses the 2M PHY, 251-byte link-layer packets (Data Length
Extension), an ATT MTU of 247 (244-byte writes), 16 receive buffers and a 1024-packet input queue, and asks for a
7.5 ms connection interval first. JieLi's SDK left all of these off. Measured on an FM-1 with a Mac, 1 KB SysEx
frames: about 6 KB/s in 0.2.1, about 35 KB/s now (38 KB/s with more in flight), nothing lost with 14 KB
unacknowledged. macOS took 2M, 130-byte link packets and 7.5 ms. HELLO_R
v0.2.1RemoteFM1 0.2.12 files
Install from the web installer: https://quixotic7.github.io/RemoteFM1/installer/ (Chrome or Edge), or with
python3 tools/fm1_install.py remote-0.2.1.fwsc.Released 2026-10-27, built with
./build.sh --release 0.2.1(and--no-blefor the USB-only package). It replaces 0.1.1. Both packages install asFM-1_52000201.Package sha256 remote-0.2.1.fwsc, USB + Bluetooth MIDI (the default)c4771c6cb6f38ac74b30d86a0f07b5f1ee90a3bcc270cfe7cd54fc3e74e5344fremote-usb-0.2.1.fwsc, USB only073b9e4f05f0aa783d92904a8d474ae817359a613295ee88f73b8d61dbd52f1eWhat changed from 0.1.1
- Built on fm1-base and felucca-bsp (MPL-2.0). TransitFM1's platform is gone. The firmware is MPL-2.0 from 0.2; 0.1.1 stays GPL-3.0-only.
- Bluetooth MIDI. The panel and the screen work without a cable, with the same messages as over USB. The screen is slower that way (a few KB/s): fine for a still screen, not for a moving one. Updates still go over USB only.
- USB audio. The computer plays through the FM-1's speaker or headphones, with MASTER as the volume. The FM-1 is an audio input too. Turning MASTER no longer crackles (felucca-bsp patch 0002).
- It answers installers as itself:
FM-1_52XXYYZZ(FM-1_52000201for 0.2.1), on the USB device "FM-1". 0.1 answered as the official V15 (FM-1_015). An installer that does not know it yet may refuse it. - REC held at power-on enters the chip's own USB update mode (0.1's key was OCT-, into its update loader).
- fm1-base's safeguards: the boot guard (two failed starts give a safe mode with USB on), the crash screen,
the watchdog. Updates use felucca-bsp's loader (
ota-FM-1_900), which writes the app area only. - The vendor bulk interface moved from interface 2 to 4 (after USB audio in and out); bcdDevice 4.50. Hosts find it by its class.
What it writes in flash
- 0xF2000..0xF3FFF: Bluetooth's address and any pairing, at the first Bluetooth start (the Bluetooth package only).
- 0xFC000..0xFDFFF: the panel calibration, only when OCT- and OCT+ are held at power-on.
- Every update stages its loader at 0xE0000..0xE4FFF, as 0.1's did.
Nothing else. These places are free in ChoralRoot's map and in the stock firmware's, so their data stays.
The USB-only package
remote-usb-0.2.1.fwschas no radio and none of JieLi's Bluetooth library. Like every FM-1 package, it still carries the three JieLi SDK files the chip boots with (Apache-2.0).Testing
On an FM-1 on 2026-10-27, the USB + Bluetooth package:
- installed over RemoteFM1 0.2.0 and over FIZZ;
- over USB-MIDI SysEx: HELLO, a session, every TILES encoding, FRAME_ACK, LEDS (about 265 small frames a second round trip; a full frame drawn in 22 ms);
- over the vendor bulk interface (interface 4): about 845 KB/s in, 815 KB/s out, 0.16 ms echo; about 610 KB/s while USB audio plays, with no errors;
- over Bluetooth MIDI as "FM-1 7938": HELLO, a session, about 22 frames a second round trip, keys, buttons, encoders and MASTER, 155 frames of an interactive demo all acknowledged;
- USB audio on the speaker and on headphones (headphones mute the speaker), MASTER as the volume without crackle.
Tested on an FM-1 on 2026-10-27: both packages; installs from RemoteFM1 0.2.0, FIZZ and ChoralRoot 0.27, and from 0.2.1 to ChoralRoot 0.27. Not tested on an FM-1: the way back to M-VAVE's V15 from 0.2.