The Radxa Linkr

I’ve done quite a few KVM reviews , and there’s a reason for that: All of the homelab and industrial IoT stuff I test needs some sort of physical access for setup, and even if I do have monitors with multiple inputs, USB video capture dongles, etc., it gets really old to have to constantly re-wire stuff, switch between keyboards, etc.

Additionally, most of the newfound range of cheap/compact KVMs that have popped up over the past two years still need an Ethernet connection, and it’s become ridiculously hard to have even semi-permanent test setups–I keep running out of both power and Ethernet ports, and that’s been the reason why I’ve been limping along on Wi-Fi based Pi Zero KVMs as well KVMs that, sadly, require proprietary apps.

So when I spotted the Radxa Linkr, I just had to try it. And that was even before I knew I could get it to work with an agent…

Disclaimer: Radxa supplied me with a Linkr free of charge, and this review follows my usual .

Hardware

Radxa Linkr and its supplied cables
The Linkr and its supplied cables.

In the box, you get the Radxa Linkr and a set of cables (pictured above in real life, and below in the Quick Start guide).

Radxa Linkr Quick Start guide showing its ports, accessories and connection options
The supplied Quick Start guide (image: Radxa).

The hardware itself is pretty comprehensive, and packs quite a lot into the small 70 x 22 x 12 mm enclosure:

  • Rockchip RV1106G3 SoC, with a 1.2GHz Arm Cortex-A7 CPU, a RISC-V co-processor, 1 TOPS NPU and a hardware video encoder.
  • 256MB of integrated DDR3L memory.
  • 16GB eMMC storage or a microSD card slot (I got the variant with internal storage) for firmware and virtual media.
  • HDMI input up to 2560x1440 at 30Hz, with lower-resolution modes including 1920x1080 at 60Hz and custom EDID support.
  • Dual-band 2.4GHz/5GHz Wi-Fi 6 using an AIC8800 module, with client and hotspot modes.
  • A USB-C device port for keyboard and mouse emulation, power (5V/2A) and firmware flashing.
  • A separate USB-C network port for a direct host connection or 10/100Mbps Ethernet through the supplied USB-C to RJ45 cable.
  • One FN user button, a system status LED and an HDMI/video status LED.

The device itself is tiny, and the single FN button is used to identify it on the discovery page or (with newer firmware) to toggle the Wi-Fi hotspot with a double press. You can see the USB-C connectors on the back and side through the semi-transparent casing in the photo above.

A nice touch that you will appreciate if you manage many machines is that there are indicator lights that show when someone is remotely connected (the blue power LED will turn green) or there is a video input problem (signalled by a blinking video status LED).

Connectivity and Video Quality

Besides direct USB connectivity to your machine (which I honestly didn’t spend any time on), the Linkr supports both 2.4GHz and 5GHz Wi-Fi. However, it doesn’t seem to support my particular flavour of WPA3 (at least in current firmware versions), so I stuck to 2.4GHz/WPA2 for all of my testing, which is plenty fast enough.

That’s a decent tradeoff for me (I had zero latency issues, although I spend so much time in VDI and remote console setups that I don’t notice delays anymore) and, at least in one of my tests, was the only way I could connect to a machine in a remote corner of the house where 5GHz has very little reach–but it managed 60fps just fine.

The Linkr is quite flexible in terms of video capture. I’ve needed to hack in support for custom EDIDs in my old PiKVMs, so it’s nice to see that is baked in, and the built-in HDMI bridge goes from 1280x720@30/60Hz to 2560x1440@30Hz, with standard 1080p in the middle.

I also found it a nice touch that the Linkr includes a virtual sound card that it exposes via USB to the target system, although I have had zero use for audio in any of my tests…

Thermals

The Linkr, like all devices, does warm up while in use, and its metal underside can be surprisingly warm to the touch–and yet, my IR thermometer didn’t see it get past 45°C even after hours of continuous use (disconnecting, of course, lets it idle cooler).

Setup and UX

As you’ve probably divined from the Quick Start shot above, this is a pretty trivial web-based setup: go to linkr.now (with Chrome or Edge, because Apple still hasn’t figured out most of the modern device-related browser APIs), and you get an HTML app that will find the Linkr and help you connect to it – via USB or, later, via Wi-Fi.

The entire thing is very slick, and the user interface is both responsive and easy to navigate–here’s a little slideshow of the original firmware version:

A tour of the web interface captured with firmware 1.4.2.

Software

Firmware updates and release notes are available on GitHub, and since I got mine (v1.4.2), Radxa has added quite a few new features, as well as a bunch of fixes, in what is today v1.5.2:

  • A Plugin Center, which is a sensible way to keep adding more features without changing the core firmware–I haven’t yet had time to investigate how I could build my own, since I only noticed it as I finished this draft.
  • ZeroTier and EasyTier support (I use myself, but it’s nice to see options).
  • Screenshot OCR to recognise text in screenshots and edit or copy the results (see below); recognition runs locally, and an optional plugin supplies the OCR resources without Internet access.
  • Experimental IPv6 support (which works, at least on my LAN).
  • FN-button hotspot toggle (double-press it to turn the Wi-Fi hotspot on or off).

One fix in particular was very useful already (they fixed resolution switching with the Radxa Dragon Q8B as video input, and I’m still testing that this weekend), and the pace at which they are currently shipping updates is reassuring, even though I couldn’t find published source code for the firmware in the public repository.

Other than that, you get all the typical remote KVM features (as well as support, which I use extensively):

  • Video resolution settings (and custom EDID, as pointed out above).
  • Wake-on-LAN (for any MAC address, although you can pin the ones you need).
  • Keyboard and mouse control (as well as the virtual USB audio capture, all exposed via USB ID 1d6b:0104 - Multifunction Composite Gadget).

Mouse control can be set to both absolute and relative, as well as reversing the scroll wheel (which I thought was a very nice touch).

However, Mac and iOS users can’t really use some of the more advanced web UI features like screenshots, recordings or screen OCR, because they’re not available in Safari. Some of this is Apple’s problem, but I’ve hacked Safari-compatible screenshot support into other KVMs, so Radxa can probably improve that.

I did find the screenshot OCR feature interesting, but it requires pretty crisp text, and some SBCs just aren’t willing to play ball on their boot consoles–however, it can be immediately useful in a pinch:

Linkr screenshot OCR showing boot-console text and the recognition results
Screenshot OCR on a boot console; the recognition results can be edited and copied.

A nice touch about this is that recognition happens fully in-browser:

  • It uses tesseract.js to recognise English and Simplified Chinese.
  • By default, it downloads OCR resources over the Internet, including the worker script from cdn.jsdelivr.net.
  • The screenshot is processed locally by the browser worker, which returns the recognised text and bounding boxes to the UI.

The offline plugin just caches a local copy of the worker, engine and language data inside the Linkr itself, removing the external-download requirement.

APIs and AI Agent Control

But the real reason I am very much enjoying using the Linkr is that, unlike most KVMs, it actually exposes an API that you can either script against or just point your AI agent to.

I have been using that for over a month now to great effect (including doing a couple of and Windows installs, which is a veritable quagmire of edge cases) and built a piclaw add-on you can use as a reference.

The release notes also describe new API controls for resolution and video quality, which my add-on doesn’t cover yet. But the basic screenshot and input controls work amazingly well if you pair them with a vision-enabled model, and are really simple:

The documented public API uses an access token in the Authorization: token <token> header, and boils down to two endpoints:

  • GET /api/public/snapshot returns the current screen as a JPEG.
  • POST /api/public/control accepts an ordered events array containing keyboard, mouse, text and delay operations.

The control primitives are small enough to wrap directly in agent tools:

  • keyboard presses or releases keys using browser KeyboardEvent.code names, so combinations are sequences of key-down and key-up events.
  • mouse_abs positions the pointer using normalised coordinates between 0 and 1 (this can be a little tricky for some models, but they get it eventually).
  • mouse_rel moves it by pixel offsets (both support mouse buttons and scrolling).
  • text types up to 1024 characters, limited to printable ASCII, tabs and newlines.
  • delay pauses between events for a specified number of milliseconds (useful when the target needs time to react).

That gives an agent the usual screenshot/action loop without installing anything on the target machine.

I had to burn through quite a few tokens in initial testing (and the skills my add-on bundles are the result of that), but you should be able to use a relatively cheap model to automate typical system administration tasks, as long as it supports vision.

Can it do fully unattended installations? Well… It’s tricky. Can you figure out when to enter the BIOS on a random machine and what key to press? That is so variable across machines (and sometimes even on the same machine) that the only way I got it to work was to get into the BIOS (after a few tries), pick the boot volume myself and then hand over to piclaw.

The results and reliability are highly dependent on the AI model you use. I’ve had good experiences with astra, opus or sol on a variety of desktop automation tasks, and they were all able to use the Linkr to go through a standard OS installer. I also got them to check Windows updates (clicking through all the steps and choosing when to reboot) and even do console rpm-ostree and flatpak updates (and reboots) without any issues except the high token count that comes with handling screenshots (and model-side OCR).

This is what currently makes the Linkr worth looking at if you want to automate hardware setup, with the caveat that it can, indeed, do away with the odd bit of drudgery, but you need to be smart about how to do it (only retrieving screenshots at intervals/decision points to save tokens, for instance) and, preferably, script things so that the model is only really phoning it in.

For me it was almost a straight conversion of some of the stuff I’ve actually been doing in for a while, so it’s nice to have a way to set up a blank box.

Minor Hassles

Hardware-wise, I should note that you can’t hit a reset button with the Linkr, so if your hardware doesn’t honour Ctrl+Alt+Del, you’re stuck. Other KVMs have dedicated interfaces to do that (and you can always use a smart plug, like I do with my test SBCs), but it’s something to keep in mind.

Additionally, I’ve had a couple of instances where the Linkr had a little trouble fitting directly into PCs or SBCs (including Radxa’s own) because of lack of clearance around the HDMI port or having the USB-C port on the side (which in a few cases meant it would point straight into the desk).

Nothing that you can’t fix with an HDMI extension cable (I used a Chromecast male-to-female extension, which is around 10cm), but worth mentioning since it doesn’t come in the box.

Another minor hassle is that if you power the Linkr directly from your target device, many devices (even standard PCs) won’t power up USB until they’ve gone past display initialisation, so the Linkr may skip UEFI/BIOS screens while it boots.

When testing SBCs, I had to use that power/data splitter cable to keep the Linkr powered up independently–otherwise it would boot up after the servers had tried (and failed) to initialise HDMI, so I’d get no video out (and, depending on device, they wouldn’t reactivate HDMI after USB input or Wake-on-LAN, either).

Verdict

I’m obviously biased towards anything that lets me put a machine on Wi-Fi and get at it through a browser without installing yet another proprietary app, so the Linkr already had quite a bit going for it.

But having an API that I can script against, or hand over to an agent once I’ve persuaded the machine to boot from the right device, makes it considerably more useful for the sort of testing I do, and I am quite likely to replace some of my other KVMs with Linkrs solely to free up Ethernet ports.

