相机捕获(智能体)
OpenClaw 支持相机捕获用于智能体工作流:
- iOS node(通过 Gateway 配对):通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。 - Android node(通过 Gateway 配对):通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。 - macOS 应用(通过 Gateway 的 node):通过
node.invoke捕获照片(jpg)或短视频片段(mp4,可选音频)。
所有相机访问都受用户控制设置限制。
iOS node
用户设置(默认开启)
- iOS 设置标签页 → 相机 → 允许相机(
camera.enabled)- 默认:开启(缺失键视为已启用)。
- 关闭时:
camera.*命令返回CAMERA_DISABLED。
命令(通过 Gateway node.invoke)
-
camera.list- 响应 payload:
devices:对象数组{ id, name, position, deviceType }
- 响应 payload:
-
camera.snap- 参数:
facing:front|back(默认:front)maxWidth:数字(可选;iOS node 上默认1600)quality:0..1(可选,默认0.9)format:当前为jpgdelayMs:数字(可选,默认0)deviceId:字符串(可选,来自camera.list)
- 响应 payload:
format: "jpg"base64: "<...>"width,height
- Payload 保护:照片会被重新压缩以保持 base64 payload 在 5 MB 以下。
- 参数:
-
camera.clip- 参数:
facing:front|back(默认:front)durationMs:数字(默认3000,限制最大60000)includeAudio:布尔(默认true)format:当前为mp4deviceId:字符串(可选,来自camera.list)
- 响应 payload:
format: "mp4"base64: "<...>"durationMshasAudio
- 参数:
前台要求
与 canvas.* 一样,iOS node 只允许 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 设置面板 → 相机 → 允许相机(
camera.enabled)- 默认:开启(缺失键视为已启用)。
- 关闭时:
camera.*命令返回CAMERA_DISABLED。
权限
- Android 需要运行时权限:
CAMERA用于camera.snap和camera.clip。RECORD_AUDIO用于camera.clip当includeAudio=true时。
如果权限缺失,应用会在可能时提示;如果被拒绝,camera.* 请求将失败并返回 *_PERMISSION_REQUIRED 错误。
Android 前台要求
与 canvas.* 一样,Android node 只允许 camera.* 命令在前台运行。后台调用返回 NODE_BACKGROUND_UNAVAILABLE。
Payload 保护
照片会被重新压缩以保持 base64 payload 在 5 MB 以下。
macOS 应用
用户设置(默认关闭)
macOS 伴侣应用暴露一个复选框:
- 设置 → 通用 → 允许相机(
openclaw.cameraEnabled)- 默认:关闭
- 关闭时:相机请求返回”相机已被用户禁用”。
CLI 辅助工具(node invoke)
使用主 openclaw CLI 在 macOS node 上调用相机命令。
示例:
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)以避免过大的 node payload(base64 开销 + 消息限制)。
macOS 屏幕视频(系统级)
用于屏幕视频(不是相机),使用 macOS 伴侣:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # 打印 MEDIA:<path>
注意:
- 需要 macOS 屏幕录制权限(TCC)。