Cartridge
A console emulator as a live Resolume source

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 you can composite, key, run through other effects, and play by MIDI-mapping the joypad onto whatever controller's already on the desk. I built it to go with Old Cathode: a 240p Mega Drive frame through a proper composite encoder, with dot crawl and cross-colour that come from the encoder rather than being painted on, is what it's here for.
There are two builds of the same frontend, and the only difference is which process the emulator core runs in, because a core crashing means something different in a studio and in front of an audience. In process, the picture arrives the same frame it was made, and a core that faults takes Resolume down with it. Out of process, the frame arrives one composition frame later and a crash only kills the helper. The show carries on, and two instances of one core cost nothing because they're separate processes anyway. Rehearsals 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 bring your own, the same as with RetroArch. Cores are loaded at runtime and never redistributed, so their licence terms are between you and their authors. Several cores worth using carry non-commercial terms, and shipping one would drag this repository's MIT licence down with it. The repo's docs/CORES.md covers the practical side: which core for which console, and the two macOS traps that would otherwise eat 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.3, which lists the plugin as SW Cartridge in the host's browser. v0.1.2 was the first release with a Windows x64 build alongside the universal macOS one; it also ships the macOS build as a disk image and carries the GET_VARIABLE fix the v0.1.1 binary was missing. It's run inside Resolume 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 put a clear error in the log rather than leaving a silent black layer. Outside Resolume it's checked end to end against a synthetic libretro core built into the repo, through the real plugin class in a headless GL 4.1 context, a real second process, and the helper killed with SIGKILL under a running consumer. Real third-party cores work too: 2048 and gong from the libretro buildbot load and produce frames through the same path the plugin uses, and a scripted joypad played 2048 to a score of 1216. A real console emulator has run as well: mGBA runs a GBA cartridge image supplied locally at the console's own 59.7275 Hz, with the core's own log forwarded, for 1800 frames in a row without a drop. No ROM is included in the repo or shipped with it. Still unconfirmed, and it needs hardware rather than another test session: nobody's 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, and the Linux branch has never been built. Try it in your own rig before a show depends on it.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead