Stoatworks Labs

Amber

Legacy Flash, playable in Resolume

Releasedv0.1.2Plugin & ModuleC++ / Rust / Python
Amber — Legacy Flash, playable in Resolume
Vector Flash rendered live by the plugin with a transparent stage — the grid behind shows through everywhere the shapes are not. Generated demonstration content.

What it does

Flash is gone from the browser, but the work made in it is not — and Resolume cannot open any of it. Amber makes that library usable again in two different ways, because two different problems are hiding under one word. Old .flv files are a decoding problem: Sorenson Spark, VP6, VP6-with-alpha, H.264 and Screen Video, all of which ffmpeg can still read. Old .swf files are a runtime problem: vector shapes and ActionScript that have to be executed, not decoded.

The converter handles both offline, turning them into DXV or Hap — the codecs Resolume decodes on the GPU — with the frame rate read from the file rather than guessed, and transparency routed to Hap Alpha rather than silently flattened. The plugin handles .swf live: drop it on a layer and the movie runs, timeline and ActionScript and all, with Flash's own wmode=transparent on by default so it works as an overlay rather than a backdrop.

It vendors nothing. ffmpeg and Ruffle are the operator's own, invoked as separate processes, which keeps the licensing clean and means an ffmpeg upgrade is not a rebuild. The one thing to know before relying on it is that FFGL provides no audio path at all — so live Flash is silent, whatever it contains.

  • Converts .flv (Spark, VP6, VP6-alpha, H.264, Screen Video) and .swf to DXV or Hap
  • Plays .swf live on a Resolume layer, with the timeline and ActionScript really running
  • Transparency preserved: Hap Alpha on conversion, wmode=transparent in the plugin
  • Frame rate read from the SWF header and the FLV's measured average, not guessed
  • Works around ffmpeg's DXV encoder silently shearing any width not a multiple of 16
  • amber doctor reports what the machine can actually do before anything is converted
  • Universal macOS build, plus a Windows build
  • Vendors nothing — your own ffmpeg, your own Ruffle, MIT throughout

Where it stands

Released at v0.1.1. The plugin is confirmed working in Resolume Arena on Apple Silicon. The converter is verified against real content rather than only synthetic: real 2003-era Flash, and real-world FLV in all three common codecs — Sorenson Spark at 720p and 4K, and VP6 — with output re-decoded and compared to the source pixels every time. VP6-with-alpha is verified too, using a test file assembled from existing VP6 bitstreams, since ffmpeg can decode VP6 but not encode it; alpha survives the conversion with a mean error of 0.05. Two ffmpeg behaviours found by measurement shape the whole pipeline and are worth knowing if you build anything else on DXV: the encoder silently shears any width that is not a multiple of 16, which matters because 550x400 is the default Flash stage size, and it cannot carry alpha at all despite accepting RGBA without complaint. What is NOT verified: only the Apple Silicon slice has been run in a host, so neither the Intel half of the universal bundle nor the Windows build has been loaded into a Resolume; there is no out-of-process helper yet, so content that hard-crashes Ruffle takes Resolume with it; live playback is .swf only; and the converter cannot produce transparent output from .swf, because it drives Ruffle's exporter binary and that has no background option. There is no audio anywhere, by construction.

Credits

The demonstration video shows short clips of “Badgers” — widely known as Badger Badger Badger — a Flash animation by Jonti Picking (Weebl). It is used briefly to show what amber does with real period Flash. It is not included with amber, is not redistributed, and no ownership is claimed. amber carries no audio at all, so the footage is silent.

Watch the original · Weebl’s channel

Watch it running

Amber video thumbnail

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