I’ll still need the odd HDMI extension and a separate power supply for a few machines (especially ARM ones), but at least the wiring will be much easier, and who knows, I might even start testing more than one SBC at once…

Notes for October 12-17

Had a fairly slow start to the week, then a progressively intense ramp-up that I tempered by way of a couple of strategically timed outings and a little time on my own projects.

I also spent quite a bit of time playing with the , although I’m having trouble finding the right kind of inspiration. And all sorts of stuff keeps breaking…

I’m Done With Time Machine on Synology

Time Machine , mysteriously, on Golden Gate, and for some reason only my MacBook Pro was affected. Completely fed up with this, I just went and did what I had previously threatened: brought up a Samba Time Machine container (using mbentley/timemachine) in an unprivileged Debian LXC on tnas, backed by a bind mount from ZFS.

That entailed a bit of UID/GID finagling, and I must say I’m happy I don’t have to do it by hand myself again–took all of two minutes for piclaw to set everything up after I pointed it to my earlier post, and the LXC setup looks like this:

# lxc.conf
arch: amd64
cores: 2
features: nesting=1
hostname: timemachine
memory: 512
mp0: /local-zfs/folders/shares,mp=/mnt/shares
net0: name=eth0,bridge=vmbr0,firewall=1,ip=dhcp,type=veth
onboot: 1
ostype: debian
rootfs: local:102/vm-102-disk-0.raw,size=8G
swap: 512
unprivileged: 1

…whereas the container itself is managed via this snippet:

# docker-compose.yaml
services:
  timemachine:
    image: mbentley/timemachine:latest
    container_name: timemachine
    restart: always
    network_mode: host
    environment:
      # share is smb://hostname/TimeMachine
      - TM_USERNAME=timemachine
      - TM_GROUPNAME=timemachine
      - PASSWORD=<redacted>
      - TM_UID=1000
      - TM_GID=1000
      - SET_PERMISSIONS=false
      - VOLUME_SIZE_LIMIT=0
    volumes:
      # this is a pass-through mountpoint to the ZFS volume in Proxmox
      - /mnt/shares/timemachine:/opt/timemachine
    tmpfs:
      - /run/samba

Agent Stuff

I’m quite happy with how both kintsugi and my server/agent harness are turning out (I’m drafting this and all my upcoming articles in it). kintsugi needed a bit more work than I expected, though, because:

  • iOS self-signed certificates and general Safari weirdness required a bunch of fixes across the board
  • despite applying container isolation to agents, it bafflingly lacked any sort of non-network resource limits and I had one workspace stall the entire machine it was running in
  • I needed better remote management and telemetry

Most of those are now done, and I have it running on my (yes, I’ve pretty much sorted out ARM support) to add USB device passthrough and other features I need to do embedded/ESP32 development over the next few weeks.

Kintsugi developing itself
Kintsugi developing itself

Media

Finally watched the end of Ted Lasso, which completely did not disappoint. Our current TV time is mostly handpicked YouTube and Apple TV fare (there’s just no real competition in overall quality) and I feel like there’s not enough time to watch all of the good stuff (like Dark Matter, which we’re behind on).

I also spent a while fixing various issues (my custom weekly news downloads were not working after an upgrade) and fiddling with my a bit.

Miyazaki

Miyazaki
An excellent place to have lunch

11 Years at Microsoft

Unlike , I feel little need to mark the occasion. I could repeat most of last year’s reflections, with a few nuances.

Actually, let me do just that and save you the trouble:

  • AI has finally become a core consideration in business (pretty much all the customers I’ve worked with now understand the need for governance, foundational designs, standardised patterns, etc.), so we’re well past the experimentation phase.
  • Unsurprisingly, corporations have very different expectations from startups, so the Cambrian explosion I see outside work is much more muted and nuanced among customers, who are much more interested in getting actual value than in doing science experiments. The entire situation reminds me of the Big Data & ML hype cycle, only faster.

I am constantly reminded of this line from William Gibson’s Neuromancer:

“Night City was like a deranged experiment in social Darwinism, designed by a bored researcher who kept one thumb permanently on the fast-forward button.”

  • Geopolitical implications and polarisation are very much in people’s minds (inside and outside work). There is no avoiding discussions about the risks of relying on US inference providers, and the insularity of Europe regarding ownership of both core infrastructure and skilled resources is excruciatingly obvious to everyone even as they try to keep the business running.

Work is… worse than last year, I think, and yet on average the same:

  • My current organisation has been seesawing between regional and continental blueprints, which has again made being in Portugal a limiting factor in multiple respects (I guess this is cyclical, but it is extremely discouraging every time it happens).
  • I am definitely feeling stuck under the “Architect” label–I mentioned that last year, but the combination of constant reorgs and doing “outside the box” has become oppressive–if not, in fact, somewhat depressive.

Personally, things are OK in most respects, except:

  • My general physical condition: some back and neck trouble, and other things I’m figuring out
  • The biggest issue I have right now is clutter. And by that I mean largely mental clutter, given the sheer number of things I keep juggling.
  • Thanks to and my never-ending curiosity, I now also have trouble deciding what to do in my free time (there is just so much I can achieve), but I just can’t seem to relax–or stop having ideas.

And, of course, I am still letting my work define who I am, which I probably need to revisit at this point–I still want to build products, but that is just not happening here, at least right now.

My Watch Should Listen To Me

I have been pondering the Audio Intelligence Live Rewind feature that Apple announced in , and even though I know I am very late to this entire discussion, I still want to go on the record about it.

