Camera capture(相机捕获)(代理)
OpenClaw 支持代理工作流程的相机捕获:
- iOS node(iOS 节点)(通过 Gateway(网关)配对):通过 node.invoke 捕获照片(jpg)或短视频片段(mp4,带可选音频)。
- Android node(Android 节点)(通过 Gateway(网关)配对):通过 node.invoke 捕获照片(jpg)或短视频片段(mp4,带可选音频)。
- macOS app(通过 Gateway(网关)的节点):通过 node.invoke 捕获照片(jpg)或短视频片段(mp4,带可选音频)。
所有相机访问都受用户控制的设置门控。
iOS node(iOS 节点)
用户设置(默认开启)
- iOS Settings(设置)选项卡 → Camera(相机) → Allow Camera(允许相机)(camera.enabled)
- 默认:开启(缺少键被视为启用)。
- 关闭时:camera.* 命令返回 CAMERA_DISABLED。
命令(通过 Gateway(网关)node.invoke)
-
camera.list
- 响应 payload:
- devices:{ id, name, position, deviceType } 数组
- 响应 payload:
-
camera.snap
- 参数:
- facing:front|back(默认:front)
- maxWidth:number(可选;iOS 节点上默认 1600)
- quality:0..1(可选;默认 0.9)
- format:目前为 jpg
- delayMs:number(可选;默认 0)
- deviceId:string(可选;来自 camera.list)
- 响应 payload:
- format: "jpg"
- base64: "<...>"
- width、height
- Payload 防护:照片被重新压缩以将 base64 payload 保持在 5 MB 以下。
- 参数:
-
camera.clip
- 参数:
- facing:front|back(默认:front)
- durationMs:number(默认 3000,最大限制为 60000)
- includeAudio:boolean(默认 true)
- format:目前为 mp4
- deviceId:string(可选;来自 camera.list)
- 响应 payload:
- format: "mp4"
- base64: "<...>"
- durationMs
- hasAudio
- 参数:
前台要求
像 canvas.* 一样,iOS 节点仅在前台允许 camera.* 命令。后台调用返回 NODE_BACKGROUND_UNAVAILABLE。
CLI 助手(临时文件 + MEDIA)
获取附件的最简单方法是通过 CLI 助手,它将解码的媒体写入临时文件并打印 MEDIA:<path>。
示例:
openclaw nodes camera snap --node <id> # 默认:前后摄像头(2 个 MEDIA 行)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio
注意事项:
- nodes camera snap 默认为两个朝向,为代理提供两个视图。
- 输出文件是临时的(在 OS 临时目录中),除非你构建自己的包装器。
Android node(Android 节点)
用户设置(默认开启)
- Android Settings(设置)表 → Camera(相机) → Allow Camera(允许相机)(camera.enabled)
- 默认:开启(缺少键被视为启用)。
- 关闭时:camera.* 命令返回 CAMERA_DISABLED。
权限
- Android 需要运行时权限:
- CAMERA 用于 camera.snap 和 camera.clip。
- RECORD_AUDIO 用于 camera.clip,当 includeAudio=true 时。
如果缺少权限,应用将在可能时提示;如果被拒绝,camera.* 请求失败,并显示 *_PERMISSION_REQUIRED 错误。
前台要求
像 canvas.* 一样,Android 节点仅在前台允许 camera.* 命令。后台调用返回 NODE_BACKGROUND_UNAVAILABLE。
Payload 防护
照片被重新压缩以将 base64 payload 保持在 5 MB 以下。
macOS app
用户设置(默认关闭)
macOS 配套应用公开了一个复选框:
- Settings(设置)→ General(常规)→ Allow Camera(允许相机)(openclaw.cameraEnabled)
- 默认:关闭
- 关闭时:相机请求返回"用户禁用了相机"。
CLI 助手(node invoke)
使用主 openclaw CLI 在 macOS 节点上调用相机命令。
示例:
openclaw nodes camera list --node <id> # 列出相机 ID
openclaw nodes camera snap --node <id> # 打印 MEDIA:<path>
openclaw nodes camera snap --node <id> --max-width 1280
openclaw nodes camera snap --node <id> --delay-ms 2000
openclaw nodes camera snap --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --duration 10s # 打印 MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # 打印 MEDIA:<path>(遗留标志)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
注意事项:
- openclaw nodes camera snap 默认为 maxWidth=1600,除非覆盖。
- 在 macOS 上,camera.snap 在捕获之前等待 delayMs(默认 2000ms)以预热/曝光稳定。
- 照片 payload 被重新压缩以将 base64 保持在 5 MB 以下。
安全 + 实际限制
- 相机和麦克风访问触发通常的 OS 权限提示(并需要 Info.plist 中的使用字符串)。
- 视频片段有上限(目前 <= 60s),以避免超大节点 payload(base64 开销 + 消息限制)。
macOS screen video(macOS 屏幕视频)(OS 级别)
对于屏幕视频(非相机),请使用 macOS 配套应用:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # 打印 MEDIA:<path>
注意事项:
- 需要 macOS Screen Recording(屏幕录制) 权限(TCC)。