Stoatworks Labs

User guide

obs-ffgl — user guide

v0.1.2Updated 12 October 2026

obs-ffgl runs FreeFrame (FFGL) video plugins natively inside OBS Studio, as a filter for effects and as a source for generators.

OBS can’t load FFGL plugins on its own, and the usual way round that is a network round trip: send a source out over NDI, run the effect in another application, and bring it back. This cuts out the trip. The plugin runs in OBS’s own OpenGL context, so there’s no second render, no copy back over the network and no extra frame of latency.

What you need

  • macOS. Windows and Linux aren’t built.
  • OBS Studio on its OpenGL renderer. FFGL is an OpenGL format. If OBS is running Metal or Direct3D the module says so in the log and registers nothing, rather than adding a filter that produces black. On macOS OBS uses OpenGL 4.1, which is the same profile Resolume gives these plugins.
  • Some FFGL plugins. Any FFGL 2.x bundle works, not just the Stoatworks ones.

Installing

Copy obs-ffgl.plugin into:

~/Library/Application Support/obs-studio/plugins/

Restart OBS. You should see this in the log:

[obs-ffgl] loaded (plugins are scanned when first needed)

Using it

There are two entries, and which one you want depends on the plugin.

FFGL Effect is a filter, for plugins that transform a picture. Select any source, open Filters, press +, choose FFGL Effect, then pick a plugin from the list.

FFGL Source is an input, for plugins that generate a picture on their own: digital rain, screensavers, animated shapes. Press + in the Sources dock and choose FFGL Source. Only plugins that declare themselves generators appear in its list, because an effect placed there would have no input and render nothing.

A source has no picture to take its size from, so it has Width and Height fields. Leave both at 0 and it follows your canvas, which is usually what you want.

Parameters

Every parameter the plugin declares appears, in the plugin’s own groups and order, with its own names: the same controls Resolume would show. Dropdowns are proper dropdowns carrying the plugin’s own entries.

Values are only sent to the plugin when you change them. That’s on purpose: a plugin sets its own defaults when it starts, and pushing obs-ffgl’s reading of those back at it can silently replace working values with wrong ones.

Where plugins are found

In order, first match winning:

$OBS_FFGL_PATH                                     (colon-separated)
~/Library/Application Support/obs-studio/plugin_config/obs-ffgl/plugins
~/Library/Graphics/FreeFrame Plug-Ins
/Library/Graphics/FreeFrame Plug-Ins
~/Documents/Resolume Arena/Extra Effects
~/Documents/Resolume Avenue/Extra Effects

Resolume’s own folders are included so you don’t have to keep a second copy of plugins you already have. The properties dialog lists every directory it searched (hover over the plugin dropdown), so a plugin that doesn’t appear tells you where to look.

The first time you open the dialog, macOS may ask for permission to read your Documents folder. That’s the Resolume paths above. Answer it and the scan takes about a tenth of a second from then on. The scan doesn’t happen when OBS starts, on purpose, so that prompt never turns up hiding behind a splash screen.

Troubleshooting

No FFGL Effect in the filter list. OBS isn’t on its OpenGL renderer, or the plugin didn’t load. Check the log for [obs-ffgl].

The plugin dropdown is empty. Nothing was found in the directories above. Drop a bundle into ~/Library/Graphics/FreeFrame Plug-Ins, or set OBS_FFGL_PATH to where yours live, and reopen the dialog.

A plugin is listed but the picture doesn’t change. Some plugins need a file before they can draw anything: Flipbook wants a sprite sheet, and Cartridge wants a ROM. Set the file parameter. If it still does nothing, the log will carry either FF_INSTANTIATE_GL failed or ProcessOpenGL failed for that bundle, which means the plugin itself is refusing rather than being refused.

A generator isn’t in the FFGL Source list. It declares itself an effect rather than a source. Add it as a filter instead.

Everything went strange after adding the filter. Please report it. FFGL plugins are entitled to leave OpenGL in whatever state suits them, and this plugin puts it all back before OBS draws anything else, but a plugin that trips that up is worth knowing about.

What it does not do

  • Audio-reactive parameters (FF_TYPE_BUFFER) aren’t fed.
  • The plugin’s clock is wall time; OBS doesn’t drive it.
  • Windows and Linux aren’t built.

Licence

The source is MIT. A binary that links libobs is subject to OBS Studio’s GPL-2.0 terms, so the plugin you install is GPL. See ATTRIBUTIONS.md.

This guide lives in the project's own repository and is rebuilt from it, so corrections are welcome as a pull request against docs/USER-GUIDE.md. Last updated 12 October 2026.