In short:

  • The feature is stupid, and was demoed poorly (you can usually just ask people to repeat what they said, and the idea that anyone would prefer using the watch is bonkers)
  • Rather than adding value to the watch, it makes it a target (companies and specific locations are likely to start banning its use)
  • In the current AI/privacy climate, Apple will likely not launch it at all, regardless of what they stated (and, hopefully, not in the EU, either)

I would very much prefer to map double-tapping the crown to a favourite app rather than such a dubious “feature”, but the key thing for me, though, in a world that is now awash with always-on AI recording of everything (or, as we old folk used to call it, “surveillance”), is that Apple is so late to this that it’s ridiculous.

The Voice Memo Conundrum

However, the ambient listening privacy controversy is not really what I’m concerned with, although I am dead certain that however well Apple has tried to explain that they don’t really store any raw recordings, nobody in the real world will understand the difference.

What I’ve been annoyed about for years are voice memos.

The experience of using Voice Memos on the watch has always been terrible, because even if you add it to a complication like I have, you still have to tap to record and tap to stop, which adds a lot more friction than, say, the Pebble Index 01, and it doesn’t let you do anything with the audio.

It doesn’t even auto-rename the clips themselves to anything meaningful, which is par for the course in any transcription app. I have a dozen voice memos on my iPhone that are just named after my address, because Apple clearly assumes I am recording voice memos on a mobile phone, and that location is paramount–which is just a bad assumption.

In fact, as I discovered the other day while trying to build a simple Mac app that would take voice memos and auto-transcribe them better (because the default transcription model is simply useless), the entire voice memos “ecosystem” on Apple’s platforms is completely broken:

  • Syncing either doesn’t work at all or takes forever (by the time a Watch recording syncs through from the iPhone to the Mac, it would have been simpler and faster to send a carrier pigeon)
  • You can’t automate any of it–the best you can do is poll the recording index on your Mac and hack your way towards retrieving the audio.

What Apple should have done, years ago, is to just let me run shortcuts from the watch (remember, before they acquired the team and nerfed it into what is today).

That way, I could, in these modern times, build a shortcut that would take audio or a transcribed prompt from the watch and do my own thing, either transcription and summarisation (like the Index 01 does), or, who knows, actual automation of other things, like .

But at least my Series 9 can add To-Dos and take notes using Siri.

I do have to tap the display to confirm the notes (even if I can’t really access any of that from anywhere else, since they broke all the iCloud integration APIs), but hey, it was enough to ramble three short, garbled sentences and remind me to write this out–three weeks ago.

I finally found the note today, and decided to write it up before tomorrow’s event, where I expect them to parade a potpourri of iPads on a stick to try to make relevant–years after Amazon and Google already shipped their own kitchen-top displays.

Gotta take the small wins, I guess.

The M-VAVE FM-1

Regular readers will know I’ve had a long fascination for the –after all, besides getting a quite some time ago, I also built a and accumulated more software instruments than I have time to use, as well as an embarrassing amount of other physical gear that brands me as a victim of Gear Acquisition Syndrome.

M-VAVE FM-1 in black-and-green DX7-style livery
The FM-1 in DX7 livery, running Sloop firmware.

I can only manage to dabble in music occasionally, but I’ve been interested in FM synthesis since the heady days of the 80s, so the M-VAVE FM-1 was like catnip to me because it was billed as a pocketable : six operators, a little keyboard and a speaker packed into a battery-powered box, with both USB and .

Disclaimer: M-VAVE provided me with an FM-1 review unit free of charge, and as usual this article follows .

But you just know a synth is becoming a cultural phenomenon when it floods all your feeds–including your GitHub watch list. Like the , the FM-1 has become a hackers’ paradise–but unlike it, it has blossomed into a music platform with literally dozens of open source firmware alternatives (some of which have online emulators).

And that is a completely different thing indeed, possibly with profound implications for conventional synth manufacturers. And if you’re in the synth scene, well… Just this week, it starred on a Bad Gear episode.

Update, a week later: M-VAVE seems to be leaning into this heavliy and has just published an open firmware workbench and a bunch of additional resources, which kind of validates my points below and is amazing to see.

Why?

From what I’ve been seeing (and I’ve compiled so far), the popularity of the FM-1 is due to a pretty straightforward combination of factors:

  • It is quite cheap (less than $70 depending on where you live)
  • It has a unique combination of size, hardware features (a nice screen, battery, USB audio, Bluetooth and TRS MIDI) and various knob controls
  • It is very hackable

Say what you want about the keyboard (which is a little inconsistent and likely not very long-lasting), we are talking about $70 for a device that can do both audio and Bluetooth and have a usable compact screen, features that stupefyingly expensive high-end gear has effectively never shipped together (well, statistically).

Hardware

The FM-1 connections
The FM-1 connections.

The specs are reasonably straightforward, so we’ll go through them right away:

  • 161.5 × 96.5 × 28.6mm, approximately 250g.
  • 27 silicone keys, colour TFT
  • USB-C MIDI, BLE MIDI, 3.5mm MIDI IN
  • 3.5mm audio jack and a tiny built-in speaker on the underside
  • 2000mAh battery (~12 hours play time)

It also comes in a range of colours–I picked the black-and-green version because it reminded me of the original , and I don’t regret my lack of imagination one bit despite it not really being a rational choice–but it was an easy one.

Stock firmware

When I decided to get the many years ago, I wanted something I could mess about with without a DAW or computer. I liked its speakers and keyboard, but wished it had better connectivity and the ’s six operators rather than four, and effects were practically non-existent.

