Media
You MUST use this skill for ANY camera, photo, audio, haptic, or media playback work.
Cursor Subagent Routing
Delegate to the appropriate Cursor subagent when this router calls for a specialized auditor.
Quick Reference
| Symptom / Task |
Reference |
| Camera capture, AVCaptureSession |
See skills/camera-capture.md |
Slow camera launch / deferred start (iOS 26+), ProRes recording via Pro Video Storage (OS27) |
See skills/camera-capture.md Patterns 8-9 |
| Camera API (RotationCoordinator, etc.) |
See skills/camera-capture-ref.md |
Lens aperture / shutter / ISO priority modes, exposure signals, continuous autofocus tracking, low-light video noise reduction, cinematic video metadata capture (OS27) |
See skills/camera-capture-ref.md |
| Center Stage front camera (iPhone 17), dynamic aspect ratio, smart framing, 24/48 MP capture |
See skills/camera-capture-ref.md |
| iPhone Duo front cameras (virtual front camera, inner/outer ultra-wide), camera direction vs position |
See skills/camera-capture.md Pattern 6 and skills/camera-capture-ref.md (iPhone Duo Front Cameras) |
| Camera freezes, black preview, rotation |
See skills/camera-capture-diag.md |
| Photo pickers, library access |
See skills/photo-library.md |
PHPicker, PhotosPicker, PhotoKit API reference: asset metadata editing (keywords, rating, caption), persistent change observer, background resource upload (OS27) |
See skills/photo-library-ref.md |
PhotoKit + Swift 6 strict concurrency, nonisolated observer, performChanges isolation, _dispatch_assert_queue_fail |
See axiom-concurrency (skills/isolation-inheritance-diag.md) |
Audio, AVFoundation, spatial audio, async session activation, throwing AVAudioEngine APIs (OS27) |
See skills/avfoundation-ref.md |
Video write/export/playback, sample-buffer engine, resumable export, Apple Log 2, iOS 27 deprecations (OS27) |
See skills/avfoundation-video-ref.md |
| Audio recognition, ShazamKit |
See skills/shazamkit.md |
| ShazamKit API reference |
See skills/shazamkit-ref.md |
On-device music analysis (key, tempo, structure, loudness), MusicUnderstanding (OS27) |
See skills/music-understanding.md |
On-device face grouping (cluster faces into people across a library), video highlights/key frames, MediaIntelligence (OS27) |
See skills/media-intelligence.md |
| Haptic feedback, Core Haptics |
See skills/haptics.md |
| SharePlay coordinated playback, AVDelegatingPlaybackCoordinator, custom-engine sync |
See skills/shareplay-playback.md |
| SharePlay session lifecycle, activation, non-media state |
Use axiom-integration (skills/shareplay.md) instead |
| Now Playing metadata, remote commands |
See skills/now-playing.md |
| Animated lock-screen artwork (iOS 26+) |
See skills/now-playing.md Pattern 8 |
NowPlaying framework (import NowPlaying, Swift-native MediaSession, OS27) |
See skills/now-playing.md (NowPlaying Framework section) |
Cast / route media to non-AirPlay devices (Google Cast/Chromecast, DLNA) as system routes, AVSystemRouting (iOS27, likely EU-gated) |
See skills/system-media-routing.md |
Screen capture / recording / streaming the screen or your own app, ScreenCaptureKit (OS27 — new on iOS/iPadOS/tvOS/visionOS 27; macOS 12.3+) |
See skills/screen-capture.md |
| CarPlay HIG, app categories, design rules, entitlements |
See skills/carplay-hig.md |
| CarPlay templates reference (all 12 templates, availability matrix, depth limits) |
See skills/carplay-templates-ref.md |
| CarPlay navigation reference (base view, route guidance, cluster/HUD, multitouch, voice prompts, map panels + EV charging iOS 27) |
See skills/carplay-navigation-ref.md |
| CarPlay Now Playing template customization + sports mode |
See skills/now-playing-carplay.md |
| MusicKit Now Playing, ApplicationMusicPlayer playback, subscription/authorization |
See skills/now-playing-musickit.md |
Enumerate the user's Apple Music library — MusicLibraryRequest vs MPMediaQuery, reconciling the two, playlist entries, sync, library identity, per-device Song.id, missing PlayParameters, MusicKit stops responding after a scan |
See skills/music-library.md |
| DockKit motorized stands / gimbals, subject tracking, custom motor control |
See skills/dockkit.md |
| Speech-to-text / transcription (SpeechAnalyzer, mic → transcript) |
Invoke axiom-ai (skills/ios-ml.md) |
Decision Tree
digraph media {
start [label="Media task" shape=ellipse];
what [label="Which media feature?" shape=diamond];
auditor [label="camera-auditor agent" shape=box];
start -> what;
what -> "skills/camera-capture.md" [label="camera capture"];
what -> "skills/photo-library.md" [label="photo pickers\n/ library"];
what -> "skills/avfoundation-ref.md" [label="audio / AVFoundation"];
what -> "skills/avfoundation-video-ref.md" [label="video write/export\n/ sample-buffer (OS27)"];
what -> "skills/shazamkit.md" [label="ShazamKit\n/ audio recognition"];
what -> "skills/music-understanding.md" [label="music analysis\n(key/tempo/structure)"];
what -> "skills/media-intelligence.md" [label="face grouping /\nvideo highlights (OS27)"];
what -> "skills/haptics.md" [label="haptic feedback"];
what -> "skills/now-playing.md" [label="Now Playing\n/ remote commands"];
what -> "skills/music-library.md" [label="enumerate Apple Music\nlibrary / identity"];
what -> "skills/system-media-routing.md" [label="cast to non-AirPlay\n(Chromecast/DLNA, iOS27)"];
what -> "skills/screen-capture.md" [label="screen capture /\nrecording (OS27)"];
what -> "skills/carplay-hig.md" [label="CarPlay app design\n/ categories / entitlements"];
what -> "skills/dockkit.md" [label="DockKit stands\n/ gimbals / tracking"];
what -> auditor [label="camera code audit"];
}
- Camera capture? →
skills/camera-capture.md (patterns), skills/camera-capture-ref.md (API), skills/camera-capture-diag.md (debugging)
- Photo pickers / library? →
skills/photo-library.md, skills/photo-library-ref.md
- Audio / AVFoundation (audio)? →
skills/avfoundation-ref.md; video write/export/playback, sample-buffer engine, resumable export, iOS 27 deprecations? → skills/avfoundation-video-ref.md (OS27)
- ShazamKit / audio recognition? →
skills/shazamkit.md, skills/shazamkit-ref.md
- On-device music analysis (key, tempo, structure, pace, instruments, loudness)? →
skills/music-understanding.md (OS27)
- On-device face grouping (cluster faces into people across a library) or video highlights / key-frame detection? →
skills/media-intelligence.md (OS27)
- Haptics? →
skills/haptics.md
- Now Playing / remote commands? →
skills/now-playing.md, skills/now-playing-carplay.md, skills/now-playing-musickit.md
- Reading the user's Apple Music library (enumerate songs/playlists, library identity, sync)? →
skills/music-library.md — a different problem from playback; read it before any library walk
- Cast / route media to non-AirPlay devices (Google Cast/Chromecast, DLNA) as system routes? →
skills/system-media-routing.md (iOS27, likely EU-gated)
- Screen capture / recording / streaming the screen or your own app (ScreenCaptureKit)? →
skills/screen-capture.md (OS27 — new on iOS/iPadOS/tvOS/visionOS 27)
- CarPlay app design, category selection, entitlement request? →
skills/carplay-hig.md (start here for any CarPlay work)
- DockKit motorized stands / gimbals, subject tracking, custom motor control? →
skills/dockkit.md
- Want camera code audit? → Delegate to the
camera-auditor subagent (detects deprecated APIs and architectural gaps: missing interruption handlers, runtime-error recovery, audio session deactivation, permission-denied UX, RotationCoordinator on iOS 17+; scores RELIABLE / FRAGILE / BROKEN)
Cross-Domain Routing
Camera + permissions (camera access denied, Info.plist missing):
- Camera code → stay here (camera-capture)
- Privacy manifest / Info.plist → invoke axiom-integration (privacy-ux reference)
- Build/entitlement errors → invoke axiom-build
ShazamKit + microphone permissions:
- Microphone NSMicrophoneUsageDescription → invoke axiom-integration (privacy-ux reference)
- ShazamKit API and matching → stay here (shazamkit)
Now Playing + background audio:
- Now Playing metadata/controls → stay here (now-playing)
- Background audio mode / BGTaskScheduler → invoke axiom-integration (background-processing reference)
Speech-to-text + audio capture (transcribing mic or asset audio):
SpeechAnalyzer / SpeechTranscriber, the ~2-simultaneous-analyzer cap, the OS27 input providers → invoke axiom-ai (skills/ios-ml.md)
- Audio session category/mode,
AVCaptureSession wiring → stay here (avfoundation-ref, camera-capture)
- The trap:
CaptureInputSequenceProvider.providerWithSession(...) (OS27) automatically reconfigures your app's default AVAudioSession. If this suite's audio-session setup "randomly breaks" after transcription is added, that's the cause — use provider(from:in:) and add its captureAudioDataOutput to your own session.
Apple Music library + playback + persistence:
- Enumerating the library, library identity,
PlayParameters availability, Sync Library hazards → stay here (music-library)
- Queuing and playing what you found, Now Playing publishing → stay here (now-playing-musickit)
- Storing library rows in your own database (which column is the durable key, migrations for a re-key) → invoke axiom-data — but take the identity rules from music-library first;
persistentID is not a durable key
MusicAuthorization prompt copy / privacy manifest → invoke axiom-integration (privacy-ux reference)
Photo library + privacy:
- Photo picker (PHPicker, PhotosPicker) → stay here (photo-library) — no permissions needed
- Full PHPhotoLibrary access → stay here (photo-library-ref) — limited access model
- Privacy manifest for photo usage → invoke axiom-integration (privacy-ux reference)
DockKit + camera / custom inference:
- DockKit stand control, framing, motor, tracking states → stay here (dockkit)
- Underlying AVCaptureSession setup → stay here (camera-capture)
- Custom Vision / Core ML inference feeding observations → invoke axiom-vision
- Camera permission (NSCameraUsageDescription) → invoke axiom-integration (privacy-ux reference)
MediaIntelligence + Vision (faces, image analysis):
- Group faces into people across a library, video highlights / key frames → stay here (media-intelligence) — clustering identities + on-device video moment detection
- Detect where a face is in one image (bounding box, landmarks), OCR, segmentation → invoke axiom-vision — per-image detection, a different problem
- System Photos "People" album → that album is system-owned (PhotoKit); MediaIntelligence builds your own index over assets you manage → stay here (photo-library for the asset access)
Anti-Rationalization
| Thought |
Reality |
| "Camera capture is just AVCaptureSession setup" |
Camera has interruption handlers, rotation, and threading requirements. |
| "Camera launch is fast enough if I startRunning() early" |
Output initialization dominates launch; iOS 26 deferred start halves time-to-preview. |
| "I'll add haptics with a simple API call" |
Haptic design has patterns for each interaction type matching HIG. |
| "ShazamKit is just SHSession + a delegate" |
iOS 17+ has SHManagedSession which eliminates all AVAudioEngine boilerplate. |
| "Now Playing info is just setting metadata" |
Remote commands, artwork handling, and state sync have 15+ gotchas. |
| "I'll use UIImagePickerController for photos" |
PHPicker/PhotosPicker are the modern API — no permissions required. |
| "MediaPlayer reports fewer playlist members than MusicKit, so sync is incomplete" |
The gap is structural, not a sync signal: it tracks the entries with no local representation — exact on all five playlists inspected, off by one library-wide. A shipped guard built on this premise silently skipped 9 of 15 playlists forever. Read skills/music-library.md. |
| "Reading the music library is just a MusicLibraryRequest" |
Reading one MusicKit property across a large library leaves every later MusicKit request unresumed for the rest of the run, with no error thrown. Pool starvation is a symptom, not the mechanism — a plain Thread, which never touches the pool, loses MusicKit identically. Batching the request is ~100x slower, not safer. |
"Song.id is a stable key I can store" |
Its format differs per device for the same library (i.… on one, bare numeric on another). Never parse it, never use it as a cross-device key. |
| "DockKit is just pairing a stand" |
Custom control needs system tracking disabled, handles inverted dock states, and two different coordinate origins. |
| "Grouping faces is just Vision face detection" |
Vision detects faces in one image; MediaIntelligence clusters them into persistent people (entities) across a whole library, with its own working directory and state. |
| "Casting to Chromecast means bundling the Google Cast SDK" |
On iOS 27, AVSystemRouting exposes non-AirPlay routes as system routes — you adopt one Apple API (observe events, start a session, drive playbackControl) instead of a per-vendor SDK. Likely EU-gated — gate and keep a fallback. |
| "I'll sync SharePlay playback by broadcasting the current time over the messenger" |
The messenger has no clock. AVDelegatingPlaybackCoordinatorPlayCommand.hostClockTime gives you an absolute CMClockGetHostTimeClock() start time; hand-rolling reinvents startup barriers, seek ordering, stalls, and interruptions badly. |
| "The playback coordinator handles interruptions for me" |
Only AVPlayerPlaybackCoordinator does. AVDelegatingPlaybackCoordinator adds no automatic suspensions — a custom engine begins and ends every one, and a suspension never ended hangs the whole group. |
| "ScreenCaptureKit on iPad works like the Mac (enumerate displays/windows)" |
On iOS/iPadOS SCShareableContent and all SCContentFilter initializers are macOS-only — you get a filter ONLY from the system SCContentSharingPicker. New on iOS/iPadOS/tvOS/visionOS 27. Also not ImageRenderer (that snapshots your own SwiftUI view). |
Example Invocations
User: "How do I set up a camera preview?"
→ Read: skills/camera-capture.md
User: "My camera app takes a second before preview appears"
→ Read: skills/camera-capture.md (Pattern 8, deferred start)
User: "Support the Center Stage front camera" / "Capture 48MP photos"
→ Read: skills/camera-capture-ref.md
User: "How do I switch cameras on iPhone Duo?" / "Choose a camera by direction instead of position"
→ Read: skills/camera-capture.md (Pattern 6) and skills/camera-capture-ref.md (iPhone Duo Front Cameras)
User: "Camera freezes when I get a phone call"
→ Read: skills/camera-capture-diag.md
User: "How do I let users pick photos in SwiftUI?"
→ Read: skills/photo-library.md
User: "Implement haptic feedback for button taps"
→ Read: skills/haptics.md
User: "Now Playing info doesn't appear on Lock Screen"
→ Read: skills/now-playing.md
User: "How do I identify songs with ShazamKit?"
→ Read: skills/shazamkit.md
User: "How do I detect a song's tempo / key / beat grid on-device?" / "Analyze audio loudness or structure"
→ Read: skills/music-understanding.md
User: "Group faces into people across my photo library" / "cluster faces on-device" / "find highlights or a thumbnail frame in a video"
→ Read: skills/media-intelligence.md
User: "Cast to Chromecast / Google Cast without the Cast SDK" / "support non-AirPlay casting" / "route media to a DLNA device as a system route"
→ Read: skills/system-media-routing.md
User: "Record / stream the iPad screen" / "ScreenCaptureKit on iOS" / "screen recording in my app" / "capture just my app's content"
→ Read: skills/screen-capture.md
User: "List every song in the user's Apple Music library" / "enumerate their playlists" / "MPMediaQuery vs MusicKit" / "sync Apple Music playlists" / "MediaPlayer and MusicKit report different playlist counts" / "my MusicKit requests stop responding after a library scan" / "store a stable id for each song across devices" / "playlists went empty after the user turned on Sync Library"
→ Read: skills/music-library.md
User: "Track a subject with a motorized stand" / "Control a DockKit gimbal"
→ Read: skills/dockkit.md
User: "Check my camera code for issues"
→ Launch: camera-auditor agent
1---2name: axiom-media-33description: Use when working with camera, photos, audio, haptics, ShazamKit, on-device music analysis, face grouping and video highlights, screen recording, casting to non-AirPlay routes, SharePlay playback, the user's Apple Music library, lock-screen metadata, or CarPlay app design, templates, and navigation. Covers AVCaptureSession, AVFoundation, Core Haptics, MediaPlayer, MusicKit, NowPlaying, ScreenCaptureKit, DockKit.4---567# Media89**You MUST use this skill for ANY camera, photo, audio, haptic, or media playback work.**1011## Cursor Subagent Routing1213Delegate to the appropriate Cursor subagent when this router calls for a specialized auditor.1415## Quick Reference1617| Symptom / Task | Reference |18|----------------|-----------|19| Camera capture, AVCaptureSession | See `skills/camera-capture.md` |20| Slow camera launch / deferred start (iOS 26+), ProRes recording via Pro Video Storage (`OS27`) | See `skills/camera-capture.md` Patterns 8-9 |21| Camera API (RotationCoordinator, etc.) | See `skills/camera-capture-ref.md` |22| Lens aperture / shutter / ISO priority modes, exposure signals, continuous autofocus tracking, low-light video noise reduction, cinematic video metadata capture (`OS27`) | See `skills/camera-capture-ref.md` |23| Center Stage front camera (iPhone 17), dynamic aspect ratio, smart framing, 24/48 MP capture | See `skills/camera-capture-ref.md` |24| iPhone Duo front cameras (virtual front camera, inner/outer ultra-wide), camera direction vs position | See `skills/camera-capture.md` Pattern 6 and `skills/camera-capture-ref.md` (iPhone Duo Front Cameras) |25| Camera freezes, black preview, rotation | See `skills/camera-capture-diag.md` |26| Photo pickers, library access | See `skills/photo-library.md` |27| PHPicker, PhotosPicker, PhotoKit API reference: asset metadata editing (keywords, rating, caption), persistent change observer, background resource upload (`OS27`) | See `skills/photo-library-ref.md` |28| PhotoKit + Swift 6 strict concurrency, `nonisolated` observer, `performChanges` isolation, `_dispatch_assert_queue_fail` | See axiom-concurrency (skills/isolation-inheritance-diag.md) |29| Audio, AVFoundation, spatial audio, async session activation, throwing AVAudioEngine APIs (`OS27`) | See `skills/avfoundation-ref.md` |30| Video write/export/playback, sample-buffer engine, resumable export, Apple Log 2, iOS 27 deprecations (`OS27`) | See `skills/avfoundation-video-ref.md` |31| Audio recognition, ShazamKit | See `skills/shazamkit.md` |32| ShazamKit API reference | See `skills/shazamkit-ref.md` |33| On-device music analysis (key, tempo, structure, loudness), MusicUnderstanding (`OS27`) | See `skills/music-understanding.md` |34| On-device face grouping (cluster faces into people across a library), video highlights/key frames, MediaIntelligence (`OS27`) | See `skills/media-intelligence.md` |35| Haptic feedback, Core Haptics | See `skills/haptics.md` |36| SharePlay coordinated playback, AVDelegatingPlaybackCoordinator, custom-engine sync | See `skills/shareplay-playback.md` |37| SharePlay session lifecycle, activation, non-media state | Use axiom-integration (`skills/shareplay.md`) instead |38| Now Playing metadata, remote commands | See `skills/now-playing.md` |39| Animated lock-screen artwork (iOS 26+) | See `skills/now-playing.md` Pattern 8 |40| NowPlaying framework (`import NowPlaying`, Swift-native `MediaSession`, `OS27`) | See `skills/now-playing.md` (NowPlaying Framework section) |41| Cast / route media to non-AirPlay devices (Google Cast/Chromecast, DLNA) as system routes, AVSystemRouting (`iOS27`, likely EU-gated) | See `skills/system-media-routing.md` |42| Screen capture / recording / streaming the screen or your own app, ScreenCaptureKit (`OS27` — new on iOS/iPadOS/tvOS/visionOS 27; macOS 12.3+) | See `skills/screen-capture.md` |43| CarPlay HIG, app categories, design rules, entitlements | See `skills/carplay-hig.md` |44| CarPlay templates reference (all 12 templates, availability matrix, depth limits) | See `skills/carplay-templates-ref.md` |45| CarPlay navigation reference (base view, route guidance, cluster/HUD, multitouch, voice prompts, map panels + EV charging iOS 27) | See `skills/carplay-navigation-ref.md` |46| CarPlay Now Playing template customization + sports mode | See `skills/now-playing-carplay.md` |47| MusicKit Now Playing, ApplicationMusicPlayer playback, subscription/authorization | See `skills/now-playing-musickit.md` |48| Enumerate the user's Apple Music **library** — MusicLibraryRequest vs MPMediaQuery, reconciling the two, playlist entries, sync, library identity, per-device `Song.id`, missing `PlayParameters`, MusicKit stops responding after a scan | See `skills/music-library.md` |49| DockKit motorized stands / gimbals, subject tracking, custom motor control | See `skills/dockkit.md` |50| Speech-to-text / transcription (SpeechAnalyzer, mic → transcript) | **Invoke axiom-ai** (`skills/ios-ml.md`) |5152## Decision Tree5354```dot55digraph media {56 start [label="Media task" shape=ellipse];57 what [label="Which media feature?" shape=diamond];58 auditor [label="camera-auditor agent" shape=box];5960 start -> what;61 what -> "skills/camera-capture.md" [label="camera capture"];62 what -> "skills/photo-library.md" [label="photo pickers\n/ library"];63 what -> "skills/avfoundation-ref.md" [label="audio / AVFoundation"];64 what -> "skills/avfoundation-video-ref.md" [label="video write/export\n/ sample-buffer (OS27)"];65 what -> "skills/shazamkit.md" [label="ShazamKit\n/ audio recognition"];66 what -> "skills/music-understanding.md" [label="music analysis\n(key/tempo/structure)"];67 what -> "skills/media-intelligence.md" [label="face grouping /\nvideo highlights (OS27)"];68 what -> "skills/haptics.md" [label="haptic feedback"];69 what -> "skills/now-playing.md" [label="Now Playing\n/ remote commands"];70 what -> "skills/music-library.md" [label="enumerate Apple Music\nlibrary / identity"];71 what -> "skills/system-media-routing.md" [label="cast to non-AirPlay\n(Chromecast/DLNA, iOS27)"];72 what -> "skills/screen-capture.md" [label="screen capture /\nrecording (OS27)"];73 what -> "skills/carplay-hig.md" [label="CarPlay app design\n/ categories / entitlements"];74 what -> "skills/dockkit.md" [label="DockKit stands\n/ gimbals / tracking"];75 what -> auditor [label="camera code audit"];76}77```78791. Camera capture? → `skills/camera-capture.md` (patterns), `skills/camera-capture-ref.md` (API), `skills/camera-capture-diag.md` (debugging)802. Photo pickers / library? → `skills/photo-library.md`, `skills/photo-library-ref.md`813. Audio / AVFoundation (audio)? → `skills/avfoundation-ref.md`; video write/export/playback, sample-buffer engine, resumable export, iOS 27 deprecations? → `skills/avfoundation-video-ref.md` (`OS27`)824. ShazamKit / audio recognition? → `skills/shazamkit.md`, `skills/shazamkit-ref.md`835. On-device music analysis (key, tempo, structure, pace, instruments, loudness)? → `skills/music-understanding.md` (`OS27`)846. On-device face grouping (cluster faces into people across a library) or video highlights / key-frame detection? → `skills/media-intelligence.md` (`OS27`)857. Haptics? → `skills/haptics.md`868. Now Playing / remote commands? → `skills/now-playing.md`, `skills/now-playing-carplay.md`, `skills/now-playing-musickit.md`879. Reading the user's Apple Music **library** (enumerate songs/playlists, library identity, sync)? → `skills/music-library.md` — a different problem from playback; read it before any library walk8810. Cast / route media to non-AirPlay devices (Google Cast/Chromecast, DLNA) as system routes? → `skills/system-media-routing.md` (`iOS27`, likely EU-gated)8911. Screen capture / recording / streaming the screen or your own app (ScreenCaptureKit)? → `skills/screen-capture.md` (`OS27` — new on iOS/iPadOS/tvOS/visionOS 27)9012. CarPlay app design, category selection, entitlement request? → `skills/carplay-hig.md` (start here for any CarPlay work)9113. DockKit motorized stands / gimbals, subject tracking, custom motor control? → `skills/dockkit.md`9214. Want camera code audit? → Delegate to the `camera-auditor` subagent (detects deprecated APIs and architectural gaps: missing interruption handlers, runtime-error recovery, audio session deactivation, permission-denied UX, RotationCoordinator on iOS 17+; scores RELIABLE / FRAGILE / BROKEN)9394## Cross-Domain Routing9596**Camera + permissions** (camera access denied, Info.plist missing):97- Camera code → **stay here** (camera-capture)98- Privacy manifest / Info.plist → **invoke axiom-integration** (privacy-ux reference)99- Build/entitlement errors → **invoke axiom-build**100101**ShazamKit + microphone permissions**:102- Microphone NSMicrophoneUsageDescription → **invoke axiom-integration** (privacy-ux reference)103- ShazamKit API and matching → **stay here** (shazamkit)104105**Now Playing + background audio**:106- Now Playing metadata/controls → **stay here** (now-playing)107- Background audio mode / BGTaskScheduler → **invoke axiom-integration** (background-processing reference)108109**Speech-to-text + audio capture** (transcribing mic or asset audio):110- `SpeechAnalyzer` / `SpeechTranscriber`, the ~2-simultaneous-analyzer cap, the `OS27` input providers → **invoke axiom-ai** (`skills/ios-ml.md`)111- Audio session category/mode, `AVCaptureSession` wiring → **stay here** (avfoundation-ref, camera-capture)112- **The trap**: `CaptureInputSequenceProvider.providerWithSession(...)` (`OS27`) automatically reconfigures your app's default `AVAudioSession`. If this suite's audio-session setup "randomly breaks" after transcription is added, that's the cause — use `provider(from:in:)` and add its `captureAudioDataOutput` to your own session.113114**Apple Music library + playback + persistence**:115- Enumerating the library, library identity, `PlayParameters` availability, Sync Library hazards → **stay here** (music-library)116- Queuing and playing what you found, Now Playing publishing → **stay here** (now-playing-musickit)117- Storing library rows in your own database (which column is the durable key, migrations for a re-key) → **invoke axiom-data** — but take the identity rules from music-library first; `persistentID` is not a durable key118- `MusicAuthorization` prompt copy / privacy manifest → **invoke axiom-integration** (privacy-ux reference)119120**Photo library + privacy**:121- Photo picker (PHPicker, PhotosPicker) → **stay here** (photo-library) — no permissions needed122- Full PHPhotoLibrary access → **stay here** (photo-library-ref) — limited access model123- Privacy manifest for photo usage → **invoke axiom-integration** (privacy-ux reference)124125**DockKit + camera / custom inference**:126- DockKit stand control, framing, motor, tracking states → **stay here** (dockkit)127- Underlying AVCaptureSession setup → **stay here** (camera-capture)128- Custom Vision / Core ML inference feeding observations → **invoke axiom-vision**129- Camera permission (NSCameraUsageDescription) → **invoke axiom-integration** (privacy-ux reference)130131**MediaIntelligence + Vision** (faces, image analysis):132- Group faces into people across a library, video highlights / key frames → **stay here** (media-intelligence) — clustering identities + on-device video moment detection133- Detect *where* a face is in one image (bounding box, landmarks), OCR, segmentation → **invoke axiom-vision** — per-image detection, a different problem134- System Photos "People" album → that album is system-owned (PhotoKit); MediaIntelligence builds *your own* index over assets you manage → **stay here** (photo-library for the asset access)135136## Anti-Rationalization137138| Thought | Reality |139|---------|---------|140| "Camera capture is just AVCaptureSession setup" | Camera has interruption handlers, rotation, and threading requirements. |141| "Camera launch is fast enough if I startRunning() early" | Output initialization dominates launch; iOS 26 deferred start halves time-to-preview. |142| "I'll add haptics with a simple API call" | Haptic design has patterns for each interaction type matching HIG. |143| "ShazamKit is just SHSession + a delegate" | iOS 17+ has SHManagedSession which eliminates all AVAudioEngine boilerplate. |144| "Now Playing info is just setting metadata" | Remote commands, artwork handling, and state sync have 15+ gotchas. |145| "I'll use UIImagePickerController for photos" | PHPicker/PhotosPicker are the modern API — no permissions required. |146| "MediaPlayer reports fewer playlist members than MusicKit, so sync is incomplete" | The gap is structural, not a sync signal: it tracks the entries with no local representation — exact on all five playlists inspected, off by one library-wide. A shipped guard built on this premise silently skipped 9 of 15 playlists forever. Read `skills/music-library.md`. |147| "Reading the music library is just a MusicLibraryRequest" | Reading one MusicKit property across a large library leaves every later MusicKit request unresumed for the rest of the run, with no error thrown. Pool starvation is a symptom, not the mechanism — a plain `Thread`, which never touches the pool, loses MusicKit identically. Batching the request is ~100x *slower*, not safer. |148| "`Song.id` is a stable key I can store" | Its *format* differs per device for the same library (`i.…` on one, bare numeric on another). Never parse it, never use it as a cross-device key. |149| "DockKit is just pairing a stand" | Custom control needs system tracking disabled, handles inverted dock states, and two different coordinate origins. |150| "Grouping faces is just Vision face detection" | Vision detects faces in one image; MediaIntelligence clusters them into persistent people (entities) across a whole library, with its own working directory and state. |151| "Casting to Chromecast means bundling the Google Cast SDK" | On iOS 27, AVSystemRouting exposes non-AirPlay routes as system routes — you adopt one Apple API (observe events, start a session, drive playbackControl) instead of a per-vendor SDK. Likely EU-gated — gate and keep a fallback. |152| "I'll sync SharePlay playback by broadcasting the current time over the messenger" | The messenger has no clock. `AVDelegatingPlaybackCoordinatorPlayCommand.hostClockTime` gives you an absolute `CMClockGetHostTimeClock()` start time; hand-rolling reinvents startup barriers, seek ordering, stalls, and interruptions badly. |153| "The playback coordinator handles interruptions for me" | Only `AVPlayerPlaybackCoordinator` does. `AVDelegatingPlaybackCoordinator` adds **no** automatic suspensions — a custom engine begins *and* ends every one, and a suspension never ended hangs the whole group. |154| "ScreenCaptureKit on iPad works like the Mac (enumerate displays/windows)" | On iOS/iPadOS `SCShareableContent` and all `SCContentFilter` initializers are macOS-only — you get a filter ONLY from the system `SCContentSharingPicker`. New on iOS/iPadOS/tvOS/visionOS 27. Also not `ImageRenderer` (that snapshots your own SwiftUI view). |155156## Example Invocations157158User: "How do I set up a camera preview?"159→ Read: `skills/camera-capture.md`160161User: "My camera app takes a second before preview appears"162→ Read: `skills/camera-capture.md` (Pattern 8, deferred start)163164User: "Support the Center Stage front camera" / "Capture 48MP photos"165→ Read: `skills/camera-capture-ref.md`166167User: "How do I switch cameras on iPhone Duo?" / "Choose a camera by direction instead of position"168→ Read: `skills/camera-capture.md` (Pattern 6) and `skills/camera-capture-ref.md` (iPhone Duo Front Cameras)169170User: "Camera freezes when I get a phone call"171→ Read: `skills/camera-capture-diag.md`172173User: "How do I let users pick photos in SwiftUI?"174→ Read: `skills/photo-library.md`175176User: "Implement haptic feedback for button taps"177→ Read: `skills/haptics.md`178179User: "Now Playing info doesn't appear on Lock Screen"180→ Read: `skills/now-playing.md`181182User: "How do I identify songs with ShazamKit?"183→ Read: `skills/shazamkit.md`184185User: "How do I detect a song's tempo / key / beat grid on-device?" / "Analyze audio loudness or structure"186→ Read: `skills/music-understanding.md`187188User: "Group faces into people across my photo library" / "cluster faces on-device" / "find highlights or a thumbnail frame in a video"189→ Read: `skills/media-intelligence.md`190191User: "Cast to Chromecast / Google Cast without the Cast SDK" / "support non-AirPlay casting" / "route media to a DLNA device as a system route"192→ Read: `skills/system-media-routing.md`193194User: "Record / stream the iPad screen" / "ScreenCaptureKit on iOS" / "screen recording in my app" / "capture just my app's content"195→ Read: `skills/screen-capture.md`196197User: "List every song in the user's Apple Music library" / "enumerate their playlists" / "MPMediaQuery vs MusicKit" / "sync Apple Music playlists" / "MediaPlayer and MusicKit report different playlist counts" / "my MusicKit requests stop responding after a library scan" / "store a stable id for each song across devices" / "playlists went empty after the user turned on Sync Library"198→ Read: `skills/music-library.md`199200User: "Track a subject with a motorized stand" / "Control a DockKit gimbal"201→ Read: `skills/dockkit.md`202203User: "Check my camera code for issues"204→ Launch: `camera-auditor` agent