Back to Skills

axiom-camera-capture-diag

verified

camera freezes, preview rotated wrong, capture slow, session interrupted, black preview, front camera mirrored, camera not starting, AVCaptureSession errors, startRunning blocks, phone call interrupts camera

View on GitHub

Marketplace

axiom-marketplace

CharlesWiltgen/Axiom

Plugin

axiom

Repository

CharlesWiltgen/Axiom
289stars

.claude-plugin/plugins/axiom/skills/axiom-camera-capture-diag/SKILL.md

Last Verified

January 16, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/CharlesWiltgen/Axiom/blob/main/.claude-plugin/plugins/axiom/skills/axiom-camera-capture-diag/SKILL.md -a claude-code --skill axiom-camera-capture-diag

Installation paths:

Claude
.claude/skills/axiom-camera-capture-diag/
Powered by add-skill CLI

Instructions

# Camera Capture Diagnostics

Systematic troubleshooting for AVFoundation camera issues: frozen preview, wrong rotation, slow capture, session interruptions, and permission problems.

## Overview

**Core Principle**: When camera doesn't work, the problem is usually:
1. **Threading** (session work on main thread) - 35%
2. **Session lifecycle** (not started, interrupted, not configured) - 25%
3. **Rotation** (deprecated APIs, missing coordinator) - 20%
4. **Permissions** (denied, not requested) - 15%
5. **Configuration** (wrong preset, missing input/output) - 5%

**Always check threading and session state BEFORE debugging capture logic.**

## Red Flags

Symptoms that indicate camera-specific issues:

| Symptom | Likely Cause |
|---------|--------------|
| Preview shows black screen | Session not started, permission denied, no camera input |
| UI freezes when opening camera | `startRunning()` called on main thread |
| Camera freezes on phone call | No interruption handling |
| Preview rotated 90° wrong | Not using RotationCoordinator (iOS 17+) |
| Captured photo rotated wrong | Rotation angle not applied to output connection |
| Front camera photo not mirrored | This is correct! (preview mirrors, photo does not) |
| "Camera in use by another app" | Another app has exclusive access |
| Capture takes 2+ seconds | `photoQualityPrioritization` set to `.quality` |
| Session won't start on iPad | Split View - camera unavailable |
| Crash on older iOS | Using iOS 17+ APIs without availability check |

## Mandatory First Steps

Before investigating code, run these diagnostics:

### Step 1: Check Session State

```swift
print("📷 Session state:")
print("  isRunning: \(session.isRunning)")
print("  inputs: \(session.inputs.count)")
print("  outputs: \(session.outputs.count)")

for input in session.inputs {
    if let deviceInput = input as? AVCaptureDeviceInput {
        print("  Input: \(deviceInput.device.localizedName)")
    }
}

for output in session.outputs {
    print("  O

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
15372 chars