Communitygithub.com

mateodkaiser-bit/claude-camera

让Claude通过iPhone(连续互通相机)或Mac摄像头以极低的Token成本观察物理世界。支持快照、对比拼图、静默监听变化、定时拍摄、3D打印监控、操作步骤记录、演示视频片段和延时摄影。

claude-camera 是什么?

Claude Camera是一个专为macOS设计的AI技能,它使Claude能够通过iPhone的连续互通相机或Mac内置摄像头直接观察物理世界,而无需用户手动拍照上传。该技能的核心优势在于极高的Token效率——所有图像在传输前都会自动裁剪和缩小,一张512像素的快照仅消耗约260个Token,远低于手动粘贴照片的1600 Token。它支持多种拍摄模式:即时快照、多帧对比拼图、静默监听直到场景变化、可自定义间隔的定时拍摄(5分钟到60分钟),以及针对3D打印的智能监控——能自动定位打印件并在打印头移开时拍摄。此外,还提供操作步骤记录(生成可编译为幻灯片或视频的步骤文档)、演示视频录制(支持音频)和延时摄影功能。适用于依赖物理实物的任务:检查3D打印进度、原型验证、装配记录、材料测试、机械演示等。首次使用需运行`setup`命令自动安装ffmpeg、构建辅助应用并引导用户完成相机权限和连续互通相机设置。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mateodkaiser-bit/claude-camera/tree/HEAD/skills/camera

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

摄像头

${CLAUDE_SKILL_DIR}/cam.py:使用标准 Python 库加 ffmpeg,仅限 macOS。每张图像会在 Claude 看到之前进行裁剪和缩小:一张粘贴的手机照片大约消耗 1,600 token 并保留在上下文中,而一张 512 像素的快照仅消耗约 260 token。每个命令会打印保存路径、大小和 token 消耗;仅当你真正需要查看时才 读取 该路径。

首次运行(新用户或新 Mac)

如果 ~/.claude/camera-state/config.json 不存在,或者任何捕获失败,请运行:

python3 ${CLAUDE_SKILL_DIR}/cam.py setup

它会检查 macOS,如果缺失则通过 Homebrew 安装 ffmpeg,构建 ClaudeCam 辅助应用,列出摄像头,拍摄一帧测试图像(这会触发 macOS 摄像头权限提示),并保存配置。它会打印 READY,或带编号的 YOU: 步骤。用简单语言将这些步骤转述给用户,等待,然后重新运行直到显示 READY。 不要在没有说明原因的情况下就退而求其次要求提供照片。

用户需要了解的内容(setup 也会解释):一部运行 iOS 16+ 的 iPhone XR 或更新机型,使用相同的 Apple ID,开启 Wi-Fi 和蓝牙,并启用连续互通相机;手机锁定、静止并连接充电器;点击“允许”以使“ClaudeCam 想要访问摄像头”。Mac 摄像头可作为备用(--cam mac)。

根据任务选择命令

用户想要...命令备注
快速查看snap [--crop x,y,w,h] [--grid 4x3]512 像素。首次查看后裁剪至主体
对比状态sheet --n 4 --every 30sN 帧平铺成一张图像
被告知某事发生watch --every 30s --until-change静默直到变化发生;会命名区域
随时间推移的进度照片timelapse --every 15m --for 6h每次构图相同
监控 3D 打印print locate → print use <ids> → print monitor --every 5m --for 3h当打印头清晰时拍摄
记录组装/构建过程step "将轴承压入轮毂" --project NAME [--note "..."]照片加上 steps.md 中的编号条目
产品演示视频clip --seconds 20 [--fps 60] [--audio] --project NAMEMP4 加关键帧快照表
从图片生成视频compile <文件夹> [--match 'x-*.jpg'] [--fps 8]延时摄影、监控或步骤 → MP4
检查设置doctor / setup / devices

如需为任何定时操作设置间隔菜单:5m · 10m · 15m · 30m · 45m · 60m,或任意 90s / 2h / 48h(纯数字表示秒)。提供一个合理的默认值:打印用 5m,固化、胶合或干燥用 15–30m,持续数天的缓慢过程用 60m。

长时间运行的任务(timelapse,watch,print monitor):使用 run_in_background 运行,命令为 python3 -u ... | tee <out>/run.log。它们每帧打印一行,并在某帧失败后继续运行。不要读取每张图像:在日志中搜索 failed / WARNING,当某行看起来异常时查看,并在结束时查看。