Well, the FM-1 has six sine-wave operators, 32 algorithms and 12-voice polyphony, accepts DX7 SysEx banks directly, and adds six effects (filtering, chorus, phaser, distortion, delay and reverb), an arpeggiator with half a dozen different modes and a sequencer, which are described succinctly (but adequately) in the little handbook it ships with.

By pocket synth standards this already is a veritable cornucopia, but more to the point, the default firmware packs in sane operator editing (well, much saner than the , which was effectively a brick wall, and nicer than my ).

Here, patch editing is much easier: the display shows the algorithm, and you get a series of keyboard shortcuts for selecting operators and other parameters that can be directly tuned via the knobs.

And patch compatibility is surprisingly decent. Most people I’ve seen reviewing it seem to stick to the factory stock sounds (which are similar to some originals, but often with the FM-1 effects turned up to 11), but I loaded up the US factory ROM, which has most of the trademark sounds people associate with the (largely because most musicians couldn’t really figure out how to edit patches).

I compared it to my and Dexed, and although there were a few differences in timbre, most sounds were very, very close.

And that’s where you start understanding how easy this thing is to tweak–all you need to have is a browser that supports WebMidi (which, of course, Apple still refuses to support in Safari), pop over to something like fm1-editor.com, and it will merrily send SysEx commands to your FM-1:

A very nice web-based FM-1 browser patch editor for the stock firmware
A very nice web-based FM-1 browser patch editor for the stock firmware.

This is flabbergasting, because it is a far cry from, say, building a – that might be a bit more powerful, sure, but only in the sense that I can theoretically run eight parallel engines in it. And yes, this editor almost works with it (mine needs a software upgrade). And of course we’ve been able to do the same on various iPad apps, but it doesn’t feel the same.

Audio quality was… OK, I guess. I used mine mostly through my aggressively non-audiophile Logitech desktop speakers and random headphones, and of course the USB audio is purely digital.

Even if you don’t want to edit anything, the little colour TFT and clever control mapping make it really easy to navigate presets (you get 128 of them, by the way), and about as easy to edit presets as, well, any FM synth would be–again, much better than the , although most people will just get Dexed and edit them that way.

If you stick to the stock firmware, that is.

Hackability

I initially thought this to be based on a more modern microcontroller, but as it turns out the FM-1 is based on the JieLi AC791N/WL82, which I had never heard of before but seems to be a SoC that includes a fairly popular pi32v2 microcontroller associated with the Blackfin family.

The Jieli AC791N toolchain seems to be very well documented, but of course there’s already an entire reverse-engineering repository for the stock firmware, which includes the OTA protocol and a bunch of additional info.

And yes, a lot of the analysis and firmwares rely on , but having a relatively open toolchain available and decently clean references (plus plenty of code being shared between different firmwares) has definitely lowered the barrier to entry, both in terms of reducing the work of building new variants and integrating things from other existing instruments–there are emerging ports of other “classic” open-source synths in the works, and of course someone already has it running Doom…

But that’s not relevant to regular people. What is relevant is that WebMidi SysEx patch transfer was just the tip of the iceberg: the entire firmware image can be transferred that way, which makes it trivial for anyone to distribute (and use) different firmware versions–so to join the fun, all you need is an FM-1, a USB-C cable and a browser.

The ecosystem

I think the best way to understand how popular and diverse this thing is is to dive into Reddit, where you’ll find there are already enough firmware variants for people to be ranking them in multi-page Google Sheets:

The community FM-1 firmware comparison sheet
The community FM-1 firmware comparison sheet.

If that’s not your thing, there are also quite a few marquee sites popping up all over the place, like this one, which provide you with the ability to instantly download and install a bunch of popular firmware variants:

The FM-1 Firmware Hub
The FM-1 Firmware Hub.

Sloop

I decided to go with Sloop, because it has a certain feel about it–in short, it reminds me a lot of how I expected the to be like, and it feels like it was influenced by it to some degree (there are quite a few whimsical visualizations in there), besides having an absolutely kickass sequencer and web editor; this is becoming a staple feature in most custom firmwares, but I liked this one and am sticking with it:

The Sloop browser editor
The Sloop browser editor.

But the genius part of Sloop (and a few of the other firmwares I’ve tried) is how they make use of the hardware: You typically push and hold to switch into a different mode, and knobs, buttons and keys change functionality: the same controls can edit operators, trigger drums or operate a sequencer.

The rest of the industry

As someone who owns a Roland Aira S-1 (that I don’t think I ever wrote about), the core workflow and mode switching is familiar–but the screen makes one heck of a difference, since the S-1 has a puny LED segment display and no way to visualise anything:

M-VAVE FM-1 beside a Roland Aira S-1
The FM-1 and the S-1 side by side.

In short, the experience of the FM-1, even with stock firmware, is better than the Roland. But with custom firmware, the gap is tremendous. One FM-1 can, at least theoretically, do everything the entire Roland Aira range does, in one box.

The effects are decent enough that you also don’t need pedals (or a Norns like I built a few years ago), or string together a bunch of boxes. Plug in a MIDI controller (or a companion synth like the , which is a great match), and you’re set.

The way I see it (and even though M-VAVE certainly wasn’t planning this), the FM-1 might well become a cult device, because in complete contrast to just about everything else in the same form factor–Volcas, Behringer’s zillion clones, etc., it has effectively become a platform.

I can’t wait to see what people like David Hilowitz might make of it (if he ever decides to do his own take on firmware, of course).

With the iPad

This was a bit of a mixed bag, but mostly because of my expectations towards Bluetooth MIDI. BLE has always been very high on my list of “must have” features because it’s a pain to deal with wires when you’re trying to juggle an iPad and other gear on a couch, and I am happy to report that the stock firmware works with BLE and my iPad.

