<!--
{
  "availability" : [
    "macOS: 10.4.0 - 10.15.0"
  ],
  "documentType" : "article",
  "framework" : "Quartz",
  "identifier" : "/documentation/Quartz/quartz-composer",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Quartz Composer"
}
-->

# Quartz Composer

## Topics

### Classes

[`QCComposition`](/documentation/Quartz/QCComposition)

The `QCComposition` class represents a Quartz Composer composition that either:

[`QCCompositionLayer`](/documentation/Quartz/QCCompositionLayer)

A layer that loads, plays, and controls Quartz Composer compositions in a Core Animation layer hierarchy.

[`QCCompositionParameterView`](/documentation/Quartz/QCCompositionParameterView)

A class that allows users to edit the input parameters of a composition in real time. The composition can be rendering in any of the following objects: [`QCRenderer`](/documentation/Quartz/QCRenderer), [`QCView`](/documentation/Quartz/QCView), or [`QCCompositionLayer`](/documentation/Quartz/QCCompositionLayer).

[`QCCompositionPickerPanel`](/documentation/Quartz/QCCompositionPickerPanel)

The `QCCompositionPickerPanel` class represents a utility window that allows users to browse compositions that are in the Quartz Composer composition repository and, if supported, preview the composition. The `QCCompositionPickerPanel` class cannot be subclassed.

[`QCCompositionPickerView`](/documentation/Quartz/QCCompositionPickerView)

The `QCCompositionPickerView` class allows users to browse compositions that are in the Quartz Composer composition repository, and to preview them. You can set the default input parameters for a composition preview  by using the method setDefaultValue:forInputKey:.

[`QCCompositionRepository`](/documentation/Quartz/QCCompositionRepository)

The `QCCompositionRepository` class represents a system-wide centralized repository of built-in and installed Quartz Composer compositions (`/Library/Compositions` and `~/Library/Compositions`). The `QCCompositionRepository` class cannot be subclassed.

[`QCPatchController`](/documentation/Quartz/QCPatchController)

[`QCPlugIn`](/documentation/Quartz/QCPlugIn)

A base class to subclass for writing custom patches.

[`QCPlugInViewController`](/documentation/Quartz/QCPlugInViewController)

The `QCPlugInViewController` class communicates (through Cocoa bindings) between a custom patch and the view used for the internal settings of the custom patch. Only custom patches that use internal settings exposed to the user need to use the `QCPlugInViewController` class.

[`QCRenderer`](/documentation/Quartz/QCRenderer)

A base class for low-level rendering.

[`QCView`](/documentation/Quartz/QCView)

The `QCView` class is a custom `NSView` class that loads, plays, and controls Quartz Composer compositions. It is an autonomous view that is driven by an internal timer running on the main thread.

### Protocols

[QCCompositionParameterViewDelegate](/documentation/Quartz/qccompositionparameterviewdelegate)

A protocol for composition parameter view’s delegate.

[QCCompositionPickerViewDelegate](/documentation/Quartz/qccompositionpickerviewdelegate)

The `QCCompositionPickerViewDelegate` informal protocol defines methods that allow  your application to respond to changes in a composition picker view (a [`QCCompositionPickerView`](/documentation/Quartz/QCCompositionPickerView) object).

[`QCCompositionRenderer`](/documentation/Quartz/QCCompositionRenderer)

The `QCRenderer` protocol defines the methods used to pass data to the input ports or retrieve data from the output ports of the root patch of a Quartz Composer composition. This protocol is adopted by the [`QCRenderer`](/documentation/Quartz/QCRenderer), [`QCView`](/documentation/Quartz/QCView), and [`QCCompositionLayer`](/documentation/Quartz/QCCompositionLayer) classes.

[`QCPlugInContext`](/documentation/Quartz/QCPlugInContext)

The `QCPlugInContext` protocol defines methods that you use only from within the execution method ([`execute(_:atTime:withArguments:)`](/documentation/Quartz/QCPlugIn/execute(_:atTime:withArguments:))) of a `QCPlugIn` object.

[`QCPlugInInputImageSource`](/documentation/Quartz/QCPlugInInputImageSource)

The `QCPlugInInputImageSource` protocol eliminates the need to use explicit image types for the image input ports on your custom patch. Not only does using the protocol avoid restrictions of a specific image type, but it avoids impedance mismatches, and provides better performance by deferring pixel computation until it is needed. When you need to access the pixels in an image, you simply convert the image to a representation (texture or buffer) using one of the methods defined by the `QCPlugInInputImageSource` protocol. Use a texture representation when you want to use input images on the GPU. Use a buffer representation when you want to use input images on the CPU.

[`QCPlugInOutputImageProvider`](/documentation/Quartz/QCPlugInOutputImageProvider)

The `QCPlugInOuputImageProvider` protocol eliminates the need to use explicit image types for the image output ports on a custom patch. The methods in this protocol are called by the Quartz Composer engine when the output image is needed. If your custom patch has an image output port, you need to implement the appropriate methods for rendering image data and to supply information about the rendering destination and the image bounds.

### Structures

[`QCPlugInExecutionMode`](/documentation/Quartz/QCPlugInExecutionMode)

Execution modes for custom patches.

[`QCPlugInTimeMode`](/documentation/Quartz/QCPlugInTimeMode)

Time modes for custom patches.

### Reference

[Quartz Data Types](/documentation/Quartz/quartz-data-types)

[Quartz Constants](/documentation/Quartz/quartz-constants)

[Quartz Enumerations](/documentation/Quartz/quartz-enumerations)

[Quartz Composer Constants](/documentation/Quartz/quartz-composer-constants)

[Quartz Composer Enumerations](/documentation/Quartz/quartz-composer-enumerations)



---

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)