项目。 --project NAME 会在当前目录或父目录中查找 projects/NAME/。如果在项目文件夹内运行,则无需该标志即可工作。输出会存入 projects/NAME/media/{cam,steps,clips}/。如果没有项目,输出会存入 ~/Pictures/claude-cam/<date>/,而 --out DIR 会覆盖两者。在完成一系列 step 或演示 clip 后,可主动提议在项目的日志(如果存在)中添加一行,链接到生成的媒体文件。

设计与原型制作中的使用范例

工业设计、产品设计和创客工作流程,映射到上述命令。当存在项目文件夹时,务必添加 --project NAME,以便媒体文件随项目一起存储。

流程中的时刻操作
草图捕捉(纸质草图、马克笔)snap --cam desk --width 1600 --label sketch-<主题>。桌面视图可以俯视看到桌面上的纸张。每个概念使用一个标签,以便迭代结果按顺序排列
草图或模型迭代墙在 --match 'sketch-*' 集合上以 1–2 fps 运行 compile,或使用 sheet,并排比较变体
泡沫、粘土或纸板模型迭代step "v3:握把收窄 4 毫米" --note "手感更好,拇指托位置偏低",每次迭代一个步骤。steps.md 成为设计依据的记录
CMF 色样(颜色、材质、表面处理)桌面视图,均匀的自然光,画面中包含白色或灰色卡纸;snap --width 1280 --label cmf-<名称>。每次光照条件相同,否则无法比较颜色
配合与公差检查snap --crop ... --width 1024,画面中包含尺子或卡尺。将数值写入项目的公差记录中,而不仅仅是照片
人机工程学:手持和使用中照片用户改变握持姿势时,sheet --n 6 --every 3s:一张图像包含所有姿势
转盘产品拍摄手机固定在支架上,产品放在懒人转盘上;用户每听到一次提示音旋转 45°,运行 sheet --n 8 --every 4s。如需视频片段:clip --seconds 20 --fps 60,缓慢旋转一圈
机械或演示视频clip --seconds 15 --fps 60 [--audio];检查关键帧快照表;如果构图不佳则重新拍摄。使用 MP4 进行 Remotion 或其他编辑
组装或构建指南按顺序对每个操作执行 step(--cam desk);steps.md 就是指南;compile --fps 1 生成幻灯片
胶合、固化、干燥、降解timelapse --every 15m --for 24h(后台运行);结束时运行 compile
打印件下方的 3D 打印模式
用户测试或协同设计会议clip --audio 仅在获得参与者明确同意的情况下,并说明录制内容和保存位置。优先拍摄手部和产品而非面部。将录制内容保存在项目文件夹内,切勿放在共享或公共位置

首先设置好拍摄场景

在第一次真正拍摄前,针对此任务具体告诉用户如何放置手机:使用哪个摄像头、手机放在哪里、距离多远、画面中必须包含什么,以及一个比例参考。

  • 桌面视图(--cam desk):手机夹在 Mac 屏幕顶部,后置摄像头朝向用户。这提供了桌面的俯视图,非常适合记录桌面上的零件 step。
  • 主摄像头(--cam phone):使用任何支架或三脚架对准主体。对于打印机,放置得更高更远,约 45° 角,这样打印头就不会遮挡零件。
  • 均匀的光线,画面中不要有窗户(自动曝光漂移会被视为变化)。每次都使用相同的位置(贴胶带标记),并在尺寸重要时在画面中放入尺子或已知物体,因为未缩放的图像无法提供毫米级信息。
  • 通过连续互通相机没有光学变焦:“变焦”意味着在 1920×1440 的原始帧上使用 --crop 配合更大的 --width。要获取真正的细节,需要将手机移近。

然后拍摄一张完整快照,找到主体,并在本次会话的其余部分保留该 --crop。如果某个数字(如打印机 API 读数、测量值)已经回答了问题,则跳过图像。对于重复检查,将查看任务委托给子代理(“读取 <路径>;用一句话回答 <问题>”):它的图像永远不会进入主上下文。

文档与视频(cam_studio.py)

  • step:1280 像素照片(文档质量,如果读取则约 1,600 token;不要仅仅为了检查而读取它们)。编号为 NN-简称.jpg 的文件加上包含标题、图像和注释的 steps.md,构成一份可随时分享的组装指南。对于桌面上的零件,使用 --cam desk。将配合问题、故障和公差放在 --note 中。
  • clip:使用 H.264(CRF 20)录制,并可选地从同一手机的麦克风录制 AAC。它会跳过手机大约 5 秒的预热时间。iPhone 模式:1920×1080 或 1920×1440,30 或 60 fps。之后,仅读取关键帧快照表(6 帧,约 600 token)以判断构图和动作。MP4 文件可用于 Remotion 或其他编辑。
  • compile:以 --fps 指定的帧率通过拼接解复用器生成幻灯片;不同大小的帧会以白色信箱模式显示。8 fps 适合延时摄影;1–2 fps 适合步骤幻灯片。

