Media
You MUST use this skill for ANY camera, photo, audio, haptic, or media playback work.
<!-- AXIOM_AUDITOR_INLINE_BEGIN — auto-maintained by scripts/build-inlined-auditors.ts; do not hand-edit --><!-- AXIOM_AUDITOR_INLINE_END -->Not on Claude Code? Where this router says "Launch
some-auditoragent", read that auditor's file in this suite and follow it inline — the same procedure, needing only file search and read.Available here:
skills/camera-auditor.md.Agents that need Bash — builds, tests, simulators, crash symbolication — stay Claude Code-only; there is no inline equivalent for those.
Quick Reference
Decision Tree
- 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? → Launch
camera-auditoragent (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, theOS27input providers → invoke axiom-ai (skills/ios-ml.md)- Audio session category/mode,
AVCaptureSessionwiring → stay here (avfoundation-ref, camera-capture) - The trap:
CaptureInputSequenceProvider.providerWithSession(...)(OS27) automatically reconfigures your app's defaultAVAudioSession. If this suite's audio-session setup "randomly breaks" after transcription is added, that's the cause — useprovider(from:in:)and add itscaptureAudioDataOutputto your own session.
Apple Music library + playback + persistence:
- Enumerating the library, library identity,
PlayParametersavailability, 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;
persistentIDis not a durable key MusicAuthorizationprompt 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
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