However, very few of the custom firmwares do, partly because they’re GPL 3 and partly because Bluetooth support relies on a rather bulky proprietary firmware blob that takes up a fair amount of resources on the FM-1, so all Felucca-based variants (like Sloop) omit it, which is sad to say the least.

But all firmwares support USB audio and MIDI, and those just work with AUM, so at least I only need the one cable (even if the iPad is, as usual, confused as to how to use an extra audio interface, a situation which has only slightly improved with iOS 27).

I haven’t tried plugging both the FM-1 and the to my iPad yet (solely because of lack of time), but I can’t see why it wouldn’t work, and will update this post when I do.

Verdict

I love this thing, and will be looking out for the SMK-37 Elite because the Pro variant seems to run on a similar platform and it might be just a matter of time until people figure out how to port FM-1 firmware to it. There’s no guarantee at this point, and the price point is quite likely to be much higher, but one can hope…

Regardless, I think that M-VAVE should lean into the homebrew firmware momentum and make some of this firmware bonanza official–the traditional synth industry very much enjoys churning out not just endless variations on the same theme, but also tiny portable devices that do much less and are much harder to use, and this is clearly an opportunity.

After all, even if I wanted an unapologetic clone of a classic synth like the Behringer JT Mini, why would I spend the same for something that will never be as customisable or configurable?

Again, as someone who owns a Roland Aira S-1 and is constantly disappointed by the utterly stupid menus and clunky interface that is being sold for roughly three times the cost of an FM-1, I hope people take notice not just of how much value you can deliver at the price point (the hardware combo is very nice, even if you just use stock firmware), but also how much better the custom firmware experience is when compared to “normal” instruments.

For quite a few years now, there has never been a good reason why digital synths needed to be single-purpose devices, and this is a very decent proof point.

If you have a significant other in your life that likes synths and sequencers, get them one for Xmas. Period.

Notes for October 4-11

Sometimes I feel like I am only really alive on weekends. Sadly, that only seems to happen part-way through Sunday afternoons, which speaks to my utter lack of timing of late.

The struggle against general entropy across work, life and the requisite bits of fiction required to keep myself motivated raged on throughout the week. on Friday afternoon, and at least now I have a plan, most of which revolves around simplifying things and attempting to do less.

Which my brain completely torpedoed this morning by wondering, “What if I built a small -like system to run inside Legion?”

I can’t seem to give myself a break, so here’s a screenshot of it working already:

Of course I called it Dante
Of course I called it Dante

Rust Removals

Still, there are things I can do to save myself some aggravation in my personal projects, even if they go against the broader industry trends.

I’ve ranted a bit online about how is so complex, slow and resource-hungry to build that it sucks the joy out of developing with it (yes, I know this is an unpopular opinion). I have a couple more reasons to give it up: I’m not getting any younger, and one of my projects can compile, test, vet, fuzz, link and cross-compile to Linux, Mac and Windows (Intel and ARM where applicable) in slightly less time than a single-platform Rust build. That’s massively more productive. I’m also running out of disk space everywhere, and Rust is a glutton for it.

Seriously now, I cannot begin to count the number of times I’ve reset my sandboxes because a Rust build ran amok. I just don’t have the resources to develop more than one or two things in it (like wrdp, which is likely to be the one Rust project I maintain going forward).

Hot Dogs and GPUs

The GPU trouble continues–I tried Strata on this week and was extremely impressed with the results on my RTX 3060 (it was very usable for routine coding tasks), but the card keeps crashing after a few minutes.

I’ve tried three NVIDIA driver versions, limited power consumption to 100W (from 170W), set a 65°C target temperature (steady state is now 75°C), capped the clocks at 405–1500 MHz (which seemed to help temperatures most), and changed the VM type from i440FX to Q35.

That last change completely altered the PCI configuration, but hey, at least we have AI now, and I was spared the indignity of dealing with netplan myself:

Unintended consequences
Unintended consequences

Upgrading the host kernel made no difference either: the GPU keeps dropping off the bus with Xid 79, followed by “Node Reboot Required”, so I’m looking for a solution. This was happening during PTX kernel testing, before I tried Strata, so I suspect this might just be burnout.

Either way, Qwen 3.8 Flash Next on this thing is unbelievable (well, compared to where we were a year ago). With a better card (in all regards), it might be “good enough” for slow-paced agentic workflows. Between GPU crashes, it was more than capable of simple code changes and running prebuilt test and release pipelines, and was able to report problems it ran into, including filing comprehensive GitHub issues:

Not bad at all for a local model
Not bad at all for a local model

The only caveat is that, paraphrasing Douglas Adams, it steers like a cow: prefill/generation is ~850/60 t/s, which is not bad, but it takes minutes to do basic things that gpt-6-luna replies to instantly.

Regardless of my pains, this is pretty awesome from a technical perspective. Strata’s disk-streaming and MoE-management tricks are not new, but they’re very finely tuned, and it kind of justifies all the time I’ve spent on go-pherence, even if I can’t do any NVIDIA work on it now.

Media

Finally, the work-life balance update: I actually managed to spend a good while going through Embassytown, which in good China Mieville form can be both dense and engrossing, and playing a bit of 2. I might have a life someday…

We Need To Start Seeing Other Agents

I’m feeling the edges of burnout creep in, and having gone through that before, I’m pulling the brakes on anything that is neither immediately useful nor satisfactory.

To begin with, I’ve decided to take it a lot slower with piclaw. I’ve been a bit frustrated for a while about the while upstream churns through three releases a week, but most importantly, maintaining it burns through credits I need for other things, so I’m calling it “stable” and moving to a monthly release cadence.

