<!--
{
  "availability" : [
    "iOS: 16.0.0 -",
    "iPadOS: 16.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "ARKit",
  "identifier" : "/documentation/ARKit/ARSession/captureHighResolutionFrame(completion:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "ARKit"
    ],
    "preciseIdentifier" : "c:objc(cs)ARSession(im)captureHighResolutionFrameWithCompletion:"
  },
  "title" : "captureHighResolutionFrame(completion:)"
}
-->

# captureHighResolutionFrame(completion:)

Requests a frame outside of the normal frequency that contains a high-resolution captured image.

```
func captureHighResolutionFrame(completion: @escaping @Sendable (ARFrame?, (any Error)?) -> Void)
```

## Parameters

`completion`

Code you provide that the framework runs after attempting to generate the frame.

## Discussion

If the function succeeds, the completion handler’s frame contains a high quality, high resolution [`capturedImage`](/documentation/ARKit/ARFrame/capturedImage).

In the event of failure, the completion block receives a non-`nil` error object. A call may fail if a previous request for a high resolution capture hasn’t completed yet, or an underlying problem occurs in the system’s capture pipeline. You can identify the failure reason in either case by checking for [`highResolutionFrameCaptureInProgress`](/documentation/ARKit/ARError/highResolutionFrameCaptureInProgress) or [`highResolutionFrameCaptureFailed`](/documentation/ARKit/ARError/highResolutionFrameCaptureFailed), respectively.

ARKit populates the frame’s properties other than pixel data, including pose information, anchors, and frame semantics. The system provides the frame to your completion handler asynchronously.

You can call this function at any time during a session. The system delivers a high-resolution frame out-of-band, which means that it doesn’t affect the other frames that the session receives at a regular interval, such as [`currentFrame`](/documentation/ARKit/ARSession/currentFrame) or the frame argument to [`session(_:didUpdate:)`](/documentation/ARKit/ARSessionDelegate/session(_:didUpdate:)-9v2kw).

For the highest resolution captured image, choose a non-binned [`videoFormat`](/documentation/ARKit/ARConfiguration/videoFormat-swift.property) in your session’s configuration. You can call [`recommendedVideoFormatForHighResolutionFrameCapturing`](/documentation/ARKit/ARConfiguration/recommendedVideoFormatForHighResolutionFrameCapturing) to select the best option for you.

For the highest resolution still images, choose a [`videoFormat`](/documentation/ARKit/ARConfiguration/videoFormat-swift.property) among your configuration’s [`supportedVideoFormats`](/documentation/ARKit/ARConfiguration/supportedVideoFormats) that returns `true` for [`isRecommendedForHighResolutionFrameCapturing`](/documentation/ARKit/ARConfiguration/VideoFormat-swift.class/isRecommendedForHighResolutionFrameCapturing). If your app doesn’t have specific resolution requirements, you can use the framework-recommended format that [`recommendedVideoFormatForHighResolutionFrameCapturing`](/documentation/ARKit/ARConfiguration/recommendedVideoFormatForHighResolutionFrameCapturing) returns.

---

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)