mcpField
A
axiom-media

axiom-media

github.com/charleswiltgen開発1.2k1.3k 回インストール今日更新
リポジトリ

axiom-media について

axiom-media は、Apple プラットフォームのカメラ、写真、オーディオ、触覚、メディア再生の作業を、関連資料やスキルへ案内するスキルです。メディア機能を実装・診断する開発者向けです。

主な機能

  1. 01カメラ撮影と写真ライブラリ作業の案内
  2. 02オーディオ、動画、再生 API の解説
  3. 03触覚とメディアルーティングの案内
  4. 04メディア問題の診断手順

活用シーン

  1. 01カメラ撮影や回転問題の手順を確認
  2. 02写真ライブラリへのアクセスを実装
  3. 03オーディオ再生や動画書き出しに取り組む
  4. 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.md
avfoundation-video-ref.md
camera-auditor.md
camera-capture-diag.md
camera-capture-ref.md
camera-capture.md
carplay-hig.md
carplay-navigation-ref.md
carplay-templates-ref.md
dockkit.md
haptics.md
media-intelligence.md
music-library.md
music-understanding.md
now-playing-carplay.md
now-playing-musickit.md
now-playing.md
photo-library-ref.md
photo-library.md
screen-capture.md
shareplay-playback.md
shazamkit-ref.md
shazamkit.md
system-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 ツールを使用してください。

クイックリファレンス

症状/タスク参照先
カメラ撮影、AVCaptureSessionskills/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_failaxiom-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 を参照してください
オーディオ認識、ShazamKitskills/shazamkit.md を参照してください
ShazamKit API リファレンスskills/shazamkit-ref.md を参照してください
デバイス上での音楽分析(キー、テンポ、構成、ラウドネス)、MusicUnderstanding(OS27)skills/music-understanding.md を参照してください
デバイス上での顔のグループ化(ライブラリ全体の顔を人物ごとに分類)、動画のハイライト/キーフレーム、MediaIntelligence(OS27)skills/media-intelligence.md を参照してください
触覚フィードバック、Core Hapticsskills/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"];
}
  1. カメラ撮影ですか? → skills/camera-capture.md(パターン)、skills/camera-capture-ref.md(API)、skills/camera-capture-diag.md(デバッグ)
  2. 写真ピッカー/ライブラリですか? → skills/photo-library.md、skills/photo-library-ref.md
  3. オーディオ/AVFoundation(オーディオ)ですか? → skills/avfoundation-ref.md;動画の書き込み/書き出し/再生、サンプルバッファエンジン、再開可能な書き出し、iOS 27 の非推奨項目ですか? → skills/avfoundation-video-ref.md(OS27)
  4. ShazamKit/オーディオ認識ですか? → skills/shazamkit.md、skills/shazamkit-ref.md
  5. オンデバイスの音楽分析(キー、テンポ、構成、ペース、楽器、ラウドネス)ですか? → skills/music-understanding.md(OS27)
  6. オンデバイスの顔グループ化(ライブラリ全体で顔を人物ごとにまとめる)、または動画のハイライト/キーフレーム検出ですか? → skills/media-intelligence.md(OS27)
  7. 触覚フィードバックですか? → skills/haptics.md
  8. 再生中(Now Playing)/リモートコマンドですか? → skills/now-playing.md、skills/now-playing-carplay.md、skills/now-playing-musickit.md 8a. オーディオアプリ内での Siri による再生(「MyApp で X を再生して」)ですか? → axiom-integration(skills/siri-audio.md);Siri の「一時停止」「次へ」「この曲は何?」はここで扱います(リモートコマンド+再生中のメタデータ)
  9. ユーザーの Apple Music ライブラリの読み取り(曲/プレイリストの列挙、ライブラリの識別、同期)ですか? → skills/music-library.md — 再生とは別の問題です。ライブラリを走査する前に必ず読んでください
  10. メディアを AirPlay 以外のデバイス(Google Cast/Chromecast、DLNA)にシステムルートとしてキャスト/ルーティングしますか? → skills/system-media-routing.md(iOS27、EU で制限される可能性あり)
  11. 画面キャプチャ/録画/画面または独自アプリのストリーミング(ScreenCaptureKit)ですか? → skills/screen-capture.md(OS27 — iOS/iPadOS/tvOS/visionOS 27 で新登場)
  12. CarPlay アプリの設計、カテゴリの選択、エンタイトルメントの申請ですか? → skills/carplay-hig.md(CarPlay 関連作業はここから始めてください)
  13. DockKit の電動スタンド/ジンバル、被写体トラッキング、カスタムモーター制御ですか? → skills/dockkit.md
  14. カメラコードの監査が必要ですか? → 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 エージェント

コメント