摄像头捕获(代理)
OpenClaw 支持在代理工作流中使用摄像头捕获功能:- iOS 节点(通过网关配对):可通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。 - Android 节点(通过网关配对):可通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。 - macOS 应用程序(通过网关连接的节点):可通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。
iOS节点
用户设置(默认开启)
- iOS 设置标签 → 相机 → 允许相机(
camera.enabled)- 默认:开启(缺少该键被视为已启用)。
- 关闭时:
camera.*命令将返回CAMERA_DISABLED。
命令(通过网关 node.invoke)
-
camera.list- 响应负载:
devices:包含{ id, name, position, deviceType }的数组
- 响应负载:
-
camera.snap- 参数:
facing:front|back(默认:front)maxWidth:数字(可选;iOS 节点上的默认值为1600)quality:0..1(可选;默认值为0.9)format:当前为jpgdelayMs:数字(可选;默认值为0)deviceId:字符串(可选;来自camera.list)
- 响应负载:
format: "jpg"base64: "<...>"width、height
- 负载保护:照片会被重新压缩,以确保 base64 负载不超过 5 MB。
- 参数:
-
camera.clip- 参数:
facing:front|back(默认:front)durationMs:数字(默认值为3000,上限为60000)includeAudio:布尔值(默认为true)format:当前为mp4deviceId:字符串(可选;来自camera.list)
- 响应负载:
format: "mp4"base64: "<...>"durationMshasAudio
- 参数:
前台要求
与canvas.* 类似,iOS 节点仅允许在前台执行 camera.* 命令。后台调用将返回 NODE_BACKGROUND_UNAVAILABLE。
__HEADING_0__CLI 辅助工具(临时文件 + 媒体)
获取附件最简单的方式是使用 CLI 辅助工具,它会将解码后的媒体写入临时文件,并打印 MEDIA:<path>。
示例:
nodes camera snap默认同时启用前后镜头,以便代理从两个视角获取信息。- 输出文件是临时文件(位于操作系统的临时目录中),除非您自行构建封装器。
安卓节点
用户设置(默认开启)
- 安卓设置表 → 相机 → 允许相机(
camera.enabled)- 默认:开启(缺少该键被视为已启用)。
- 关闭时:
camera.*命令将返回CAMERA_DISABLED。
权限
- 安卓需要运行时权限:
CAMERA用于camera.snap和camera.clip。RECORD_AUDIO用于camera.clip当includeAudio=true时。
camera.* 请求将因 *_PERMISSION_REQUIRED 错误而失败。
前台要求
与canvas.* 类似,Android 节点仅允许在前台执行 camera.* 命令。后台调用将返回 NODE_BACKGROUND_UNAVAILABLE。
负载保护
照片会被重新压缩,以确保Base64负载不超过5 MB。macOS 应用程序
用户设置(默认关闭)
macOS 配套应用程序提供一个复选框:- 设置 → 通用 → 允许相机(
openclaw.cameraEnabled)- 默认:关闭
- 关闭时:相机请求将返回“相机已被用户禁用”。
openclawCLI调用相机命令。
示例:
openclaw nodes camera snap默认为maxWidth=1600,除非被覆盖。- 在 macOS 上,
camera.snap在预热/曝光稳定后等待delayMs(默认 2000 毫秒)再进行拍摄。 - 照片负载会被重新压缩,以确保 base64 不超过 5 MB。
安全性 + 实际限制
- 摄像头和麦克风访问会触发常规的操作系统权限提示,并且需要在 Info.plist 中提供使用说明字符串。
- 视频片段设有上限(当前为
<= 60s),以避免节点负载过高(包括 base64 编码开销和消息大小限制)。
macOS 屏幕录制(操作系统级别)
对于屏幕视频(而非摄像头),请使用 macOS 配套应用程序:- 需要 macOS 的屏幕录制权限(TCC)。