Too Much Pi

In practice, I’m stepping off the harness rat race since however exciting it is, and no matter how many nice tailored features I have, I also have the maintenance overhead that comes with addressing any of them.

But I also think there is a lot more to be done regarding AI and agents. Just not in the code-editor-cum-harness space, which is over-saturated, nor in the consumer space, which is just bonkers insane if you take Claude, Meta’s Muse and OpenAI’s Dots announcements as any indication of how far down the “let’s monetize agents” rabbit hole companies are sliding into.

I am also stopping work on rs-ai and swift-ai, as well as a bunch of other things I’ve been doing that were minor reinventions of the wheel, and taking a hard look at what I actually need right now.

Re-Focusing

In a parody of Maslow’s Hierarchy of Needs, I’ve broken down what I need into three categories:

  • I need to have a decent way to write, take notes and express myself
  • I need to have a cross-platform, cloud-ready coding environment
  • I need to have a personal agent I control (but that can manage infrastructure and automate things, increasingly hardware-related).

A way to write. A coding environment. A personal agent.

Can you see it yet?

Unlike Steve Jobs’ famous tirade, these are not the same thing. I thought it made sense to turn piclaw into that one thing, but I think there’s a reason why people both like Swiss Army knives and yet get specialised tools.

A Way To Write

First, writing. I need to do it every day to preserve my sanity, and it needs to be as frictionless as possible.

Over the past two or three weeks, I’ve been using to manage all of my drafts, for three reasons:

  • I wanted to stop futzing about with and using for syncing vaults, since the writing experience on was physically excellent.
  • I could access it from literally anywhere with a browser.
  • I really liked parts of the editorial suggestions I was getting from : the annotations, the sidebar, the fact that it made zero attempts at rewriting my text, etc.

But maintaining what was turning out to be a ProseMirror wrapper (and there are much better takes on that, being a phenomenal example of how to build a proper editor atop it), a dedicated storage back-end and a single-purpose pi-durable agent doesn’t make an iota of sense, and this effectively boils down to a few practical concerns:

  • I have a love-hate relationship with . Always have, always will, but the fact is that it works and is a known quantity.
  • I don’t want to sync the entirety of my private vault to my Windows machines (but I do want to pop in and do minor edits)

So I forked Markport (which lets me run in a browser from anywhere) and fixed a bunch of little annoyances before adding a pi-durable agent inside it that can run the exact same skills as (and much more).

I am also whipping bouncer into shape to proxy tunnels to it (because anywhere really has to be anywhere), but in the meantime I’m focusing on the agent UX inside :

Markport running Obsidian in a browser, with the embedded agent updating draft notes from hardware research
The same writing skills, now running inside Obsidian.

This works far better than it has any right to, and being based on pi-durable has a lot less exposure to upstream churn than building an entirely new agent.

I do suspect I will be going down the rabbit hole of writing a highly custom plugin, but right now my writing workflow stays more or less the same, except that the revision process goes (temporarily) back to the agent adding editorial block quotes to the text instead of highlights (and a bit less of them, too, now that I’ve learned what was useful feedback from ).

A Coding Environment

I was really excited when I came across Agents In The Cloud, because it does some of what I have been trying to get to with agentbox, webterm and piclaw very, very neatly:

  • It supports containerised sandboxes
  • It has an absolutely killer web experience (at least on desktop) that not only includes embedded (something I stopped short of doing in piclaw) but also has a very nice, usable layout for desktop use that is arguably better than mine for using, well, things like inside it.
  • It makes it easy to bootstrap new workspaces from templates
  • Serendipitously, it ships very usable speech-to-text using the very same Nemotron model I have been optimising for Intel iGPUs over the past week or so.

However, it lacks a few critical features that I need; some that I baked in to piclaw from the start, and some that I think are essential to managing it sanely:

  • A keychain (there are now shared workspace secrets since I raised that issue)
  • A plug-in/extension mechanism
  • Support for ARM builds
  • Support for hosts that don’t have EROFS enabled in the kernel (I added support for that in pve-microvm, but I can’t add support for it on many prebuilt ARM kernels, so cross-platform work is completely out the window)
  • A management API with things like workspace management, token revocation and the like (ssh to the host to manage it is not good enough)
  • Better networking

The huge blocker for me right now is that it was designed for a single developer working on a single box remotely, consuming only public services, and it shows: it defaults to being accessed via and letting sandboxes access the Internet, but I can’t reach on my LAN or any of my private MCP servers, which makes doing serious work on it a non-starter for me.

Since the maintainer is still trying to figure out how to accept contributions, I decided to fork it and invest a little bit of my time in baking in some essentials:

  • A draw.io editor/previewer (because I can’t really design anything if I can’t diagram it)
  • A first cut of a management API that aligns with how I manage , , Azure services and even KVM hardware now
  • A way for me to have my own dedicated upgrade channel (for both the ARM containers and my customisations)

I called the result kintsugi (look up the philosophy if you’re not familiar with it) and will be tweaking it just enough until I figure out if it fits my workflow and if there is a way I can contribute to the original project, which I think is a thing of beauty in its own right, but still needs room to grow.

Blue and white ceramic bowl with cracks repaired in gold
The kintsugi “repaired oriental ceramic bowl” logo, with my usual whimsy.

It’s not going to be a hard fork (I will contribute whatever I’m allowed to) and it’s also not going to replace piclaw, but if I manage to sort out the networking issues this weekend it might significantly lessen both my token expenditure and my time investment in maintaining things like the recent code review extension I built for piclaw.

