tidepool-fm1, image 1 from its README
1/4
Firmware

tidepool-fm1

Loud94/100

Tidepool for the M-VAVE FM-1: an ambient loop instrument as custom firmware. Twelve synthesised scenes, autoplay, and a Blank Canvas to record your own loops.

tidepool-fm1 is custom firmware for the M-VAVE FM-1, by @pjh-133. Open source under MPL-2.0, latest release v1.0.7 (November 2026), 1 star on GitHub.

forM-VAVE FM-1·by@pjh-133

Unclaimed. Is this yours? Sign in with GitHub as @pjh-133 to claim it.

Downloads
0
Star
1
Forks
0
Commits
15
Last commit
Download v1.0.7

tidepool-1.0.7.fwsc· 597 KB· +1 file

MPL-2.0· pjh-133/tidepool-fm1·downloads come from the creator’s GitHub releases

15
Commits
7
Releases
15 commits and 7 releases in the last year
Activity · last 12 months

Tidepool for the M-VAVE FM-1

The Tidepool splash screen: a tide pool at dusk

Tidepool is an ambient loop instrument, here as custom firmware for the M-VAVE FM-1 pocket synth. Each bank is a scene with sixteen loops (drones, textures, melodies and beats). Turn them on and off from the keys and they always fit together, in time and in key. You can reshape them with the knobs, change their chords, or hand the whole thing over to autoplay and just listen. A fourteenth bank, the Blank Canvas, is yours to fill: record your own loops on 36 instruments.

Every sound is synthesised live on the FM-1. There are no samples: each note is built from oscillators, filters, envelopes and noise as it plays, so changing the chords takes effect at once.

Unofficial firmware. This is a hobby project, not made or supported by M-VAVE. Installing it replaces the FM-1's own firmware until you put that back (see Going back to the stock firmware). Use it at your own risk.

Install it from your browser (Chrome or Edge, FM-1 connected by USB), or try it in the browser first: the same firmware, with sound, no FM-1 needed.


Quick start

  1. Install the firmware on your FM-1.
  2. Turn PRESETS to pick a scene you like the look of, from Shallows through to Cyberpunk.
  3. Press SEQ (this starts and stops autoplay mode).
  4. Listen as the music builds: loops come in and drop out on their own, and the chords change now and then.
  5. Press any white key to bring in, or take out, the loop in the matching pool on the screen.

When you're done, press SEQ again and the music winds down gently to silence.

The scenes

All thirteen preset banks with every loop playing

#BankMood
1ShallowsUnder the water: a low drone, glass arpeggios, kalimba, rain and ocean
2Deep SpaceEvent horizons, star bells, sonar and a lone flute
3Forest FloorEarth hum, cello, marimba, crickets, a stream and an owl
4Neon RainA city at night: Juno pads, chord stabs, lo-fi beats, rain on glass and traffic
5Dungeon SynthStone organ, lost choir, harpsichord, war drums and cave drips
6AuroraThe northern lights: glassy pads, ice bells, whale song and sleigh bells
7DunesDusk in the desert: tanpura, oud, ney flute, darbuka and a campfire
8Zen GardenSpring rain in a temple garden: sho, koto, shakuhachi, taiko and wind chimes
9ClockworkA workshop of gears: music box, celesta, reed organ, tick-tock and a cuckoo
10Night CaféLofi beats on a rainy night: dusty Rhodes, sub bass, boom-bap drums, vinyl crackle, tape wobble
11BonfireDark fantasy among ruins: a cathedral organ, a solo cello, a lone soprano and a fire to rest at
12Old BloodA gothic nightmare: choir, tremolo strings, a warped music box, church bells and crows
13CyberpunkA megacity in the rain, in the mood of Blade Runner: swelling brass synths, a lonely sax, flying cars and fire
14Blank CanvasEmpty: record your own loops

Each bank has its own colours, an animated pixel-art banner and its own shape of pool. Bonfire, Old Blood and Cyberpunk are written in the mood of Dark Souls, Bloodborne and Blade Runner, but every sound, chord and picture in them is original.

Playing it

When you switch on or change bank, nothing plays yet and the bar counter waits at bar 1. Pick the loops you want on the white keys (they blink, waiting), then press PLAY and they all start together on the first beat. Or press SEQ to let autoplay build the mix for you.

The screen shows the bank's name and tempo, its four chords (the current one lit), and sixteen pools in four rows. Each pool is a loop that glows in its row's colour while it plays.

The keys and knobs

ControlWhat it does
White keys 1–16Turn a loop on or off. Rows, top to bottom: drones, melodies, beats, then textures (rain, wind, fire: the scene's atmosphere). While the music is playing, a loop waits for the next beat to come in, blinking until it does. While it's stopped, a loop you pick blinks until you press PLAY. Keys 1, 5, 9 and 13 glow faintly to mark where each row starts
KNOB 1–4Adjust the selected row's four loops, one knob each
OCT− / OCT+Choose what the knobs adjust: Volume, Attack, Decay, Reverb, Echo or Pan (shown bottom left)
ALGORITHMChoose the row the knobs adjust. Pressing a key selects its row too
SELECTTempo (56–140 bpm)
MASTERMain volume
PRESETSChange bank. Everything fades out, then the new bank waits at bar 1 for you to pick loops and press PLAY (or SEQ)
SAVERemember the tempo, the bank and every loop's settings in every bank. Lit when there's something unsaved

Play, chords and autoplay

ControlWhat it does
PLAYStart: the loops you've picked come in together, from bar 1. While playing, PLAY stops everything and the counter goes back to bar 1; press it again to bring back the same mix. PLAY blinks when loops are picked and waiting
Hold PLAY, turn KNOB 1Change the bank's chord progression. 0 is the bank's own; 1–99 are new ones in the same key, each the same every time. The change comes in at the next bar. Hold PLAY for a moment and the screen reminds you
SEQAutoplay. Tidepool brings loops in and out on its own, once every four bars (faster at higher tempos). It builds up from nothing to about two loops in each row, keeps every row going, changes the chords now and then, and changes the texture only rarely. It works on any bank, the Blank Canvas included
SEQ againEnd autoplay gracefully. Loops drop out a few at a time, every four bars (the beat first, the drones last), until everything has stopped. SEQ blinks while it ends; press SEQ once more to change your mind
Hold HOME for 3 secondsSurprise me: a random mix with random settings. A countdown shows on screen; let go early and nothing happens

The Blank Canvas: record your own loops

The Blank Canvas while recording

The fourteenth bank starts empty. Its sixteen pools fill with loops you record, and each one keeps its own instrument. Once recorded, they play like any other bank: turn them on and off, adjust them with the knobs, autoplay them.

To record a loop:

  1. Turn PRESETS to the Blank Canvas, then press GLO to enter recording mode (GLO lights up). The keys now play an instrument, and they respond to how hard you press.
  2. Set the loop up:
    • PRESETS chooses the instrument.
    • KNOB 1 sets the loop's length: 1, 2 or 4 bars.
    • KNOB 2 sets the snap: off, 1/16, 1/8, or BAR, where each note starts on a bar line and lasts whole bars, for held chords.
    • KNOB 3 turns the click on or off.
    • OCT− / OCT+ shift the keys' octave.
  3. Press REC to start a new loop in the next free pool.
  4. Press REC again. A one-bar count-in starts at the next bar line (straight away if nothing is playing yet), then recording begins.
  5. Play. The loop goes round and round its length, and each pass adds to what's already there, so you can build it up layer by layer.
  6. Press REC a third time to keep it. It is saved straight away (no need to press SAVE) and keeps playing, so you can go straight on to record the next loop over it.

GLO during a take cancels it. GLO or HOME takes you back to playback. PLAY starts and stops the mix while you record, so you can record over other loops.

To delete a loop: hold EDIT and tap the loop's key (its pool blinks red), then tap the same key again. Any other key cancels.

The 36 instruments

KindInstruments
KeysFelt keys, Warm organ, Rhodes, Harpsichord, Celesta, Toy piano
Plucked and struckGlass bell, Kalimba, Pluck, Harp, Marimba, Music box, Nylon guitar, Vibraphone, Koto, Oud, Steel pan
Strings, winds and voicesSoft pad, Choir, Cello, Flute, Mellow brass, Strings, Shakuhachi, Violin, Muted trumpet, Soprano
LeadsChip lead, Synth lead
BassSub bass, Moog bass, Upright bass
BellsTemple bell, Singing bowl
DrumsDrum kit and Hand drums: each key plays a different drum (the octave buttons don't change them)

The drum kit selected in recording mode

Drum kit, from the lowest key: kick, rim, snare, clap, low tom, closed hi-hat, mid tom, high tom, pedal hi-hat, crash, open hi-hat and ride. From the second F up: deep kick, shaker, brush, tambourine, cowbell and ride. The top keys repeat the main drums.

Hand drums: darbuka (deep and rim strokes), riq, frame drum, taiko and small taiko, wooden clappers, udu, finger cymbals, two agogo bells and shaker, repeating up the keyboard.

Installing

The easiest way is the web installer. Open it in Chrome or Edge, connect the FM-1 by USB, and press Install. The browser asks once for permission to use MIDI: allow it. Don't unplug the FM-1 while it writes. The same page can put M-VAVE's own firmware back.

Your settings and recorded loops survive later updates of Tidepool.

Ask Claude about it

Tidepool comes with a Claude skill. Once it's added, you can ask Claude things like "how do I record a drum loop?", "which bank has a cello?" or "what does ALL 16 LOOPS USED mean?" and get answers from how Tidepool actually works.

  • Claude Code: add this repository as a plugin marketplace, then install the plugin:

    /plugin marketplace add pjh-133/tidepool-fm1
    /plugin install tidepool-fm1@tidepool-fm1
    
  • Claude.ai and the Claude desktop app: download tidepool-fm1-skill.zip, then upload it under Settings → Capabilities → Skills. (Custom skills need a plan that includes them; you may need to switch skills on in that page first.)

The skill is in plugin/skills/tidepool-fm1/: it only explains how to use Tidepool, and needs no access to anything else.

Building it yourself

To change Tidepool or build it from source, you build the firmware, then send it to the FM-1 over USB.

The firmware is built on fm1-base, which is included here as a git submodule. Its README covers the toolchain in more detail.

You'll need:

  • Python 3, with mido and python-rtmidi for installing (pip install mido python-rtmidi).
  • JieLi's toolchain for the FM-1's chip, and their AC79 SDK. fm1-base fetches both for you (below).
  • On a Mac, Docker: the toolchain is Linux-only, so the build runs it in a container automatically.

1. Get the code and the tools

git clone --recursive https://github.com/pjh-133/tidepool-fm1
cd tidepool-fm1
base/tools/get_toolchain.sh          # JieLi's toolchain, into ~/.jieli/toolchain
base/bsp/tools/get_sdk.sh            # JieLi's AC79 SDK, into ~/.jieli/ac79-sdk

2. Build

AC79_SDK=~/.jieli/ac79-sdk JIELI_TOOLCHAIN=~/.jieli/toolchain python3 base/tools/build.py firmware

This makes firmware/build/tidepool.fwsc.

3. Install

Connect the FM-1 by USB and switch it on, then:

python3 base/bsp/tools/fm1_install.py firmware/build/tidepool.fwsc

It asks before writing. Don't unplug the FM-1 while it writes (about a minute). If an install is ever cut off, the FM-1 waits in update mode: run the same command again and it finishes.

Going back to the stock firmware

Use "Back to the stock firmware" on the web installer, or install M-VAVE's official firmware file from the command line:

python3 base/bsp/tools/fm1_install.py FM-1.fwsc

Try it without an FM-1

The browser version is the quickest. To build things locally, fm1-base's host simulator runs the same firmware on your computer, with no toolchain needed. It's driven by scripts, which take screenshots and record WAV files as they go:

python3 base/tools/build.py firmware --host
firmware/build/host/tidepool_host firmware/tests/newbanks.txt firmware/build/host

The scripts in firmware/tests/ cover each part: the banks, the Blank Canvas, autoplay, the instruments and settings from older versions.

How it's made

The first five banks are a port of the original Tidepool web app, a browser instrument built on Web Audio, translated into C for the FM-1's chip. The other seven, and the extra instruments, were written for the FM-1 in the same style. The engine, the banks, and how everything was measured and tested are described in docs/DEVELOPMENT.md.

FolderWhat's in it
src/The sound engine and the banks: oscillators, filters, envelopes, reverb, echo, and each bank's sixteen loops
firmware/The FM-1 app: the panel, the screen and its pixel art, saving, the recorder, autoplay, and the tests
host/A Mac benchmark that renders the banks to WAV and estimates their cost on the FM-1
web/An older browser emulator of the panel (first bank only); the site's is the whole firmware
firmware/site/, firmware/docs/The website's front page and manual
plugin/The Claude skill (with .claude-plugin/ at the top, the plugin marketplace for Claude Code)
base/fm1-base, the platform layer (git submodule)

Credits and licence

Tidepool's own code is under the Mozilla Public License 2.0.

It's built on fm1-base by Charles Vestal and felucca-bsp by Leo Kuroshita (Hügelton Instruments), both MPL-2.0. They provide the FM-1's hardware layer, screen drawing, saving, USB and the installer. Thanks to everyone in the FM-1 firmware community whose work made custom firmware possible.

M-VAVE and FM-1 are trademarks of their owners. This project is not affiliated with them.