<!--
{
  "availability" : [
    "macOS: 10.4.0 - 10.15.0"
  ],
  "documentType" : "symbol",
  "framework" : "Quartz",
  "identifier" : "/documentation/Quartz/QCCompositionRepository/compositions(withProtocols:andAttributes:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Quartz"
    ],
    "preciseIdentifier" : "c:objc(cs)QCCompositionRepository(im)compositionsWithProtocols:andAttributes:"
  },
  "title" : "compositions(withProtocols:andAttributes:)"
}
-->

# compositions(withProtocols:andAttributes:)

Returns an array of compositions that match a set of criteria.

```
func compositions(withProtocols protocols: [Any]!, andAttributes attributes: [AnyHashable : Any]! = [:]) -> [Any]!
```

## Parameters

`protocols`

The protocols that you want compositions to conform to. Pass `nil` if you don’t want to filter based on the protocol. You can pass any of these protocols: QCCompositionProtocolAnimation, QCCompositionProtocolImageProducer, QCCompositionProtocolImageFilter, QCCompositionProtocolImageCompositor, and QCCompositionProtocolScreenSaverRSS.

`attributes`

A dictionary that contains the attributes, and their associated values, that you want compositions  to match. Pass `nil` if you don’t want to filter based on the attributes. For example, you can pass any of these attributes: QCCompositionAttributeNameKey, QCCompositionAttributeDescriptionKey, QCCompositionAttributeCopyrightKey, and QCCompositionAttributeBuiltInKey.

## Return Value

An array of [`QCComposition`](/documentation/Quartz/QCComposition) objects that meet the supplied criteria.

---

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)