<!--
{
  "documentType" : "article",
  "framework" : "Professional Video Applications",
  "identifier" : "/documentation/Professional-Video-Applications/fxplug",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "FxPlug"
}
-->

# FxPlug

Create custom effects plug-ins for Final Cut Pro and Motion.

## Discussion

When the effect or look you want to achieve can’t be created with the filters or generators provided with Final Cut Pro or Motion, use the FxPlug software development kit (SDK) to write your own custom visual effects. FxPlug is a compact, powerful image-processing plug-in architecture that lets you create unique, hardware-accelerated or CPU-based effects plug-ins with customized UI and onscreen controls.

FxPlug consists primarily of Objective-C protocol definitions. You create a plug-in by writing code in Objective-C, Objective-C++, or Swift that conforms to these protocols, implementing the methods declared by the protocols. The host application provides the capabilities in all the protocols that have the API suffix. Your plug-in is responsible for implementing the other protocols.

![A screenshot of a frame in a Motion file depicting a filter called “Light Rays” applied to an image of a tower in an Italian town.](images/com.apple.professionalvideoapplications/media-3385875@2x.png)

FxPlug 4 introduces fully “out-of-process” FxPlug plug-ins, which have no component that runs inside of the host application process. Out-of-process plug-ins provide improved security for end users and allow plug-in developers the freedom to choose from a variety of rendering technologies, such as Metal, Core Graphics or Core Image to develop unique plug-ins that include on-screen controls and custom user interface elements—all running seamlessly in the host application. Plug-in developers can choose to implement in either Swift or Objective-C.

> Note:
> OpenGL and OpenCL are deprecated in macOS.

Additionally, the new [`FxTileableEffect`](/documentation/professional_video_applications/FxTileableEffect) API lets third-party plug-ins render only portions of the output (known as *tiles*) for more efficiency, in the same manner as Apple’s own plug-ins.

