coyopedal
A guitar amp modeller that runs on an ESP32-S3, playing a full Neural Amp Modeler A2-Full profile in real time. This is its firmware — the same UI, the same DSP, the same neural amp model — compiled to WebAssembly and playing your guitar in this tab.
What you are looking at
The screen above is not a picture of the pedal and not a re-implementation of it. The firmware's UI was compiled ahead of time to C++ and linked with the same layout and paint engine the hardware runs; the amp, the cabinet, the effects and the tuner are the board's own DSP on an audio thread. The presets and profiles are the bytes the board is flashed with.
The amp is a NAM A2-Full profile — the full architecture, not a trimmed or distilled stand-in — running at 48 kHz on a 240 MHz dual-core microcontroller. That is the whole point of the project, and it is the same network weights here as on the board.
The browser supplies a canvas, your pointer, an input device and somewhere to keep presets. Everything else is the pedal. Touch the screen the way you would the real one — tap a block to toggle it, hold one to edit it. Esc goes back.
Your own profiles
The board loads captures off an SD card, and this page will take a
folder as one. Ask for it from the pedal: Amplifiers → SD card, which
is on that screen whether or not there is anything behind it, the same row the hardware
has. Every .nam or .namb in the folder you pick, subfolders and
all, then appears under it. It is the firmware's SD code path, answered from your folder,
so the captures get the same names and the same ids they would have on a card; fill a
folder here, copy it to a card, and the board reads it.
An original .nam is a JSON capture, and the S3 plays a fixed-point form of
it, so the first load of one runs the same tuner the board runs — about a minute, with the
panel frozen while it works. The result is written back beside the file as
.s3cache, exactly as the board writes it, and neither this page nor the board
ever prepares that capture again. Your presets are mirrored into the folder too, so they
travel with the captures they name.
Chrome and Edge can write back to the folder. Safari and Firefox will only let a page read one, so there everything the pedal writes is kept in the browser's own storage instead — the folder is remembered either way, and the pedal comes back up with your captures in it.
Where it normally runs
On a Waveshare ESP32-S3-Touch-AMOLED-2.06 — a 410 × 502 AMOLED with a capacitive touch panel, which is the screen you are poking at above. But the pedal is not written for that board in particular: it is a Gea Stack app, so it runs on any target Gea Stack supports — macOS, Windows, Linux, iOS, Android and the web. This tab is one of them.