Plug-in: Renderer

When a plug-in is currently selected in the plug-in development window, clicking the “Renderer” tab button displays the following options:

The Properties section displays options specific to the Quartz composition used by the plug-in:

  • The Can only render fields at full frame dimensions option should be on if the Quartz Composition expects fields to be doubled to full frame size before being processed. Note that somes host (Motion, After Effects) may already opt for feeding frame-sized fields to all plug-ins. This option merely enforces this requirement under all circumstances. Turn this option off if the plug-in only affects individual pixels (e.g. a color correction filter) and/or does not render any geometric shapes. You may also turn this option off if your plug-in is capable of its own pixel aspect correction. Rendering speed may be doubled when this option is off, since the Quartz Composition will have to process half as many pixels. You may also turn this option off if you have designed your composition to interpret the pixel aspect ratio of the input/output images, and if it is capable of producing an image that is scaled accordingly.
  • The Can only render fields/frames at square pixel aspect ratio option should be on if the Quartz composition renders any shape that must be preserved regardless of the pixel aspect ratio of the footage. This option ensures that images fed by the host to the plug-in are always upscaled to have a 1:1 pixel aspect ratio. This option guarantees that if the plug-in renders a circle to the screen, it will not become oval by the time the footage is adjusted according to its display aspect ratio. This option should be on for most plug-ins, including blurs and sharpening filters whose results are assumed to have a undistorted shape when displayed. Rendering speed is negatively affected when this option is on, as it potentially adds a scaling operation to each image processed. (Review the next option if you want this option to be user-controllable.)
  • The Renders each pixel independently of neighbors options enables an optimization that allows the host to use a single memory buffer to hold both fields, during effect processing. You should enable this option only if the Core Image units used by the composition do not access neighboring pixels. This is often true only for color adjustment filters.
  • If your plug-in does not alter the alpha channel of its inputs, you can enable the Preserves the alpha channel of all input pixels option to let the host know that the alpha channel should be unchanged by your effect. The host may decide to use this information to speed up rendering. Generally speaking, you can enable this option only if your composition renders an output image that has the exact same alpha values as its input. If your composition alters the alpha component of input images, or if it renders an output image whose transparency information is not equal to the input(s), you should not enable this option.
  • The Renders the same image if no inputs/parameters have changed option lets you control whether the host will ask your plug-in to continuously render even when the source clip and/or parameters have not changed from one frame to the next. This may happen when a filter is applied to a still image rather than a video clip. By enabling this option, the host will only ask the plug-in to render once, and will reuse the output image for the duration of the clip.
When this option is on for generators, it enables “static “generators whose image only changes in response to a parameter change. If a generator does not animate automatically, turning this option on will let it preview/render much faster - in particular, it will turn the generator into a “green line” (Realtime-capable) plug-in inside Final Cut Pro.
  • The Prevent sharing of a single composition by multiple plug-ins option tells FxFactory to load and execute a new copy of the composition for every instance of your plug-in that is created by the host. When this option is enabled, there is a 1:1 correspondence between the number of instances of your plug-ins and their compositions. Disabling the sharing of a single composition by multiple plug-ins will make loading and rendering performance worse. It is therefore recommended that you keep this option off unless the composition is ill-designed for sharing. One example would be if the composition is using built-in patches to load assets. Many built-in patches do not cache recent computations and thus are not designed to handle fast-changing inputs efficiently.
    Regardless of the state of this option, please note that a composition may still be unloaded at any time. The composition should always produce the correct output whether or not it has been newly loaded or it has been processing frames for a while. It is also important to know that certain hosts may render multiple frames concurrently using multiple background processes, and that independent copies of the same composition may be each rendering a given portion of the clip/layer on behalf of the host. There is no guarantee that a single composition will be used to render a single use of your plug-in on the timeline.
  • The Compensate for compositing artifacts enables a post-processing operation meant to improve the quality of the output when the plug-in is running in Final Cut Pro and Motion. The operation only alters RGB values, not the alpha channel, and it only affects non-opaque pixels (i.e. pixels whose alpha value is less than 1). Disable this option to prevent FxFactory from applying this step.

Supported Pixel Formats

The Supported pixel formats section lets you pick the depth and format of the pixels that your plug-in is capable of processing. The depth (8 bit, 16 bit, 32 bit) represents the amount of color information stored per channel. Higher depths mean higher precision and thus better rendering quality, at the expense of performance.

  • The RGB + alpha, 8 bit integer option represents the most basic rendering requirement of any plug-in, and it is always on.
  • The RGB + alpha, 16 bit half-float option enables high-precision rendering in RGB inside Motion and Final Cut Pro. Half-float provides the best combination of quality, performance and compatibility across different graphics hardware.
  • The RGB + alpha, 32 bit float option enables the highest-precision rendering quality inside Motion and Final Cut Pro. Please note that certain features of the Quartz composition may not work on all graphics hardware at this depth setting. For better compatibility and comparable results, please use half-float instead.

Please note that the 16 and 32 bit floating point options affect the depth of the OpenGL primitives used by FxFactory to communicate inputs and outputs to the Quartz composition. The actual precision used for image manipulation and storage may be higher. Both Core Image and the OpenGL Shading Language advertise a 32 bit floating point pipeline for their computations. Modern graphics cards will often (if not exclusively) compute results at 32-bit float even if their inputs were originally 8 bit integer or 16 bit half-float.

Regardless of the pixel formats supported by your plug-in, it is always up to the host to ultimately choose to render in a particular format or another. This depends on the current project preferences as well as the action being performed by the user:

FxFactory handles host-specific issues for you, and if you declare your plug-in to be 8-bit only you are guaranteed that the composition will only ever be rendered in 8-bit precision.

Output clamping

This option controls how the output RGB values of your plug-in are clamped during a high-precision render1). The two options available through this parameter are:

  • Full range: when this option is selected, output color values are clamped to the widest possible range allowed by the current host.
  • Legal range: when this option is selected, output color values are always clamped between 0 and 1.

Remember that output clamping is not required or enabled when the host is requesting an 8-bit integer render, since output values are naturally clamped between 0 and 255 as part of the rendering process.

Similarly, output clamping is not enabled during a high-precision render if your plug-in does not support 16-bit half-float or 32-bit float bit depth in the first place, as specified under the Pixel Formats section above.

If you want to allow the user to switch between Full range and Legal range within the host, please add an Output Clamping parameter.

The Always clamp alpha to legal range option tells FxFactory how to handle values in the alpha channel that are greater than 1. This scenario only presents itself when processing the effect at 16 bit or 32 bit float (output values are forcibly clamped to 255 when values are stored in 8 bit integer destinations). The default behavior is highly recommended: although host applications can handle out-of-range values in the output for the RGB channels, they do not handle alpha higher than 1 correctly. Disable this option if your composition takes its own steps to produce the correct alpha values.


The Anti-aliasing option controls whether an hardware-assisted anti-aliasing method should be enabled when rendering the plug-in’s composition. All graphics cards support up to 4x multi-sampling. Most recent hardware also supports 8x multi-sampling.

If you want to allow the user to control the current anti-aliasing level within the host, please add a Anti-aliasing Method parameter.

A high-precision render happens when your plug-in supports 16-bit half-float or 32-bit float bit depth, and the host is requesting output at one of those two bit depths.