This documentation highlights new and updated concepts and APIs in FxPlug 4. You can find documentation for legacy plug-ins created with FxPlug 3 in the [archived FxPlug 3.1.1 documentation](https://developer.apple.com/library/archive/documentation/AppleApplications/Conceptual/FXPlug_overview/FXPlugSDKOverview/FXPlugSDKOverview.html#//apple_ref/doc/uid/TP40002180).

> Note:
> FxPlug 3 isn’t supported in Final Cut Pro or Motion.

## Topics

### Essentials

[Setting up for FxPlug development](/documentation/Professional-Video-Applications/setting-up-for-fxplug-development)

Download and install the required software to develop FxPlug plug-ins.

[Using out-of-process FxPlug plug-ins](/documentation/Professional-Video-Applications/using-out-of-process-fxplug-plug-ins)

Register and render FxPlug plug-ins with Motion and Final Cut Pro.

### Plug-in fundamentals

[Building an FxPlug plug-in from an Xcode template](/documentation/Professional-Video-Applications/building-an-fxplug-plug-in-from-an-xcode-template)

Create a plug-in in Xcode with the FxPlug template.

[Building an FxPlug plug-in manually](/documentation/Professional-Video-Applications/building-an-fxplug-plug-in-manually)

Create your own plug-in in Xcode.

[Using FxPlug APIs](/documentation/Professional-Video-Applications/using-fxplug-apis)

Use various FxPlug APIs to communicate with host apps like Motion or Final Cut Pro.

[Editing property lists for FxPlug plug-ins](/documentation/Professional-Video-Applications/editing-property-lists-for-fxplug-plug-ins)

Modify the way hosts recognize and display your FxPlug plug-in.

[Thread safety in plug-ins](/documentation/Professional-Video-Applications/thread-safety-in-plug-ins)

Learn about reentrancy for plug-ins and best practices to make them thread safe.

### Rendering

[Rendering in FxPlug](/documentation/Professional-Video-Applications/rendering-in-fxplug)

Use Metal or other frameworks to render images with your FxPlug plug-in.

[Communicating with the plug-in state](/documentation/Professional-Video-Applications/communicating-with-the-plug-in-state)

Prepare the necessary information, such as parameter values, for your FxPlug plug-in to render.

[Working with tiled images](/documentation/Professional-Video-Applications/working-with-tiled-images)

Render only the necessary tiles of an image in your FxPlug plug-in to improve efficiency.

[Optimizing FxPlug plug-ins](/documentation/Professional-Video-Applications/optimizing-fxplug-plug-ins)

Maintain consistent rendering at all resolutions and aspect ratios by using pixel transforms.

[`FxTileableEffect`](/documentation/professional_video_applications/FxTileableEffect)

The designated initializer for your plug-in for rendering only certain portions of the plug-in’s output, referred to as tiles.

### User interface

[Adding parameters to plug-ins](/documentation/Professional-Video-Applications/adding-parameters-to-plug-ins)

Create standard and custom user-facing parameters for your plug-in that will appear in the inspector.

[Adding onscreen controls to plug-ins](/documentation/Professional-Video-Applications/adding-onscreen-controls-to-plug-ins)

Simplify user interaction by using onscreen controls for your FxPlug plug-in.

[`FxPathAPI_v3`](/documentation/professional_video_applications/FxPathAPI_v3)

An API that defines the methods to retrieve information about paths, shapes, and masks the user has drawn on an object.

[`FxUndoAPI`](/documentation/professional_video_applications/FxUndoAPI)

An API that defines the methods that the host app implements to handle plug-in management of the host app’s undo queue.

[`FxCommandAPI`](/documentation/professional_video_applications/FxCommandAPI)

Commands that you can tell the host to perform.

[`FxCommandAPI_v2`](/documentation/professional_video_applications/FxCommandAPI_v2)

Adds functionality to move the playhead to a specific timeline time.

[`FxRemoteWindowAPI`](/documentation/professional_video_applications/FxRemoteWindowAPI)

A protocol that allows the plug-in to request that the host create a window.

[`FxRemoteWindowAPI_v2`](/documentation/professional_video_applications/FxRemoteWindowAPI_v2)

A protocol that allows the plug-in to request that the host create a window with a defined minimum and maximum size.

### 3D and lighting

[`Fx3DAPI_v5`](/documentation/professional_video_applications/Fx3DAPI_v5)

An API that defines the methods the host application provides to get information about the 3D environment, including camera and object transforms.

[`FxLightingAPI_v3`](/documentation/professional_video_applications/FxLightingAPI_v3)

An API you use to get information about lights in a scene in a Motion project.

[`FxMatrix44`](/documentation/professional_video_applications/FxMatrix44)

The `FxMatrix` class encapsulates a 4x4 matrix object and provides matrix inversion and transforming of 2D and 3D points.

### Color

[Managing color space and gamut in plug-ins](/documentation/Professional-Video-Applications/managing-color-space-and-gamut-in-plug-ins)

Control the appearance of your rendering by using the color gamut API.

[`FxColorGamutAPI_v2`](/documentation/professional_video_applications/FxColorGamutAPI_v2)

A protocol that handles plug-in queries to the host for the project’s color gamut.

### Time and analysis

[Understanding time in FxPlug](/documentation/Professional-Video-Applications/understanding-time-in-fxplug)

Learn about time handling in host apps and plug-ins.

[Scheduling media in plug-ins](/documentation/Professional-Video-Applications/scheduling-media-in-plug-ins)

Use the scheduling APIs in FxPlug to retrieve frames from different times.

[`FxTimingAPI_v4`](/documentation/professional_video_applications/FxTimingAPI_v4)

A protocol that defines the methods provided by the host, so that a plug-in can query the timing properties of its input.

[`FxKeyframeAPI_v3`](/documentation/professional_video_applications/FxKeyframeAPI_v3)

A collection of methods for manipulating the keyframes of your FxPlug 4 plug-in.

[Analyzing media](/documentation/Professional-Video-Applications/analyzing-media)

Use the FxPlug analysis API to analyze frames of source media before rendering them.

[`FxAnalysisAPI`](/documentation/professional_video_applications/FxAnalysisAPI)

A protocol that host applications implement to provide information to plug-ins that support the FxAnalyzer protocol.

[`FxAnalysisAPI_v2`](/documentation/professional_video_applications/FxAnalysisAPI_v2)

A protocol that host applications implement to provide information to plug-ins that support the FxAnalyzer protocol.

[`FxAnalyzer`](/documentation/professional_video_applications/FxAnalyzer)

A protocol you implement in your plug-in to analyze frames that the plug-in is applied to.

### Accessing host data

[`FxProjectAPI`](/documentation/professional_video_applications/FxProjectAPI)

Methods you use to get information about the project in which your plug-in instance is running.

[`FxProjectAPI_v2`](/documentation/professional_video_applications/FxProjectAPI_v2)

The method you use to get aspect ratio information about the project in which your plug-in instance is running.

### Testing and deployment

[Testing FxPlug plug-ins](/documentation/Professional-Video-Applications/testing-fxplug-plug-ins)

Test and debug FxPlug plug-ins using a variety of methods.

[Preparing plug-ins for use in Final Cut Pro](/documentation/Professional-Video-Applications/preparing-plug-ins-for-use-in-final-cut-pro)

Add a plug-in to a Motion effect template to use in Final Cut Pro.

[Notarizing your FxPlug plug-in](/documentation/Professional-Video-Applications/notarizing-your-fxplug-plug-in)

Give users confidence in your FxPlug plug-in by enabling notarization.

### Legacy plug-ins

[Migrating FxPlug 3 plug-ins to FxPlug 4](/documentation/Professional-Video-Applications/migrating-fxplug-3-plug-ins-to-fxplug-4)

Update existing FxPlug 3 plug-ins to out-of-process FxPlug 4 plug-ins.

[Versioning and obsoleting old plug-ins](/documentation/Professional-Video-Applications/versioning-and-obsoleting-old-plug-ins)

Version plug-ins to add new capabilities, or obsolete them to remove them from the Motion Library.

[`FxVersioningAPI`](/documentation/professional_video_applications/FxVersioningAPI)

A collection of methods that a host application implements to identify the plug-in version used by a project when it was first created.

### Macros

[FxPlug macros](/documentation/Professional-Video-Applications/fxplug-macros)



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)