Firmware

RemoteFM1

Peaking98/100

RemoteFM1 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.

Downloads
0
Stars
25
Forks
3
Commits
235
Last commit
Download v0.3.3

remote-0.3.3.fwsc· 597 KB· +5 files

GPL-3.0· Quixotic7/RemoteFM1·downloads come from the creator’s GitHub releases

199
Commits
10
Releases
199 commits and 10 releases in the last year
Activity · last 12 months
10 releases
  1. 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 as FM-1_52000303.

    Packagesha256
    remote-0.3.3.fwsc, USB + Bluetooth MIDI (the default)f123329b1b0b98ed0dc1085e39d2ab8368d50da4ffe410426ab3ad7688d60242
    remote-usb-0.3.3.fwsc, USB onlyc57b0141d0d9a7fd354fb8bd0f027b4cfa5d28fcbf8ad72d4179e4f1c47c1d06

    What 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.fwsc is the package with USB and Bluetooth MIDI (the one The Firmware Hub lists), remote-usb-0.3.3.fwsc the USB-only one; SHA256SUMS lists both. GitHub built and signed each file from this tag's source (The Firmware Hub's shared workflow); check one with gh 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 in tools/hub_build.sh; they are compiled in, never in the repository or the release. LICENSE, LICENSING.md and LICENSES.zip carry every licence. Installing firmware is at your own risk.

  2. 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 with tools/hub_build.sh 0.3.2 (./build.sh --release 0.3.2, and --no-ble for the USB-only package). It replaces 0.3.1. Both packages install as FM-1_52000302.

    Packagesha256
    remote-0.3.2.fwsc, USB + Bluetooth MIDI (the default)f814257effa8c972d407db271bd8c40392a980a2c0d73cd206132a776e99548a
    remote-usb-0.3.2.fwsc, USB only46f0e9ea218bc3a64125439a95f83b06ff31c42f3b335e56f4a4c9bfe7717ef2

    What 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.fwsc is the package with USB and Bluetooth MIDI (the one The Firmware Hub lists), remote-usb-0.3.2.fwsc the USB-only one; SHA256SUMS lists both. GitHub built and signed each file from this tag's source (The Firmware Hub's shared workflow); check one with gh 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 in tools/hub_build.sh; they are compiled in, never in the repository or the release. LICENSE, LICENSING.md and LICENSES.zip carry every licence. Installing firmware is at your own risk.

  3. 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.
    ModelPackageUpdate identitysha256
    SMK-37 Pro, Starrykey 37 Playremote-smk37-0.3.1.fwscSMK-37 Pro_52000301c9b8b6192d485d44c13f200a29c0fa38aafca398a0998b8cfda095d317ef6e67
    remote-smk37-usb-0.3.1.fwsc (USB only)85c24d4250c2d5a2c73ed8a66aeedcf947985228cd1a2a77333756a80326c4fa
    SMK-37 Eliteremote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301a90ef92395ddfb71c6fb8ea2ddbf1458eb6836395684ed9f52fe1ad40e4734b1
    remote-smk37-elite-usb-0.3.1.fwsc (USB only)a5f8d99409ad7aaa3357f0ea8ec28d3d5e245c8ba3ba9848170d1909b88315f2
    MKE-P37remote-smk37-mke-0.3.1.fwscMKE-P37_5200030100302ab2a5ee4ff7efaa09f644fdd5a76090a222329e6336ded94769d1bb1205
    remote-smk37-mke-usb-0.3.1.fwsc (USB only)c2e6bb555f2ffaf373dace158bc7aa19c1c9c2ef92c30ff3737b7a67a3ecfe99

    Built from #11 with BOARD=smk37 [MODEL=elite|mke] ./build.sh [--no-ble] --release 0.3.1. The control table and the tester steps are in SMK37.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

  4. 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.
    ModelPackageUpdate identitysha256
    SMK-37 Pro, Starrykey 37 Playremote-smk37-0.3.1.fwscSMK-37 Pro_520003017f23f2316f7b02bbbc2b19df112a686fffa5af3acfa4412a2a875995ec47d885
    remote-smk37-usb-0.3.1.fwsc (USB only)34b863904bcb2f1a628a724e5e013418d3592d449525a8ef18f52ba422331e31
    SMK-37 Eliteremote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301ddb1d5897d336b57b7cce6cd8dc96c5370f4b34015fbc511c1f933ac94036b41
    remote-smk37-elite-usb-0.3.1.fwsc (USB only)6367080d6aef30f22f3cfc2e7b5b7720d8d9edd448d4c3a75901223cb799de59
    MKE-P37remote-smk37-mke-0.3.1.fwscMKE-P37_520003012ea293ebcafbceb40a33da2f0e67fd5c5d7be7ec211314a01cb27dd01112916a
    remote-smk37-mke-usb-0.3.1.fwsc (USB only)37340d22fbe57b0307b2e0906d03fd6871519e812ce2502663fef47b660a7e30

    Built 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 in SMK37.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

  5. 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 smk37 branch (#3) with BOARD=smk37 [MODEL=elite|mke] ./build.sh --release 0.3.1 (and --no-ble for the USB-only packages).

    ModelPackageUpdate identitysha256
    SMK-37 Pro, Starrykey 37 Playremote-smk37-0.3.1.fwscSMK-37 Pro_5200030121431ea2388be8415c9148950e240cb4539b50233711c42a0ced3381c7a4de7c
    remote-smk37-usb-0.3.1.fwsc (USB only)fd82d8df94196805953202583bcb1390a517e90f6f4e62d1e3de9b93c65f52c9
    SMK-37 Eliteremote-smk37-elite-0.3.1.fwscSMK-37 Elite_52000301e1d0bae31257be687760cb74b09fe4e7c2d7abfc266a3d3ce547e61207980fe8
    remote-smk37-elite-usb-0.3.1.fwsc (USB only)fe39be6e944213866a03d78d5fe35585801c95d7b9aec2ab806564c8e4bbdf2f
    MKE-P37remote-smk37-mke-0.3.1.fwscMKE-P37_52000301a9473ab7f9d232fd2ad4142a89e8dd1a48995517675b9d615892982e92dbbfc0
    remote-smk37-mke-usb-0.3.1.fwsc (USB only)191a77c03da44eb63a7d220bcf860a026edf214db4af21d25e70beeddbb5f3d5

    Controls

    • 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

  6. v0.3.1RemoteFM1 0.3.13 files

    Released 2026-10-31, built with ./build.sh --release 0.3.1 (and --no-ble for the USB-only package). It replaces 0.3.0. Both packages install as FM-1_52000301.

    Packagesha256
    remote-0.3.1.fwsc, USB + Bluetooth MIDI (the default)11680a48829ee5f4687da1148a60df192eb97e39d333ae18fd63931e3cd7e724
    remote-usb-0.3.1.fwsc, USB only3d7d88535fe003dd57ba465ba552b798a23ed420e50e7c29525247d92248da12

    What 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

  7. v0.3.0RemoteFM1 0.3.03 files

    Released 2026-10-30, built with ./build.sh --release 0.3.0 (and --no-ble for the USB-only package). It replaces 0.2.3. Both packages install as FM-1_52000300.

    Packagesha256
    remote-0.3.0.fwsc, USB + Bluetooth MIDI (the default)0403415f68afd8c087004ab65683378b3d52dd7669cd46fed11bdb7c923b9a9f
    remote-usb-0.3.0.fwsc, USB onlyacde3717ef90e5f60c43c2e14636537e34feb3c95020ff0b7872e666a108c584

    What 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; caps bit 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

  8. v0.2.3RemoteFM1 0.2.33 files

    Released 2026-10-28, built with ./build.sh --release 0.2.3 (and --no-ble for the USB-only package). It replaces 0.2.2. Both packages install as FM-1_52000203.

    Packagesha256
    remote-0.2.3.fwsc, USB + Bluetooth MIDI (the default)211f06f63e8ca09de2812c017db9bb229713ce8e5a102eba887031551b2b403c
    remote-usb-0.2.3.fwsc, USB onlye94574ee081dac596479a3de4ec0fd2aa0cea109a2692551b07037ad8eb17e4e

    What 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

  9. 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-ble for the USB-only package). It replaces 0.2.1. Both packages install as FM-1_52000202.

    Packagesha256
    remote-0.2.2.fwsc, USB + Bluetooth MIDI (the default)489857fcc91104cd4edf19c7c975c0e6258d311931830838e9d9e6913bb3cb89
    remote-usb-0.2.2.fwsc, USB only4414f8f0b0936cb22c3fac91889e0df2cfa274d6322844edf13af5408841fc4d

    What 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 caps bit 8 says so.
    • Each screen change appears whole over Bluetooth. A new TILES flag, HOLD (caps bit 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.

  10. 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-ble for the USB-only package). It replaces 0.1.1. Both packages install as FM-1_52000201.

    Packagesha256
    remote-0.2.1.fwsc, USB + Bluetooth MIDI (the default)c4771c6cb6f38ac74b30d86a0f07b5f1ee90a3bcc270cfe7cd54fc3e74e5344f
    remote-usb-0.2.1.fwsc, USB only073b9e4f05f0aa783d92904a8d474ae817359a613295ee88f73b8d61dbd52f1e

    What 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_52000201 for 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.fwsc has 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.