# OFX plugins

> Hosting OpenFX plugins: plugin folders, using plugin nodes.

Oink hosts OpenFX (OFX) image plugins, the plugin standard used by Nuke, Resolve, Natron and Flame. Plugins are native code, so they never run inside Oink itself: a separate helper process loads them. If a plugin crashes, only that helper stops; the next render starts a new one.

## Where plugins are found

Plugin folders are searched in this order; the first folder that has a plugin (same id and major version) wins:

1. every folder in the `OFX_PLUGIN_PATH` environment variable (separated by `:` on Linux and macOS, `;` on Windows);
2. the `plugin_paths` list in `~/.config/opencomp/ofx.json` (the `OPENCOMP_CONFIG_DIR` environment variable changes that folder);
3. `~/.cache/opencomp/ofx/plugins` (the test plugins that `tools/ofx/build.sh` builds);
4. the system folder `/usr/OFX/Plugins` (Windows: `C:\Program Files\Common Files\OFX\Plugins`).

Inside the Flatpak build the host system's folders are visible under `/run/host`, so `/run/host/usr/OFX/Plugins` and `/run/host/usr/local` are searched as well. After installing plugins, restart the app.

## Using a plugin

Each installed plugin becomes a node. Find them on the **OFX** button of the left node toolbar (one submenu per plugin group) or with Tab, under `OFX/<group>` (for example `OFX/Color`). Plugin knobs appear on the node panel like any other knob; plugin push buttons open the plugin's own window.

Plugins run without access to your screen during renders, so a plugin cannot pop up a licence or settings dialog in the middle of a render. In .nk files an installed plugin reads and writes Nuke's OFX class name (for example `OFXnet.sf.openfx.invert_v2`); a plugin that is not installed imports as an Unsupported node and is written back unchanged.


---
Sources: opencomp_core/ofx/__init__.py, opencomp_core/nodes/ofx/ofx_nodes.py, docs/notes/ofx-host.md
