Stoatworks Labs

Cartridge

A console emulator as a live Resolume source

Releasedv0.1.0Plugin & ModuleC++ / GLSL
Cartridge — A console emulator as a live Resolume source
A real third-party libretro core running through the plugin's own frame path — 2048 from the libretro buildbot, played by a scripted joypad in the offline harness. Not a Resolume screen capture, and not an emulated game.

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)
  • No cores, BIOS images or games included — and a documented route to getting your own

Where it stands

Released at v0.1.0, macOS only. 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 source carries Windows and Linux branches and neither has been built. Check it in your own rig before a show depends on it.