Skip to content

Releases: Quixotic7/RemoteFM1

RemoteFM1 0.3.1

Choose a tag to compare

@Quixotic7 Quixotic7 released this 31 Oct 07:06

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.

Package sha256
remote-0.3.1.fwsc, USB + Bluetooth MIDI (the default) 11680a48829ee5f4687da1148a60df192eb97e39d333ae18fd63931e3cd7e724
remote-usb-0.3.1.fwsc, USB only 3d7d88535fe003dd57ba465ba552b798a23ed420e50e7c29525247d92248da12

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

RemoteFM1 0.3.0

Choose a tag to compare

@Quixotic7 Quixotic7 released this 30 Oct 21:58

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.

Package sha256
remote-0.3.0.fwsc, USB + Bluetooth MIDI (the default) 0403415f68afd8c087004ab65683378b3d52dd7669cd46fed11bdb7c923b9a9f
remote-usb-0.3.0.fwsc, USB only acde3717ef90e5f60c43c2e14636537e34feb3c95020ff0b7872e666a108c584

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

RemoteFM1 0.2.3

Choose a tag to compare

@Quixotic7 Quixotic7 released this 29 Oct 01:26

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.

Package sha256
remote-0.2.3.fwsc, USB + Bluetooth MIDI (the default) 211f06f63e8ca09de2812c017db9bb229713ce8e5a102eba887031551b2b403c
remote-usb-0.2.3.fwsc, USB only e94574ee081dac596479a3de4ec0fd2aa0cea109a2692551b07037ad8eb17e4e

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

RemoteFM1 0.2.2

Choose a tag to compare

@Quixotic7 Quixotic7 released this 28 Oct 02:21

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.

Package sha256
remote-0.2.2.fwsc, USB + Bluetooth MIDI (the default) 489857fcc91104cd4edf19c7c975c0e6258d311931830838e9d9e6913bb3cb89
remote-usb-0.2.2.fwsc, USB only 4414f8f0b0936cb22c3fac91889e0df2cfa274d6322844edf13af5408841fc4d

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.

RemoteFM1 0.2.1

Choose a tag to compare

@Quixotic7 Quixotic7 released this 27 Oct 23:05

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.

Package sha256
remote-0.2.1.fwsc, USB + Bluetooth MIDI (the default) c4771c6cb6f38ac74b30d86a0f07b5f1ee90a3bcc270cfe7cd54fc3e74e5344f
remote-usb-0.2.1.fwsc, USB only 073b9e4f05f0aa783d92904a8d474ae817359a613295ee88f73b8d61dbd52f1e

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.