Introduction to Plug-In Development with FxFactory

Professional video applications, with the exception of Final Cut Pro X, support native visual effects plug-ins. Motion supports plug-ins based on the FxPlug SDK, whereas After Effects and Premiere Pro support plug-ins based on the After Effects plug-in SDK. Native plug-ins can be made available inside Final Cut Pro X through Motion Templates.

FxFactory lets you develop native plug-ins based on compositions created with Quartz Composer or FxCore. Tight integration between FxFactory, Quartz Composer and FxCore allows plug-ins to delegate most of their rendering tasks to the composition. FxFactory ships with a large number of custom Quartz Composer patches and Core Image units to help with the development of video-friendly compositions.

Plug-ins are created, stored and distributed inside an FxPack, a special document format based on file packages1). Packages are a file-system entity specific to Mac OS X: they appear in the Finder as a single file, but behind the scenes they are in fact a directory. This allows FxPacks to store Quartz compositions, assets and other metadata efficiently.

Commercial vs Editable FxPacks

FxPacks are available in two different kinds: commercial and editable. Most of our products, whether they are free or require a registration code, are distributed inside commercial FxPacks. Commercial FxPacks cannot be inspected or modified by users.

On the other hand, any FxFactory user can begin creating their own editable FxPack by selecting the NewPlug-Ins command under the File menu.

Development UI

When you open an editable FxPack, its plug-in development interface appears:

The default toolbar buttons let you:

  • Create a new plug-in from scratch, or from an existing composition.
  • Organize assets that are stored inside the FxPack (e.g. image files, HTML documentation, PDFs)
  • Set its system requirements (e.g. what version of the operating system is required to run the plug-ins)

On the left-hand side of the window, you will find the Groups and Plug-ins view. The plug-ins you see under these listings will appear under the same group and with the same name in all supported hosts:

The example above displays the group and plug-ins contained in the FxFactory Pro pack. You can organize plug-ins any way you prefer, simply by assigning new group and/or plug-in names. You can move plug-ins from one group to another via drag and drop.

Plug-ins may be disabled via the checkbox control that appears next to their name. This is a finer control than the one given by the plug-in management window, since it lets you disable only certain plug-ins within an FxPack.

On the right-hand side of the window, you can find the most important options available for plug-in development. All FxFactory plug-ins are based on a composition, a powerful node-based representation of the plug-in rendering process. Older versions of FxFactory used Quartz Composer, an app provided by Apple. More recent versions of FxFactory support FxCore, our own Metal-based compositing engine.

  • The Edit in Quartz Composer / Edit in FxCore button lets you edit the composition used by the plug-in using either Quartz Composer or FxCore.
  • The Import button lets you choose a new composition file to be used by the plug-in. The “Replace” button can only be accessed while the Option key is down.
  • The Export button lets you save the composition used by the plug-in back to a file. The “Save As” button can only be accessed while the Option key is down.

Clicking on the icon next to the plug-in's title will let you select one of three types: Generator, Filter and Transition.
 Choose the Generator type if the composition generates an output image but doesn't necessarily require an image input. 
Choose the Filter type if the composition is designed to accept at least one image input (the clip the plug-in has been applied to) and generate an output image that derives from that input.
 Choose the Transition type if the composition is designed to take two image inputs and transition from the first image to the next according to an implicit progress value defined by the host (0 to 100%).

All other options are accessed via tabbed views:

Each tab view is covered in a separate section:

Input Mappings

Many options in FxFactory require you to map a certain value or parameter to one of the input or output ports published by the composition. If this mapping is not established, the plug-in will not function correctly inside the host. Each published port in the composition can be mapped only once inside the plug-in.

Existing mappings can be undone by selecting the first menu item in the mapping popup menu, marked by the “–” symbol.

FxPacks are only one of the many document types that are recognized by the FxFactory application.