3D 打印模式(cam_print.py)

  1. print locate 录制约 40 秒,并构建一张第 25 百分位合成图像(逐像素取最暗的四分之一时刻),这样即使打印头超过一半时间遮挡了打印件,打印件仍然可见。中位数不行:打印头在其正在打印的零件上方停留时间过长。它会框选出暗色背景上的候选区域,并根据周围床身的明亮程度进行排序。标注后的 640×480 图像消耗约 410 token。
  2. print use 1,2,4:由你决定哪些框是打印件。 Logo 字母、皮带、导轨夹和光杆阴影都能通过像素测试,而且排序有时会先把光杆阴影排在前面。如果模棱两可,拍摄一张带网格的 snap 并匹配单元格。如果没有任何区域是打印件,请用户重新对准。选区会按照 --grow(默认 0.15;当光杆阴影触及零件时使用 0.08)扩大,以捕获微弱的相邻零件。
  3. print shot / print monitor 以 2 fps 流式传输,并根据当前可见的打印像素份额为每帧评分。它们会跳过模糊帧并保存原生分辨率裁剪。打印过程中,打印头可能永远不会完全离开(60–75% 可见是正常的);要获得清晰的底板图像,请在打印结束后拍摄。假设深色打印件位于浅色底板上;尚未实现浅色在深色背景上的检测。

它能够自动适应移动过的手机。 每轮会将其前 3 秒与保存的视图进行对齐。轻微位移(最佳匹配误差 ≤ 22)会被自动跟踪(视图偏移 +dx,+dy px)。重新对准(误差 > 22)会显示 摄像头移动:monitor 会重新运行 locate,并以 需要确认 退出,任务结束时通知你;读取定位图像,运行 print use,然后重新启动。录制文件的校准结果:未移动 15.8,轻微位移后对齐 15.9,不同场景 28.9(仅打印头移动就会增加约 15)。

可靠性注意事项(已验证 2026-10-15)

  • macOS 权限授予给 ClaudeCam。 Claude Code 作为其自有辅助包运行,该包声明不调用摄像头,因此 macOS 会静默拒绝将其启动的任何子进程(ffmpeg 直接挂起)访问摄像头,并且永远不会在“隐私与安全性”>“摄像头”下列出。cam.py 通过 ~/Applications/ClaudeCam.app(由 setup/install-helper 构建)启动 ffmpeg 进程,使用 open -W -g -n -a;macOS 会向 ClaudeCam 询问一次权限。
  • 之前工作正常现在却显示“无帧” 是连续互通流卡住了,不是权限问题。解锁手机一次,然后锁上,将其静止放在充电器上,并确保没有其他应用正在使用它。即使 devices 仍然列出 iPhone,也不意味着帧在流动。
  • 手机需要大约 5 秒来连接和曝光(1.5 秒会导致全黑且无错误),因此它会跳过 150 帧;Mac 摄像机会跳过 45 帧。设备索引在调用之间会变化,因此设备通过名称选择。ffmpeg 默认的 29.97 fps 被拒绝,因此强制使用 30/60 fps,nv12 格式。
  • 卡死:如果一轮中 25 秒没有帧,则放弃并重试一次。卡死的 ffmpeg 会忽略 SIGTERM(有一次它占用了摄像头 9 分钟),因此 ff_stop 会升级到 SIGKILL,并且每轮监控会首先运行 pkill -9 -f cam-shot-。终止 open 进程永远不会停止 ClaudeCam 内部的 ffmpeg。
  • 模糊与冻结:自动对焦搜寻曾产生过完全模糊的“最佳”帧。拍摄过程会跳过质量低于本轮最清晰帧 60% 的帧,并打印 警告:模糊 / 警告:流冻结。
  • 需要锁定/休眠(连续互通相机仅从锁定的手机传输流)。在电池供电或低电量模式下,从空闲状态唤醒手机速度较慢,因此请要求连接充电器。手机被移动是真正的风险:要求用户通过 snap 查看画面,而不是拿起手机。
  • open -W 始终返回 0,因此成功意味着输出文件存在。Homebrew 版本的 ffmpeg 没有 drawtext,因此时间戳和网格标签以文本形式打印。使用 --input <图像|视频> 回放录制文件进行测试,无需摄像头(状态存储在 camera-state/file/ 下)。
  • Figma:使用带有 nodeIds 的 upload_assets 放入占位矩形,其大小根据图像的宽高比调整,适用于将摄像头图像放入画框中。

相关技能