axiom-media について
axiom-media は、Apple プラットフォームのカメラ、写真、オーディオ、触覚、メディア再生の作業を、関連資料やスキルへ案内するスキルです。メディア機能を実装・診断する開発者向けです。
主な機能
- 01カメラ撮影と写真ライブラリ作業の案内
- 02オーディオ、動画、再生 API の解説
- 03触覚とメディアルーティングの案内
- 04メディア問題の診断手順
活用シーン
- 01カメラ撮影や回転問題の手順を確認
- 02写真ライブラリへのアクセスを実装
- 03オーディオ再生や動画書き出しに取り組む
- 04カメラコードの信頼性を監査
MCP 対応
README では、MCP 経由で `axiom_get_agent` からエージェントの手順を取得できると説明されています。MCP サーバーであるとは記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-mediaインストール後、Claude Code で/axiom-mediaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skills/avfoundation-ref.mdavfoundation-video-ref.mdcamera-auditor.mdcamera-capture-diag.mdcamera-capture-ref.mdcamera-capture.mdcarplay-hig.mdcarplay-navigation-ref.mdcarplay-templates-ref.mddockkit.mdhaptics.mdmedia-intelligence.mdmusic-library.mdmusic-understanding.mdnow-playing-carplay.mdnow-playing-musickit.mdnow-playing.mdphoto-library-ref.mdphoto-library.mdscreen-capture.mdshareplay-playback.mdshazamkit-ref.mdshazamkit.mdsystem-media-routing.md詳細
メディア
カメラ、写真、オーディオ、触覚フィードバック、メディア再生に関する作業では、必ずこのスキルを使用してください。
Axiom エージェントを起動できませんか? このルーターからエージェントに案内された場合は、その手順をインラインで実行してください。MCP 経由では、
axiom_get_agentがエージェントを返します。それ以外の場合は、以下のファイルを読み取ってください。ファイル検索と読み取りだけで実行できます。ここで利用可能:
skills/camera-auditor.md。ほかのエージェントについても、MCP 経由では
axiom_get_agentが返します。そのエージェントの xclog、xcsym、xcprof の手順を、axiom_xclog_*、axiom_xcsym_*、axiom_xcprof_*ツールで実行してください。それ以外の場合は、Axiom のスキルでskills/<agent>.mdを検索してください。該当ファイルがない場合は、このスイートのスキルを使って自分で作業し、PATH上にある Axiom ツールを使用してください。
クイックリファレンス
| 症状/タスク | 参照先 |
|---|---|
| カメラ撮影、AVCaptureSession | skills/camera-capture.md を参照してください |
カメラの起動が遅い/起動の遅延(iOS 26 以降)、Pro Video Storage による ProRes 録画(OS27) | skills/camera-capture.md のパターン 8~9 を参照してください |
| カメラ API(RotationCoordinator など) | skills/camera-capture-ref.md を参照してください |
レンズの絞り/シャッター/ISO 優先モード、露出シグナル、連続オートフォーカストラッキング、低照度動画のノイズ低減、シネマティック動画メタデータの撮影(OS27) | skills/camera-capture-ref.md を参照してください |
| Center Stage 前面カメラ(iPhone 17)、動的なアスペクト比、スマートフレーミング、24/48 MP 撮影 | skills/camera-capture-ref.md を参照してください |
| iPhone Duo 前面カメラ(仮想前面カメラ、内側/外側の超広角)、カメラの向きと位置の違い | skills/camera-capture.md のパターン 6 と skills/camera-capture-ref.md(iPhone Duo 前面カメラ)を参照してください |
| カメラのフリーズ、プレビューが黒くなる、回転 | skills/camera-capture-diag.md を参照してください |
| 写真ピッカー、ライブラリへのアクセス | skills/photo-library.md を参照してください |
PHPicker、PhotosPicker、PhotoKit API リファレンス:アセットのメタデータ編集(キーワード、評価、キャプション)、永続的な変更オブザーバー、バックグラウンドでのリソースアップロード(OS27) | skills/photo-library-ref.md を参照してください |
PhotoKit と Swift 6 の厳格な並行性、nonisolated オブザーバー、performChanges の分離、_dispatch_assert_queue_fail | axiom-concurrency(skills/isolation-inheritance-diag.md)を参照してください |
オーディオ、AVFoundation、空間オーディオ、非同期のセッション有効化、エラーをスローする AVAudioEngine API(OS27) | skills/avfoundation-ref.md を参照してください |
動画の書き込み/書き出し/再生、サンプルバッファエンジン、再開可能な書き出し、Apple Log 2、iOS 27 での非推奨化(OS27) | skills/avfoundation-video-ref.md を参照してください |
| オーディオ認識、ShazamKit | skills/shazamkit.md を参照してください |
| ShazamKit API リファレンス | skills/shazamkit-ref.md を参照してください |
デバイス上での音楽分析(キー、テンポ、構成、ラウドネス)、MusicUnderstanding(OS27) | skills/music-understanding.md を参照してください |
デバイス上での顔のグループ化(ライブラリ全体の顔を人物ごとに分類)、動画のハイライト/キーフレーム、MediaIntelligence(OS27) | skills/media-intelligence.md を参照してください |
| 触覚フィードバック、Core Haptics | skills/haptics.md を参照してください |
| SharePlay の同期再生、AVDelegatingPlaybackCoordinator、カスタムエンジンの同期 | skills/shareplay-playback.md を参照してください |
| SharePlay のセッションライフサイクル、有効化、メディア以外の状態 | 代わりに axiom-integration(skills/shareplay.md)を使用してください |
| 再生中メタデータ、リモートコマンド | skills/now-playing.md を参照してください |
| Siri によるオーディオアプリでのコンテンツ再生(「MyApp で X を再生」、音声による「いいね」/プレイリストへの追加など) | axiom-integration(skills/siri-audio.md)を使用してください — Audio schema ドメインと SiriKit メディア |
| ロック画面のアニメーションアートワーク(iOS 26 以降) | skills/now-playing.md のパターン 8 を参照してください |
NowPlaying フレームワーク(import NowPlaying、Swift ネイティブの MediaSession、OS27) | skills/now-playing.md(NowPlaying Framework セクション)を参照してください |
AirPlay 以外のデバイス(Google Cast/Chromecast、DLNA)へのメディアのキャスト/ルーティング(システムルートとして)、AVSystemRouting(iOS27、EU での提供に限定される可能性あり) | skills/system-media-routing.md を参照してください |
画面のキャプチャ/録画/ストリーミング、または独自アプリの画面のキャプチャ/録画/ストリーミング、ScreenCaptureKit(OS27 — iOS/iPadOS/tvOS/visionOS 27 で新登場、macOS 12.3 以降) | skills/screen-capture.md を参照してください |
| CarPlay HIG、アプリカテゴリ、デザインルール、エンタイトルメント | skills/carplay-hig.md を参照してください |
| CarPlay テンプレートのリファレンス(全 12 テンプレート、対応状況一覧、階層の深さの制限) | skills/carplay-templates-ref.md を参照してください |
| CarPlay ナビゲーションのリファレンス(ベースビュー、ルート案内、クラスター/HUD、マルチタッチ、音声プロンプト、マップパネルと iOS 27 の EV 充電) | skills/carplay-navigation-ref.md を参照してください |
| CarPlay の Now Playing テンプレートのカスタマイズとスポーツモード | skills/now-playing-carplay.md を参照してください |
| MusicKit の Now Playing、ApplicationMusicPlayer による再生、サブスクリプション/認証 | skills/now-playing-musickit.md を参照してください |
ユーザーの Apple Music ライブラリを列挙する — MusicLibraryRequest と MPMediaQuery の比較、両者の調整、プレイリストのエントリ、同期、ライブラリの識別、デバイスごとの Song.id、PlayParameters の欠落、スキャン後に MusicKit が応答しなくなる問題 | skills/music-library.md を参照してください |
| DockKit の電動スタンド/ジンバル、被写体追跡、カスタムモーター制御 | skills/dockkit.md を参照してください |
| 音声からテキストへの変換/文字起こし(SpeechAnalyzer、マイク音声からトランスクリプトへ) | axiom-ai を呼び出してください(skills/speech.md) |
決定木
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"];
}
- カメラ撮影ですか? →
skills/camera-capture.md(パターン)、skills/camera-capture-ref.md(API)、skills/camera-capture-diag.md(デバッグ) - 写真ピッカー/ライブラリですか? →
skills/photo-library.md、skills/photo-library-ref.md - オーディオ/AVFoundation(オーディオ)ですか? →
skills/avfoundation-ref.md;動画の書き込み/書き出し/再生、サンプルバッファエンジン、再開可能な書き出し、iOS 27 の非推奨項目ですか? →skills/avfoundation-video-ref.md(OS27) - ShazamKit/オーディオ認識ですか? →
skills/shazamkit.md、skills/shazamkit-ref.md - オンデバイスの音楽分析(キー、テンポ、構成、ペース、楽器、ラウドネス)ですか? →
skills/music-understanding.md(OS27) - オンデバイスの顔グループ化(ライブラリ全体で顔を人物ごとにまとめる)、または動画のハイライト/キーフレーム検出ですか? →
skills/media-intelligence.md(OS27) - 触覚フィードバックですか? →
skills/haptics.md - 再生中(Now Playing)/リモートコマンドですか? →
skills/now-playing.md、skills/now-playing-carplay.md、skills/now-playing-musickit.md8a. オーディオアプリ内での Siri による再生(「MyApp で X を再生して」)ですか? → axiom-integration(skills/siri-audio.md);Siri の「一時停止」「次へ」「この曲は何?」はここで扱います(リモートコマンド+再生中のメタデータ) - ユーザーの Apple Music ライブラリの読み取り(曲/プレイリストの列挙、ライブラリの識別、同期)ですか? →
skills/music-library.md— 再生とは別の問題です。ライブラリを走査する前に必ず読んでください - メディアを AirPlay 以外のデバイス(Google Cast/Chromecast、DLNA)にシステムルートとしてキャスト/ルーティングしますか? →
skills/system-media-routing.md(iOS27、EU で制限される可能性あり) - 画面キャプチャ/録画/画面または独自アプリのストリーミング(ScreenCaptureKit)ですか? →
skills/screen-capture.md(OS27— iOS/iPadOS/tvOS/visionOS 27 で新登場) - CarPlay アプリの設計、カテゴリの選択、エンタイトルメントの申請ですか? →
skills/carplay-hig.md(CarPlay 関連作業はここから始めてください) - DockKit の電動スタンド/ジンバル、被写体トラッキング、カスタムモーター制御ですか? →
skills/dockkit.md - カメラコードの監査が必要ですか? →
camera-auditorエージェントを起動してください(非推奨 API やアーキテクチャ上の不足を検出します。不足の有無を確認する項目は、中断ハンドラー、実行時エラーからの復旧、オーディオセッションの非アクティブ化、権限拒否時の UX、iOS 17 以降の RotationCoordinator です。評価結果は RELIABLE/FRAGILE/BROKEN です)
ドメイン横断の振り分け
カメラと権限(カメラへのアクセスが拒否される、Info.plist がない):
- カメラのコード → ここにとどまる(camera-capture)
- プライバシーマニフェスト/Info.plist → axiom-integration を呼び出す(privacy-ux のリファレンス)
- ビルド/エンタイトルメントのエラー → axiom-build を呼び出す
ShazamKit とマイクの権限:
- マイクの NSMicrophoneUsageDescription → axiom-integration を呼び出す(privacy-ux のリファレンス)
- ShazamKit API とマッチング → ここにとどまる(shazamkit)
再生中とバックグラウンドオーディオ:
- 再生中のメタデータ/コントロール → ここにとどまる(now-playing)
- バックグラウンドオーディオモード/BGTaskScheduler → axiom-integration を呼び出す(background-processing のリファレンス)
音声テキスト変換と音声キャプチャ(マイクまたはアセットの音声を文字起こしする場合):
SpeechAnalyzer/SpeechTranscriber、OS27の入力プロバイダー、iOS/visionOS での約2つのアナライザーという上限、macOS ではいずれも利用不可 → axiom-ai を呼び出す(skills/speech.md)- オーディオセッションのカテゴリ/モード、
AVCaptureSessionの接続設定 → ここにとどまる(avfoundation-ref、camera-capture) - 落とし穴:
CaptureInputSequenceProvider.providerWithSession(...)(OS27)は、アプリのデフォルトのAVAudioSessionを自動的に再設定します。文字起こしの追加後に、このスイートのオーディオセッション設定が「ランダムに壊れる」場合、それが原因です。provider(from:in:)を使って独自のセッションに参加するか、そのセッションを所有するアクターからinit(session:analyzerFormat:priority:)を使い、captureAudioDataOutputを追加してください。
Apple Music ライブラリ、再生、永続化:
- ライブラリの列挙、ライブラリの識別情報、
PlayParametersの利用可否、Sync Library の落とし穴 → ここにとどまる(music-library) - 見つけたものをキューに追加して再生すること、再生中の情報の公開 → ここにとどまる(now-playing-musickit)
- ライブラリの行を独自のデータベースに保存すること(永続的なキーとなる列、キーを変更する際のマイグレーション)→ axiom-data を呼び出す — ただし、まず music-library の識別ルールを確認してください。
persistentIDは永続的なキーではありません MusicAuthorizationのプロンプト文言/プライバシーマニフェスト → axiom-integration を呼び出す(privacy-ux のリファレンス)
写真ライブラリとプライバシー:
- 写真ピッカー(PHPicker、PhotosPicker)→ ここにとどまる(photo-library)— 権限は不要です
- PHPhotoLibrary への完全なアクセス → ここにとどまる(photo-library-ref)— 制限付きアクセスモデル
- 写真の利用に関するプライバシーマニフェスト → axiom-integration を呼び出す(privacy-ux のリファレンス)
DockKit とカメラ/カスタム推論:
- DockKit スタンドの制御、フレーミング、モーター、トラッキング状態 → ここにとどまる(dockkit)
- 基盤となる AVCaptureSession の設定 → ここにとどまる(camera-capture)
- 観測データを生成するカスタム Vision/Core ML 推論 → axiom-vision を呼び出す
- カメラの権限(NSCameraUsageDescription)→ axiom-integration を呼び出す(privacy-ux のリファレンス)
MediaIntelligence と Vision(顔、画像解析):
- ライブラリ内の顔を人物ごとにグループ化すること、動画のハイライト/キーフレーム → ここにとどまる(media-intelligence)— ID のクラスタリングとオンデバイスでの動画モーメント検出
- 1枚の画像内で顔がどこにあるかを検出すること(バウンディングボックス、ランドマーク)、OCR、セグメンテーション → axiom-vision を呼び出す — 画像ごとの検出であり、別の問題です
- システムの写真アプリの「ピープル」アルバム → このアルバムはシステムが所有しています(PhotoKit)。MediaIntelligence は、管理するアセットを対象に独自のインデックスを構築します → ここにとどまる(アセットへのアクセスには photo-library)
安易な合理化
| 考え | 実際 |
|---|---|
「カメラのキャプチャはAVCaptureSessionを設定するだけです」 | カメラには、中断ハンドラー、回転、スレッドに関する要件があります。 |
「早めにstartRunning()を開始すれば、カメラの起動は十分速いです」 | 起動時間の大半は出力の初期化が占めます。iOS 26 の遅延開始により、プレビュー表示までの時間は半分になります。 |
| 「簡単な API 呼び出しで触覚フィードバックを追加できます」 | 触覚フィードバックの設計には、HIG に沿った各種インタラクション向けのパターンがあります。 |
「ShazamKit はSHSessionとデリゲートだけです」 | iOS 17 以降には、AVAudioEngineの定型コードをすべて不要にするSHManagedSessionがあります。 |
| 「Now Playing の情報はメタデータを設定するだけです」 | リモートコマンド、アートワークの処理、状態の同期には、15 以上の注意点があります。 |
「写真にはUIImagePickerControllerを使います」 | PHPicker/PhotosPickerは最新の API で、権限は不要です。 |
| 「MediaPlayer が MusicKit より少ないプレイリストメンバーを報告するので、同期は不完全です」 | この差は同期の問題ではなく、構造上のものです。ローカルに表現がないエントリを追跡しており、調査した 5 つのプレイリストすべてで正確でしたが、ライブラリ全体では 1 つ少ない結果になりました。この前提に基づいてリリースされたガードは、15 個中 9 個のプレイリストを永久に黙ってスキップしました。skills/music-library.mdを読んでください。 |
「ミュージックライブラリの読み取りはMusicLibraryRequestを使うだけです」 | 大規模なライブラリで MusicKit のプロパティを 1 つ読み取ると、エラーが発生しないまま、その実行中は以降のすべての MusicKit リクエストが再開されなくなります。プールの枯渇は症状であって、仕組みそのものではありません。プールに一切触れない通常のThreadでも、同様に MusicKit が機能しなくなります。リクエストをバッチ処理すると、安全になるどころか約 100 倍遅くなります。 |
「Song.idは保存できる安定したキーです」 | 同じライブラリでも、デバイスによってその形式が異なります(片方ではi.…、もう片方では数字のみ)。解析したり、デバイス間で共通のキーとして使ったりしないでください。 |
| 「DockKit はスタンドをペアリングするだけです」 | カスタム制御では、システムのトラッキングを無効にし、反転したドック状態に対処するとともに、異なる 2 つの座標原点を扱う必要があります。 |
| 「顔のグループ化は Vision の顔検出を使うだけです」 | Vision は 1 枚の画像内の顔を検出します。MediaIntelligence はライブラリ全体から顔をクラスタリングし、永続的な人物(エンティティ)を作成します。そのために独自の作業ディレクトリと状態も使用します。 |
| 「Chromecast へのキャストには Google Cast SDK を同梱します」 | iOS 27 では、AVSystemRouting により AirPlay 以外のルートもシステムルートとして公開されます。ベンダーごとの SDK ではなく、Apple の API を 1 つ採用し(イベントを監視し、セッションを開始し、playbackControlを制御する)、操作できます。EU での提供に制限がある可能性があります。制限を設け、フォールバックを用意してください。 |
| 「メッセンジャーで現在時刻をブロードキャストすれば、SharePlay の再生を同期できます」 | メッセンジャーにはクロックがありません。AVDelegatingPlaybackCoordinatorPlayCommand.hostClockTimeを使うと、CMClockGetHostTimeClock()の絶対開始時刻を取得できます。自前で実装すると、起動時の同期、シーク順序、停止、中断への対処を適切に行えず、同じものを再発明することになります。 |
| 「再生コーディネーターが中断を処理してくれます」 | それができるのはAVPlayerPlaybackCoordinatorだけです。AVDelegatingPlaybackCoordinatorは自動的な一時停止をまったく追加しません。カスタムエンジンでは、それぞれの一時停止を開始し、終了させる必要があります。一時停止を終了しないままにすると、グループ全体が停止します。 |
| 「iPad の ScreenCaptureKit は Mac と同じように動作し、ディスプレイやウィンドウを列挙できます」 | iOS/iPadOS では、SCShareableContentとすべてのSCContentFilterイニシャライザーは macOS 専用です。フィルターはシステムのSCContentSharingPickerからのみ取得できます。iOS/iPadOS/tvOS/visionOS 27 で新たに利用できます。また、ImageRendererではありません(これは独自の SwiftUI ビューをスナップショットします)。 |
呼び出し例
ユーザー:「カメラのプレビューを設定するにはどうすればよいですか?」
→ 読み込み:skills/camera-capture.md
ユーザー:「カメラアプリでプレビューが表示されるまでに時間がかかります」
→ 読み込み:skills/camera-capture.md(パターン 8、遅延開始)
ユーザー:「Center Stage のフロントカメラに対応する」/「48MP の写真を撮影する」
→ 読み込み:skills/camera-capture-ref.md
ユーザー:「iPhone Duo でカメラを切り替えるにはどうすればよいですか?」/「位置ではなく向きでカメラを選択する」
→ 読み込み:skills/camera-capture.md(パターン 6)と skills/camera-capture-ref.md(iPhone Duo のフロントカメラ)
ユーザー:「電話がかかってくるとカメラがフリーズします」
→ 読み込み:skills/camera-capture-diag.md
ユーザー:「SwiftUI でユーザーが写真を選べるようにするにはどうすればよいですか?」
→ 読み込み:skills/photo-library.md
ユーザー:「ボタンをタップしたときの触覚フィードバックを実装する」
→ 読み込み:skills/haptics.md
ユーザー:「ロック画面に再生中の情報が表示されません」
→ 読み込み:skills/now-playing.md
ユーザー:「ShazamKit で曲を識別するにはどうすればよいですか?」
→ 読み込み:skills/shazamkit.md
ユーザー:「デバイス上で曲のテンポ/キー/ビートグリッドを検出するにはどうすればよいですか?」/「オーディオのラウドネスや構成を分析する」
→ 読み込み:skills/music-understanding.md
ユーザー:「写真ライブラリ全体から顔を人物ごとにグループ化する」/「デバイス上で顔をクラスタリングする」/「動画のハイライトやサムネイルのフレームを見つける」
→ 読み込み:skills/media-intelligence.md
ユーザー:「Cast SDK を使わずに Chromecast/Google Cast にキャストする」/「AirPlay 以外のキャストに対応する」/「DLNA デバイスにシステムルートとしてメディアをルーティングする」
→ 読み込み:skills/system-media-routing.md
ユーザー:「iPad の画面を録画/ストリーミングする」/「iOS の ScreenCaptureKit」/「アプリ内で画面を録画する」/「アプリのコンテンツだけをキャプチャする」
→ 読み込み:skills/screen-capture.md
ユーザー:「ユーザーの Apple Music ライブラリにある曲をすべて一覧表示する」/「プレイリストを列挙する」/「MPMediaQuery と MusicKit の比較」/「Apple Music のプレイリストを同期する」/「MediaPlayer と MusicKit でプレイリスト数が異なる」/「ライブラリのスキャン後に MusicKit のリクエストが応答しなくなる」/「デバイス間で各曲の安定した ID を保存する」/「ユーザーがライブラリを同期をオンにした後、プレイリストが空になった」
→ 読み込み:skills/music-library.md
ユーザー:「モーター付きスタンドで被写体を追跡する」/「DockKit ジンバルを制御する」
→ 読み込み:skills/dockkit.md
ユーザー:「カメラのコードに問題がないか確認する」
→ 起動:camera-auditor エージェント