Stoatworks Labs

obs-ffgl

FFGL plugins natively inside OBS

Field testingv0.1.0Plugin & ModuleC++
obs-ffgl — FFGL plugins natively inside OBS
No screenshot — this one is configuration inside another application.

What it does

OBS cannot load FFGL plugins, and the usual way round that is a network round trip: send a source out over NDI, run the effect somewhere else, bring it back. obs-ffgl removes the trip. It loads any FFGL 2.x bundle and renders it inside OBS's own OpenGL context, so there is no second render, no copy back over the network and no extra frame of latency.

It registers two things. FFGL Effect is a filter, for plugins that transform a picture. FFGL Source is an input, for plugins that generate one — so a generator is a source in its own right rather than a filter sitting on a throwaway picture. Every parameter the plugin declares appears in OBS's own properties, in the plugin's groups and order, with real dropdowns.

The FFGL host underneath is oxbow's, compiled from a submodule rather than copied, so there is exactly one implementation of the format across both projects.

  • Any FFGL 2.x plugin, not only ours — nothing is hard-coded
  • Renders in OBS's own GL context: no round trip, no readback
  • Filter and source forms, with the source list filtered to real generators
  • Parameter groups and dropdowns taken from the plugin itself
  • Finds plugins where Resolume already keeps them

Where it stands

Early, and macOS only — FFGL is an OpenGL format, so the module registers nothing unless OBS is on its OpenGL renderer rather than producing black. Of 22 FFGL bundles driven through a real OBS and compared per pixel, 17 render correctly; two need a file parameter set, two fail identically under oxbow so are the plugins' own bugs, and one is a shell that correctly refuses.

Watch it running

obs-ffgl video thumbnail

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