A Personal Agent

This is the trickiest bit. piclaw is very much the one thing I work in everywhere (including a version I use at work, integrating with Copilot/Cowork and all the other $DAYJOB paraphernalia), and, again, I don’t intend to replace it.

I do need to let the agentic rat race settle a bit and figure out how to maintain it sanely instead of trying to keep up with Earendil’s breakneck pace of releases, and, above all, use it instead of burning tokens on it–hence the immediate move to end-of-month releases unless there’s a hotfix/bug I need to get out.

But I do think I need to evaluate ways out of the churn (and if you’ve read any of the Expanse books, you’ll know “churn” is a pretty loaded word).

So I’ve been looking at other agents, and leveraging them as much as I can:

  • This doesn’t really break my , I think: I’ve been porting most of my work skills and some custom tools to M365 Copilot
  • I’ve been using Codex a lot more on my Macs (it is the only exception to “absolutely no agents on my local machine” that I allow)
  • I’ve started investing a bit more time on gi.

This last bit is relevant because I need a portable flavour that isn’t based in and yet can provide a TUI and web UI within a hair of the basics that pi and piclaw currently deliver, both because I want to have some control over my tooling and because nothing else out there fits.

In particular, I need something more RAM-efficient than pi that will run anywhere (including RISC-V), and since I also miss doing LISP, using go-joker as a runtime for extensions is something I want to try–especially now it can now compile a few more things to native code via , and even do FFI to SDL.

But I just found out PiG is a thing, so I will probably have to reassess that in a few months.

Either way, piclaw will keep being the thing I rely on for keeping all of my other stuff together, including kintsugi until it can deploy itself reliably.

And for that, I’ve also started changing my a bit to save on tokens. I’ve been relying on gpt-6.1-sol for most of my coding and gpt-6-luna for everything else (terra is both not smart enough and too expensive as a default), but I’ve actually disabled both Astra and Opus and keep exploring cheaper alternatives.

You don’t need to burn money, patience and time (and by time I actually mean lifetime) to use productively, you just have to have common sense…

The Lenovo Chromebook Plus

A few months ago, around the time , I became really interested in Chromebooks again, partly because I’d completely lost touch and partly because I heard good things about the new ARM chipsets, namely the MediaTek Kompanio Ultra. But Chromebooks are not a common thing in my neck of the woods.

Read More...

Notes For September 27-October 3

This week was a bit different. For starters, it rained. And I visited the local office. And I consciously set aside hours to catch up on my writing instead of herding AI or doomscrolling, and again, failed at a bunch of that because–well, I lied.

Read More...

The Agents Are Among Us

I’ve been watching the launch of Meta’s Muse and OpenAI’s Dots somewhat… bemusedly, if you will. Being a regular Verge reader/listener, I am partial to Nilay Patel’s take that Silicon Valley’s “software brain” mentality has obscured both a lot of the actually practical uses of AI, and the unvarnished truth that the vast majority of people simply don’t care—or that they do care about the privacy and productivity impacts.

Read More...

Notes for September 21–26

Work was gruelling this week, with the rather unwelcome result that I didn’t exercise at all. I also fell asleep on the couch most afternoons/evenings just after closing shop–which ought to give you some idea of how much energy I had left for anything else.

Read More...

Some Old Expectations for the New Apple

In Nilay Patel’s Decoder conversation with Mark Gurman about John Ternus and Apple’s next big thing, Gurman describes something camera-equipped AirPods might eventually do: look at an email on your computer screen and help add an event to your calendar. And that was when he lost me.

Read More...

Notes for September 13-20

It’s a bit insane that we’re past mid-September and my living room is still sitting at 29oC at 7AM, but such is life in the late Holocene, I guess. Regardless, the shift towards Autumn is starting to show, and I’ve had a couple of days where I suddenly realized I was working “late” into the evening and the lights started coming on automatically (never a good sign unless you’re having fun).

Read More...

The Surface Laptop with Snapdragon

Still very much in line with the overall return to work mood of the past few weeks, I thought I’d post some notes about work gear. You see, I have been using a “Surface Laptop for Business 13in 1st Ed with Snapdragon” (I kid you not, that is what it is called) for a couple of months now.

Read More...

A Writing Tool That Leaves the Writing to Me

As points out, I do revise my posts with AI, but until now, I’ve resorted to post-draft LLM passes that take a bunch of SKILL.md files and either fix outright typos and misspellings or add editorial blockquotes to my drafts. The entire process feels needlessly technical in the sense that doing it inside or (typically as I bring stuff together for a final draft) detracts–or, rather, distracts me–from the writing experience too much, and sometimes automated replacements slip through.

Read More...

macOS and iOS 27

Nothing blew up. Yet.

Read More...

The LattePanda Sigma

Following up on my testing of the LattePanda and , this time I’m looking at the Sigma, which (as is becoming the norm with my recent pieces) I actually got before summer break.

Read More...

Notes for September 6-12

Even though my personal calendar is now filled with a smattering of fresh events, I am quite happy about the ones that don’t involve health, legal and tax annoyances. My back and other ailments seem to be stabilizing thanks to daily exercise and my having dedicated some time to cooking my own meals, which, besides being cheaper (a concern I’ve been having of late), also forces me to stand and move about, not to mention giving me an excuse for handling very sharp knives in very satisfactory ways.

Read More...

The iPhone Duo (and the Rest)

Besides the showmanship demonstrated by the keynote opening (nice touches there, Tim) and the visual effect when you open it, the iPhone Duo is… strangely familiar, and yet, somehow just strange as well:

Read More...

Archives • 3D Site Map