<!--
{
  "availability" : [
    "iOS: 26.0.0 -",
    "iPadOS: 26.0.0 -",
    "macCatalyst: 26.0.0 -",
    "macOS: 26.0.0 -",
    "tvOS: 26.0.0 -",
    "visionOS: 26.0.0 -",
    "watchOS: 26.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "MediaPlayer",
  "identifier" : "/documentation/MediaPlayer/MPMediaItemAnimatedArtwork/init(artworkID:previewImageRequestHandler:videoAssetFileURLRequestHandler:)-ieue",
  "metadataVersion" : "0.1.0",
  "role" : "Initializer",
  "symbol" : {
    "kind" : "Initializer",
    "modules" : [
      "Media Player"
    ],
    "preciseIdentifier" : "c:objc(cs)MPMediaItemAnimatedArtwork(im)initWithArtworkID:previewImageRequestHandler:videoAssetFileURLRequestHandler:"
  },
  "title" : "init(artworkID:previewImageRequestHandler:videoAssetFileURLRequestHandler:)"
}
-->

# init(artworkID:previewImageRequestHandler:videoAssetFileURLRequestHandler:)

Creates an animated artwork.

iOS, iPadOS, Mac Catalyst, tvOS, visionOS, watchOS:

```
init(artworkID: String, previewImageRequestHandler: @escaping (CGSize, @escaping (UIImage?) -> Void) -> Void, videoAssetFileURLRequestHandler: @escaping (CGSize, @escaping (URL?) -> Void) -> Void)
```

macOS:

```
init(artworkID: String, previewImageRequestHandler: @escaping (CGSize, @escaping (NSImage?) -> Void) -> Void, videoAssetFileURLRequestHandler: @escaping (CGSize, @escaping (URL?) -> Void) -> Void)
```

## Parameters

`artworkID`

A unique identifier for this animated artwork. This identifier should encapsulate
the identity of both the preview frame and video asset. If you change either, you should
provide an [`MPMediaItemAnimatedArtwork`](/documentation/MediaPlayer/MPMediaItemAnimatedArtwork) with an updated `artworkID`.

`previewImageRequestHandler`

A handler to return a preview image for this artwork, for the
requested `CGSize` in pixels. Once requested, you should pass the preview image to the
provided completion handler, or you can pass `nil` if the preview image cannot be resolved
for any reason. You can call the completion handler on an arbitrary queue, however it must
only be called once. The `NSImage` you provide should ideally have a size equal to the
requested `CGSize`, however an image of the same aspect ratio is acceptable. Images that
diverge significantly from the requested aspect ratio may be rejected by the system. Aim to
provide preview images quickly and ideally synchronously, and if possible you should preload
these images in order to reduce perceived latency when displaying animated artwork to the
user.

`videoAssetFileURLRequestHandler`

A handler to return a file `URL` for the artwork video
asset for this artwork, for the requested `CGSize` in pixels. Once requested, you should pass
the `URL` to the provided completion handler, or you can pass `nil` if the artwork video asset
cannot be resolved for any reason. You can call the completion handler on an arbitrary queue,
however it must only be called once. The `URL` you provide must reference a local asset,
ideally with a size equal to the requested `CGSize`, however an asset with the same aspect
ratio is acceptable. Assets that diverge significantly from the requested aspect ratio may be
rejected by the system. The video assets you provide should loop cleanly, and should be
available relatively quickly from this handler (particularly when re-fetched). It’s advised
that assets are cached for subsequent fetches.

---

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)