Stoatworks Labs

Cartridge

A console emulator as a live Resolume source

Releasedv0.1.2Plugin & ModuleC++ / GLSL
Cartridge — A console emulator as a live Resolume source
A real third-party libretro core through the plugin's own frame path: 2048 from the libretro buildbot, played by a scripted joypad in the offline harness to a score of 2992, the last frame written out and scaled ×3 with no filtering. Not a Resolume screen capture, and not an emulated console.

What it does

A libretro frontend that runs inside Resolume Arena and Avenue as an FFGL generator. Point it at a core and a game and the console becomes a layer — composite it, key it, run it through other effects, and MIDI-map the joypad onto whatever controller is already on the desk. It was built as a companion to Old Cathode: a 240p Mega Drive frame through a real composite encoder, with dot crawl and cross-colour that are consequences rather than decoration, is the thing this exists to make possible.

It ships as two builds of the same frontend, differing only in which process the emulator core runs in, because the answer to “what happens when a core crashes” is different in a studio and in front of an audience. In process, the picture arrives the same frame it was produced and a core taking a fault takes Resolume down with it. Out of process, the frame arrives one composition frame later and a crash kills only the helper — the show carries on, and two instances of one core cost nothing because they are separate processes anyway. Rehearsal and studio work: in process. Anything with an audience: the helper.

No emulator core, BIOS image or game is included, and none ever will be. You supply your own, exactly as you would with RetroArch — cores are loaded at runtime and never redistributed, so their licence terms are between you and their authors. That is not squeamishness: several cores worth using carry non-commercial terms, and shipping one would take this repository's MIT licence with it. The repo's docs/CORES.md is the practical half of that — which core for which console, and the two macOS traps that otherwise cost an afternoon.

  • Any libretro core, loaded at runtime — nothing about a specific console is compiled in
  • Two builds from one frontend: in-process for latency, out-of-process to survive a core crash
  • The joypad is host parameters, so Resolume will MIDI- or OSC-map a real controller onto it
  • Runs as a source layer, so every other effect in the rig composites over it
  • Universal macOS build (Apple Silicon and Intel), signed and notarised, and a Windows x64 build
  • No cores, BIOS images or games included — and a documented route to getting your own

Where it stands

Released at v0.1.2, the first release with a Windows x64 build alongside the universal macOS one, which also ships the macOS build as a disk image and carries the GET_VARIABLE fix the v0.1.1 binary predated. Verified end to end against a synthetic libretro core built into the repository: the CPU host (pixel formats, the padded pitch, the triple buffer, input ports, the audio ring, determinism, and two instances of one core staying separate), the real plugin class driven through the real FFGL sequence in a headless GL 4.1 core context at two aspects, a real second process, and the helper killed with SIGKILL underneath a running consumer. It has since been run against real third-party cores as well — 2048 and gong from the libretro buildbot both load, negotiate the no-content handshake and produce frames through the same path the plugin uses, and 2048 was played to a score of 1216 by a scripted joypad, which exercises input, the pixel format and the buffering against code this project did not write. A real console emulator has now been run as well: mGBA loads a GBA cartridge image supplied locally and runs it at the console's own 59.7275 Hz, with the core's own log forwarded — including its SRAM save-type detection — and 1800 consecutive frames rendered without a drop. No ROM is included in the repository or distributed with it. It has now run inside Resolume as well — Arena 7.27.1, added to a layer as a source, InitGL on the host's own GL 4.1 Metal context, and three cores loaded and swapped live on a running layer. The parameter groups land in Arena's inspector as declared, and picking a core with no content produced a clear error in the log rather than a silent black layer. One thing is still unconfirmed and it needs hardware rather than a test session: nobody has put a real MIDI controller on the twelve pad buttons. The Windows build is compiled in CI and has never been loaded into a Windows host; the Linux branch has never been built. Check it in your own rig before a show depends on it.

Watch it running

Cartridge video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead