Stoatworks Labs

NESolume

Retro console hardware for Resolume

Stablev1.0.0Plugin & ModuleC++ / GLSL
NESolume — Retro console hardware for Resolume
The harness test card through the NES: posterised into the 2C02 palette, Bayer dither working the gradients, and the 16×16 attribute areas bleeding hue exactly the way the hardware forced them to. Rendered by the plugin's own offline harness in a headless GL context, not a Resolume screen capture.

What it does

A retro games console between your content and your output, for Resolume Arena and Avenue. The picture is averaged down onto a real machine's raster, forced through that machine's colour system with its attribute cells enforced, and scaled back up as fat pixels. Nine machines are in the table, from the Game Boy's four greens to the PlayStation's 15-bit RGB, each defined by three facts: how many lines it drew, what colours it could physically produce, and how big the area forced to share them was.

The recognisable artefacts are consequences of those constraints rather than drawings of them. Chunky dithered gradients are the palette running out of levels; attribute clash is a cell only being allowed one set of colours when two objects cross it — the NES's 16×16 attribute areas make its clash the chunkiest, exactly as they did.

The glitches hold the same line. Corruption happens to the indices, before colour choice — a real glitch scrambled CRAM and tile pointers, not the DAC — so a corrupted Game Boy can only show you wrong greens. Displacement is scroll-register damage: whole raster pixels, whole tiles, wrapping around the edge the way a scroll register wraps. At Glitch Rate zero the corruption is a still, which is what a crashed machine actually does.

Also available as an OpenFX plugin for DaVinci Resolve, Vegas Pro, Nuke and Natron. The console table is the same code in both builds, and the glitch clock runs off the timeline frame, so any frame renders identically however the host reaches it.

  • Nine machines: Custom, Game Boy, NES, ZX Spectrum, Commodore 64, Master System, Mega Drive, SNES, PlayStation — real master palettes and real DAC depths
  • Pixel Size from quarter-size to four-times-chunky around each console's native raster; width follows your composition so pixels stay square
  • Ordered Bayer dither scaled to the quantisation step, and a 1–8 bit per channel DAC on the Custom console
  • Attribute Clash — your own brightness, the cell's hue, from off to full Spectrum strictness
  • Wave, Shake, Block Glitch, Line Glitch, Palette Glitch and Garbage, all palette-legal, on a glitch clock from still to 18 Hz
  • An LCD pixel grid that fades itself out when pixels get too small to have one, and a wet/dry Mix
  • Eight factory presets from Handheld to Kill Screen, driving both builds from one table
  • Universal macOS bundle and a Windows DLL

Where it stands

Built, verified and released as v0.1.0. The verification is the plugin's own invariant made mechanical: a harness renders through each fixed-palette console with dither, clash and every corruption control switched on and checks every output pixel against that machine's master palette — all four Game Boy greens, 54 distinct colours of the 2C02's 64 entries, all 15 Spectrum colours, all 16 of the C64's. All fifteen controls are swept and shown to move pixels, presets render byte-identically to their hand-set values in both builds, and the chain is deterministic. It loads through the real FFGL entry sequence (the bridge's ffgltest), but it has not yet been run inside Resolume itself, and the OpenFX build has not yet been loaded into a real Resolve.

Watch it running

NESolume video thumbnail

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