摄像头捕捉(agent)
OpenClaw 支持在 agent 工作流中进行 camera capture:
- iOS node(通过 Gateway 配对):可通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可选带音频)。 - Android node(通过 Gateway 配对):可通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可选带音频)。 - macOS app(作为经 Gateway 连接的 node):可通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可选带音频)。
所有相机访问都受用户可控设置保护。
iOS node
用户设置(默认开启)
iOS Settings tab → Camera → Allow Camera(
camera.enabled)- 默认:on
- 若该 key 缺失,也视为 enabled。
- 关闭后:
camera.*命令会返回CAMERA_DISABLED。
命令(通过 Gateway node.invoke)
camera.list响应 payload:
devices:由{ id, name, position, deviceType }组成的数组
camera.snap参数:
facing:front|back(默认:front)maxWidth:number(可选;iOS node 上默认1600)quality:0..1(可选;默认0.9)format:当前为jpgdelayMs:number(可选;默认0)deviceId:string(可选;来自camera.list)
响应 payload:
format: "jpg"base64: "<...>"width、height
- Payload guard:照片会被重新压缩,以确保 base64 payload 小于 5 MB。
camera.clip参数:
facing:front|back(默认:front)durationMs:number(默认3000,最大会被限制到60000)includeAudio:boolean(默认true)format:当前为mp4deviceId:string(可选;来自camera.list)
响应 payload:
format: "mp4"base64: "<...>"durationMshasAudio
前台要求
和 canvas.* 一样,iOS node 仅允许在前台执行 camera.* 命令。后台调用会返回 NODE_BACKGROUND_UNAVAILABLE。
CLI helper(临时文件 + MEDIA)
获取附件最简单的方式是使用 CLI helper。它会把解码后的媒体写入临时文件,并输出 MEDIA:<path>。
示例:
openclaw nodes camera snap --node <id> # 默认:同时拍 front + back(输出 2 行 MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audio
说明:
nodes camera snap默认会拍摄两个方向,让 agent 同时拿到 front 和 back 视角。- 输出文件是临时文件(位于 OS temp directory),除非你自行封装 wrapper。
Android node
Android 用户设置(默认开启)
Android Settings sheet → Camera → Allow Camera(
camera.enabled)- 默认:on
- 若该 key 缺失,也视为 enabled。
- 关闭后:
camera.*命令会返回CAMERA_DISABLED。
权限
Android 需要运行时权限:
CAMERA:用于camera.snap和camera.clipRECORD_AUDIO:当camera.clip且includeAudio=true时需要
如果缺少权限,app 会在可能时发起提示;若用户拒绝,camera.* 请求会以 *_PERMISSION_REQUIRED 错误失败。
Android 前台要求
和 canvas.* 一样,Android node 仅允许在前台执行 camera.* 命令。后台调用会返回 NODE_BACKGROUND_UNAVAILABLE。
Android 命令(通过 Gateway node.invoke)
camera.list响应 payload:
devices:由{ id, name, position, deviceType }组成的数组
Payload guard
照片会被重新压缩,以确保 base64 payload 小于 5 MB。
macOS app
用户设置(默认关闭)
macOS companion app 提供了一个复选框:
Settings → General → Allow Camera(
openclaw.cameraEnabled)- 默认:off
- 关闭时:camera 请求会返回 “Camera disabled by user”。
CLI helper(node invoke)
使用主 openclaw CLI 在 macOS node 上调用 camera 命令。
示例:
openclaw nodes camera list --node <id> # 列出 camera idopenclaw nodes camera snap --node <id> # 输出 MEDIA:<path>openclaw nodes camera snap --node <id> --max-width 1280openclaw nodes camera snap --node <id> --delay-ms 2000openclaw 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中配置 usage strings)。 - 视频片段长度有上限(当前
<= 60s),以避免 node payload 过大(base64 开销 + message limits)。
macOS screen video(OS 级别)
如果要录制屏幕视频(不是 camera),请使用 macOS companion:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # 输出 MEDIA:<path>
