-
Camera and Photo Technologies Group Lab
Join us online for a deep dive into WWDC26 with Apple engineers and designers to ask questions, get advice, and follow the discussion about the week's biggest announcements for camera and photo technologies. Conducted in English.
Chapters
- 0:00 - Introduction
- 5:46 - When Reframe or Clean Up is used to modify a photo, does iOS 27 tag it with metadata or content credentials so someone can tell the image was edited by AI?
- 7:00 - Keywords were mentioned as a feature coming to Photos. Will there be an API for third-party apps to view or edit keywords?
- 7:59 - When showing thumbnails in a LazyGridView with a matched-geometry transition to a full detail view, what's the optimal way to load thumbnails for performance?
- 9:36 - Can Deferred Start cause issues where the user attempts to capture a photo before the AVCapturePhotoOutput has attached to the session?
- 11:12 - What's the best way to get the depth map and image for a live viewfinder and for the captured image, to create a nice 3D effect with both?
- 13:47 - With .photoQualityPrioritization = .quality, AVCaptureDevice overrides manual exposure duration and ISO. Is there a way to know the final exposure settings before capture?
- 16:38 - Can you elaborate on PHAsset.OriginalResourceChoice and what it's used for?
- 18:03 - Will iOS 27 support a linear scene-referred preview stream for Bayer RAW capture without tone mapping, to match a linear CIRAWFilter DNG conversion?
- 20:19 - For an app that lives and dies by its capture experience, what are your must-have recommendations?
- 25:49 - What's the optimal way to stream video and audio simultaneously without them drifting out of sync — and is it safe to stream the video frame by frame?
- 29:55 - Why does ProRAW support 48 MP output from Quad Bayer sensors, whereas native Bayer RAW is limited to the binned resolution?
- 32:51 - What's your recommended process to generate and write ISO-conformant gain maps and gain-map metadata for HEIC and JPEG on iOS?
- 35:26 - How do Deferred Start and the high-res guidance to warm the output early with setPreparedPhotoSettingsArray compose — does prepare queue past deferral or force a start, and what does each reserve?
- 38:00 - Will adjusting PHAsset's new Rating property require a PHLibraryChangeRequest?
- 38:33 - Is there a native way to obtain metadata of the original file type (PNG, JPG, etc.) from a photo selected via PhotosPicker?
- 39:51 - Is there a way to learn the adjustment plist format the Photos app writes, and to import exported adjustments back into Photos?
- 40:51 - What are the biggest mistakes developers make when building camera-heavy apps on iPhone?
- 43:50 - Any suggestions for a close-to-native, performant way to zoom, scroll, and pan photo images up to their original max resolution without pixelating?
- 46:46 - How many times can I use the intelligence (Siri camera) feature, and does using it affect or change my picture quality?
- 47:44 - The new Spatial Reframe uses 3D modeling to reconstruct a scene from a different angle. Can developers access that pipeline via an API, or is it locked to the Photos app?
- 49:00 - When can the camera-capture rotation issue be auto-handled? Orientation behaves differently across iOS, macOS, and iPadOS and takes a lot of tweaking to get right.
- 52:24 - Is it possible to capture 24-megapixel images with depth data using deferred photo capture?
- 53:38 - Are Group Labs shot on iPhone? Also, what APIs and technologies can you use to build a multi-camera streaming app?
- 56:53 - Is there a niche new API or tool that maybe isn't being talked about as much?
Resources
-
Search this video…
-
-
- 0:00 - Introduction
Engineers from the camera capture, Core Image/Core Graphics, and Photos frameworks teams introduce themselves and set up a session spanning AVCapture, computational photography, RAW and ProRAW, gain maps, depth, the Photos framework, and metadata.
- 5:46 - When Reframe or Clean Up is used to modify a photo, does iOS 27 tag it with metadata or content credentials so someone can tell the image was edited by AI?
Yes. The file's IPTC metadata (alongside EXIF) is updated to reflect which AI modification was applied — Spatial Reframe or Clean Up — so the edit is discoverable from the metadata. In the Photos app, this information is also surfaced in the Info panel when you swipe up on the image.
- 7:00 - Keywords were mentioned as a feature coming to Photos. Will there be an API for third-party apps to view or edit keywords?
Keywords (long available on Mac) are now editable and searchable in the iOS Photos app Info panel, and they're reflected in IPTC metadata on export. However, there's currently no PhotoKit-level API to fetch or query assets by keyword.
- 7:59 - When showing thumbnails in a LazyGridView with a matched-geometry transition to a full detail view, what's the optimal way to load thumbnails for performance?
On the Core Graphics side, open images with the thumbnail option so it reuses an embedded thumbnail if present, or decodes and downscales as fast as possible. On the Core Image side, request a scale factor when opening images so you decode only what your UI needs rather than the full-resolution image.
- 9:36 - Can Deferred Start cause issues where the user attempts to capture a photo before the AVCapturePhotoOutput has attached to the session?
Deferred Start just pushes initialization until after preview is running, so on its own you could still miss an early shot. Pair it with the photo output's responsiveCaptureEnabled property: the system then buffers so you can launch quickly and still capture the moment even before the output is fully initialized. Covered in the "Build a responsive camera app that launches quickly" session.
- 11:12 - What's the best way to get the depth map and image for a live viewfinder and for the captured image, to create a nice 3D effect with both?
If you only need a live depth effect in the preview, there's a shortcut: turn on the Cinematic Video Capture API (introduced last year) with a video preview layer to get the cinematic-mode effect for free. If you want the actual depth samples and to render it yourself, enable depth data output on the preview stream and use the AVCaptureDataOutputSynchronizer to align depth and video at the same timestamp in one callback, then combine them with a Core Image filter. For the still, enable depth data delivery on the photo output and set depthDataDeliveryEnabled to true in the photo settings, then apply a depth-based blur in Core Image.
- 13:47 - With .photoQualityPrioritization = .quality, AVCaptureDevice overrides manual exposure duration and ISO. Is there a way to know the final exposure settings before capture?
With both .quality and .balanced, the system runs Fusion-style processing that captures multiple exposures (e.g. an underexposed and a normal frame), so it can't honor manual controls or predict a single final exposure ahead of time. Manual exposure and ISO are only supported when you capture with .speed prioritization.
- 16:38 - Can you elaborate on PHAsset.OriginalResourceChoice and what it's used for?
It's a new API for an existing feature. When you import RAW+JPEG (or compressed-inside-RAW) assets, Photos lets you choose whether edits apply to the RAW or the JPEG, and lets users swap between them. OriginalResourceChoice expresses which of those resources is treated as the original.
- 18:03 - Will iOS 27 support a linear scene-referred preview stream for Bayer RAW capture without tone mapping, to match a linear CIRAWFilter DNG conversion?
The way to get scene-referred linear data in camera capture is through the Log formats — Log and the wider-gamut Log2 introduced last year. There isn't a separate untone-mapped Bayer preview path that matches a linear CIRAWFilter DNG conversion.
- 20:19 - For an app that lives and dies by its capture experience, what are your must-have recommendations?
For an app whose experience lives and dies by capture, the throughline is performance and reliability — users don't like to wait, and a missed moment can't be recovered. The top three: fast launch, responsive capture, and deferred processing. Beyond that: don't start from scratch — use the sample code, and never run AVCaptureSession on the main thread (use a dedicated serial queue) so lengthy operations don't block the UI. Tailor the experience to who your users actually are, since an optimal capture app for social video differs greatly from a pro photography one. Finally, plan your PhotoKit integration and permissions early, since captured photos need somewhere to go.
- 25:49 - What's the optimal way to stream video and audio simultaneously without them drifting out of sync — and is it safe to stream the video frame by frame?
Take A/V sync seriously rather than relying on coincidental alignment. On modern iPhones, video and audio share the same clock; if you don't handle sync explicitly, an app that seems fine can drift (for example on iPad with an external camera). Use AVCaptureDataOutputSynchronizer and carry the sample buffers' presentation timestamps through your pipeline.
- 29:55 - Why does ProRAW support 48 MP output from Quad Bayer sensors, whereas native Bayer RAW is limited to the binned resolution?
Bayer RAW stores the sensor's Bayer data directly, so a Quad Bayer sensor's native RAW is the binned output. ProRAW goes through a demosaic and Photonic Engine merge of multiple frames, producing already-linearized RGB that no longer depends on the sensor's mosaic pattern — which is what lets ProRAW deliver full 48 MP where native Bayer RAW cannot.
- 32:51 - What's your recommended process to generate and write ISO-conformant gain maps and gain-map metadata for HEIC and JPEG on iOS?
Two frameworks handle ISO gain-map data — Core Graphics and Core Image — and a WWDC session from two years ago drills into exactly this, showing the APIs and how to prepare inputs to produce gain-map-compatible outputs.
- 35:26 - How do Deferred Start and the high-res guidance to warm the output early with setPreparedPhotoSettingsArray compose — does prepare queue past deferral or force a start, and what does each reserve?
Think of Deferred Start as simply moving initialization from before preview to after preview to speed up launch. You can still call setPreparedPhotoSettingsArray to warm the photo output after preview is running — the two aren't in conflict; use deferral to get preview up fast, then prepare the output afterward.
- 38:00 - Will adjusting PHAsset's new Rating property require a PHLibraryChangeRequest?
It uses a PHAssetChangeRequest. The new Rating property is set per asset via a new enum with values of unset and one through five, so you modify a PHAsset's rating through that change request.
- 38:33 - Is there a native way to obtain metadata of the original file type (PNG, JPG, etc.) from a photo selected via PhotosPicker?
Check that you're specifying the correct UT Type when setting up the Transferable, rather than leaving it as a default image type — that's a common cause of getting PNG. Sample code for PhotosPicker on developer.apple.com covers this. Note the picker can also convert in some cases, e.g. when the user has restricted metadata or location access for your app.
- 39:51 - Is there a way to learn the adjustment plist format the Photos app writes, and to import exported adjustments back into Photos?
There's no API for this — the adjustment plist can't be decoded, and there's no supported path to re-import those adjustments. If it would help your app, file a Feedback Assistant request.
- 40:51 - What are the biggest mistakes developers make when building camera-heavy apps on iPhone?
The most common mistake is running AVCaptureSession work on the main thread. It's designed to be driven from a dedicated background serial queue and will block and wait during graph reconfiguration — calling start/configure on the main thread freezes the UI and produces stutters. Follow the documented threading model and keep session work off the main thread.
- 43:50 - Any suggestions for a close-to-native, performant way to zoom, scroll, and pan photo images up to their original max resolution without pixelating?
Use Core Image, which is built for interactive UI movement like zoom and pan and caches work throughout the decode pipeline. There's a documentation on the developer portal showing how to set up a CIFilter for opening images so you can pan and zoom smoothly up to full resolution.
- 46:46 - How many times can I use the intelligence (Siri camera) feature, and does using it affect or change my picture quality?
On-device use is unlimited, but those captures don't go to the normal photo library — they're saved to the Siri AI app at screen resolution and aspect ratio, not full photo-mode quality. Don't rely on it for your best-looking photos; it's meant for having a conversation with Siri about what's captured, and there may be a limit on the number of conversations.
- 47:44 - The new Spatial Reframe uses 3D modeling to reconstruct a scene from a different angle. Can developers access that pipeline via an API, or is it locked to the Photos app?
There's no developer API for the Photos Reframe capability. For related work, parts of ARKit support 3D scene capture, reconstruction, and manipulation, and the Pro phones' LiDAR depth-sensing camera is available as an AVCaptureDevice — but none of these is an out-of-the-box equivalent of the Photos spatial reframe edit.
- 49:00 - When can the camera-capture rotation issue be auto-handled? Orientation behaves differently across iOS, macOS, and iPadOS and takes a lot of tweaking to get right.
Orientation is genuinely hard because a device's cameras are physically mounted differently (some portrait, some landscape) and vary across devices. The AVCaptureDevice.RotationCoordinator APIs are the supported way to handle orientation more consistently rather than hand-tuning transforms per app.
- 52:24 - Is it possible to capture 24-megapixel images with depth data using deferred photo capture?
Yes. 24-megapixel processing is time-consuming enough that you must opt into deferred processing, and you should opt into the maximum photo dimensions so the selected device actually supports 24 MP. With those in place, if you select quality prioritization and enable depth data delivery, you'll get 24-megapixel captures with depth. This was covered in one of this year's sessions on capturing high-resolution images.
- 53:38 - Are Group Labs shot on iPhone? Also, what APIs and technologies can you use to build a multi-camera streaming app?
Yes — these labs are shot on iPhone. For multi-camera work, two features from last year stand out. Locked frame duration guarantees an exact frame rate (29.97, 24, 25, 60) and keeps audio synchronized to it — more reliable than matching min and max frame rate. Genlock builds on that, letting multiple iPhones synchronize to an external sync source (via a Blackmagic Pro Dock or genlock generator) so recordings share one timeline with no tearing. Timecode generation lets you bring timecode from an external source in through your capture session and store it as a timecode track for easier post. For writing the resulting ProRes data, the AV Pro Video Storage API gives deterministic file-write speeds to avoid dropped frames.
- 56:53 - Is there a niche new API or tool that maybe isn't being talked about as much?
Two picks. The AV Pro Video Storage API is a strong performance optimization for anyone capturing ProRes — it gives you a pre-allocated file on disk so that even on older phones with fragmented storage you won't drop frames, with a settings UI that lets users control how much space to dedicate; it's also being retrofitted to older phones. The other is the new RAW 9 engine in this year's OS — an ML-based solution for processing RAW files, including from third-party cameras. It's covered in depth in David Hayward's session on enhanced RAW image processing with Core Image, which compares RAW 8 and RAW 9.