摄像头拍摄(agent 用)
OpenClaw 支持面向 agent 工作流的摄像头拍摄:
- iOS 节点(通过 Gateway 配对):通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可含音频)。 - Android 节点(通过 Gateway 配对):通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可含音频)。 - macOS 应用(通过 Gateway 作为节点):通过
node.invoke拍摄照片(jpg)或短视频片段(mp4,可含音频)。
所有摄像头访问都受用户设置控制。
iOS 节点
用户设置(默认开启)
- iOS 设置 → Camera → Allow Camera(
camera.enabled)- 默认:开启(缺少该配置项视为开启)。
- 关闭时:
camera.*命令返回CAMERA_DISABLED。
命令(通过 Gateway 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。
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默认拍前后两张,给 agent 提供双视角。- 输出文件是临时的(在系统临时目录),除非你自己封装处理。
Android 节点
Android 用户设置(默认开启)
- Android 设置 → Camera → Allow Camera(
camera.enabled)- 默认:开启(缺少该配置项视为开启)。
- 关闭时:
camera.*命令返回CAMERA_DISABLED。
权限
- Android 需要运行时权限:
camera.snap和camera.clip都需要CAMERA权限。camera.clip在includeAudio=true时还需要RECORD_AUDIO权限。
权限缺失时,应用会尽量弹出授权提示;如果被拒绝,camera.* 请求会返回 *_PERMISSION_REQUIRED 错误。
Android 前台要求
和 canvas.* 一样,Android 节点只允许在前台使用 camera.* 命令。后台调用返回 NODE_BACKGROUND_UNAVAILABLE。
Android 命令(通过 Gateway node.invoke)
camera.list- 返回:
devices:{ id, name, position, deviceType }数组
- 返回:
大小保护
照片会被重新压缩,确保 base64 不超过 5 MB。
macOS 应用
用户设置(默认关闭)
macOS 伴侣应用提供了一个开关:
- Settings → General → Allow Camera(
openclaw.cameraEnabled)- 默认:关闭
- 关闭时:摄像头请求返回”Camera disabled by user”。
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)再拍摄。 - 照片会被重新压缩,确保 base64 不超过 5 MB。
安全与实际限制
- 摄像头和麦克风访问会触发系统权限提示(且需要在 Info.plist 中声明用途说明)。
- 视频片段有时长上限(目前
<= 60s),避免节点 payload 过大(base64 开销 + 消息大小限制)。
macOS 屏幕录制(系统级)
如果需要录制的是_屏幕_而非摄像头,使用 macOS 伴侣应用:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # 输出 MEDIA:<path>
说明:
- 需要 macOS 屏幕录制权限(TCC)。