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` 获取 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 也会返回该智能体;请使用 axiom_xclog_*、axiom_xcsym_* 和 axiom_xcprof_* 工具运行其 xclog、xcsym 和 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 弃用 API(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) — 音频架构领域 + SiriKit 媒体
动态锁屏插图(iOS 26+)参见 skills/now-playing.md 模式 8
NowPlaying 框架(import NowPlaying、Swift 原生 MediaSession、OS27)参见 skills/now-playing.md(NowPlaying 框架部分)
将媒体投放 / 路由到非 AirPlay 设备(Google Cast/Chromecast、DLNA),作为系统路由,AVSystemRouting(iOS27,可能受欧盟地区限制)参见 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 电动汽车充电)参见 skills/carplay-navigation-ref.md
CarPlay“正在播放”模板自定义 + 体育模式参见 skills/now-playing-carplay.md
MusicKit“正在播放”、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. 正在播放/远程命令?→ 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,可能受欧盟地区限制)
  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 Agent(检测已弃用 API 和架构缺陷:缺少中断处理程序、运行时错误恢复、音频会话停用、权限被拒时的用户体验、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:) 加入你自己的会话,或从拥有该会话的 Actor 调用 init(session:analyzerFormat:priority:),并添加其 captureAudioDataOutput。

Apple Music 资料库 + 播放 + 持久化:

  • 枚举资料库、资料库身份、PlayParameters 可用性、同步资料库的风险 → 留在这里(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)——对身份进行聚类 + 在设备端检测视频片段
  • 检测一张图像中人脸的位置(边界框、特征点)、OCR、分割 → 调用 axiom-vision——逐图像检测,是不同的问题
  • 系统“照片”中的“人物”相簿 → 该相簿由系统拥有(PhotoKit);MediaIntelligence 会基于你管理的资源构建自己的索引 → 留在这里(通过 photo-library 访问资源)

反驳自我合理化

想法事实
“相机采集不过是设置 AVCaptureSession”相机需要处理中断、旋转和线程要求。
“只要尽早调用 startRunning(),相机启动就够快了”输出初始化是启动耗时的主要部分;iOS 26 的延迟启动可将预览显示时间缩短一半。
“我会用一个简单的 API 调用添加触觉反馈”触觉设计针对每种交互类型都有符合 HIG 的模式。
“ShazamKit 不过就是 SHSession + 一个委托”iOS 17+ 提供 SHManagedSession,可免去所有 AVAudioEngine 样板代码。
“Now Playing 信息不过就是设置元数据”远程命令、封面处理和状态同步有 15+ 个易踩问题。
“我会用 UIImagePickerController 选取照片”PHPicker/PhotosPicker 才是现代 API,无需权限。
“MediaPlayer 报告的播放列表成员比 MusicKit 少,所以同步不完整”这种差异来自结构,而非同步信号:它追踪的是没有本地表示的条目——检查过的五个播放列表中结果完全一致,在整个资料库范围内则相差一个。基于这一前提发布的保护逻辑会静默跳过 15 个播放列表中的 9 个,永远如此。请阅读 skills/music-library.md。
“读取音乐资料库不过就是发起一个 MusicLibraryRequest”在大型资料库中读取一个 MusicKit 属性,会导致本次运行中之后的每个 MusicKit 请求都无法恢复,且不会抛出错误。池耗尽只是症状,并非根本机制——一个从不接触该池的普通 Thread,也会同样导致 MusicKit 失效。分批处理请求会慢约 100 倍,并不更安全。
“Song.id 是可以存储的稳定键”同一资料库在不同设备上的 ID 格式 不同(一台设备上是 i.…,另一台上是纯数字)。切勿解析它,也切勿将它用作跨设备键。
“DockKit 不过就是配对一个支架”自定义控制需要禁用系统跟踪、处理倒置的底座状态,并应对两种不同的坐标原点。
“分组人脸不过就是 Vision 人脸检测”Vision 会检测单张图像中的人脸;MediaIntelligence 会在整个资料库中将人脸聚类为持久的人物(实体),并使用自己的工作目录和状态。
“投放到 Chromecast 就意味着要捆绑 Google Cast SDK”在 iOS 27 上,AVSystemRouting 会将非 AirPlay 路由作为系统路由公开——你只需采用一个 Apple API(观察事件、启动会话、驱动 playbackControl),而不是使用各厂商的 SDK。可能受欧盟地区限制——请进行地区限制判断并保留后备方案。
“我会通过信使广播当前时间来同步 SharePlay 播放”信使没有时钟。AVDelegatingPlaybackCoordinatorPlayCommand.hostClockTime 会提供一个绝对的 CMClockGetHostTimeClock() 开始时间;自行实现会很糟糕地重造启动屏障、seek 顺序、卡顿和中断处理。
“播放协调器会替我处理中断”只有 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 Agent

评论

支持 Markdown