node.invoke 拍摄照片(jpg)或短视频片段(mp4,可选音频)。
所有摄像头访问都受每个平台上由用户控制的设置约束。
iOS 节点
iOS 用户设置
- iOS 设置标签页 → 摄像头 → 允许摄像头(
camera.enabled)。- 默认值:开启(缺少键名会被视为已启用)。
- 关闭时:
camera.*命令返回CAMERA_DISABLED。
iOS 命令(通过 Gateway 网关 node.invoke)
-
camera.list- 响应有效载荷:
devices—{ id, name, position, deviceType }数组。
- 响应有效载荷:
-
camera.snap- 参数:
facing:front|back(默认:front)maxWidth:数字(可选;默认1600)quality:0..1(可选;默认0.9,限制在[0.05, 1.0])format:目前为jpgdelayMs:数字(可选;默认0,内部上限为10000)deviceId:字符串(可选;来自camera.list)
- 响应有效载荷:
format: "jpg"、base64、width、height。 - 有效载荷保护:照片会被重新压缩,使 base64 编码后的有效载荷保持在 5MB 以下。
- 参数:
-
camera.clip- 参数:
facing:front|back(默认:front)durationMs:数字(默认3000,限制在[250, 60000])includeAudio:布尔值(默认true)format:目前为mp4deviceId:字符串(可选;来自camera.list)
- 响应有效载荷:
format: "mp4"、base64、durationMs、hasAudio。
- 参数:
iOS 前台要求
与canvas.* 一样,iOS 节点仅允许在前台执行 camera.* 命令。后台调用返回 NODE_BACKGROUND_UNAVAILABLE。
CLI 辅助工具
获取媒体文件的最简单方式是使用 CLI 辅助工具,它会将解码后的媒体写入临时文件并打印保存路径。nodes camera snap 默认使用 --facing both,同时捕获前置和后置视角,以便为智能体提供两个视图;如果设置了 --device-id,请传入单一明确的朝向(设置 --device-id 时会拒绝 both)。输出文件是临时文件(位于操作系统临时目录中),除非你构建自己的封装器。
Android 节点
Android 用户设置
- Android 设置面板 → 摄像头 → 允许摄像头(
camera.enabled)。- 全新安装默认关闭。 早于此设置的现有安装会迁移为开启,因此升级不会静默丢失先前可用的摄像头访问。
- 关闭时:
camera.*命令返回CAMERA_DISABLED: enable Camera in Settings。
权限
camera.snap和camera.clip都需要CAMERA;缺少/拒绝权限会返回CAMERA_PERMISSION_REQUIRED。- 当
includeAudio为true时,camera.clip需要RECORD_AUDIO;缺少/拒绝权限会返回MIC_PERMISSION_REQUIRED。
Android 前台要求
与canvas.* 一样,Android 节点仅允许在前台执行 camera.* 命令。后台调用返回 NODE_BACKGROUND_UNAVAILABLE: command requires foreground。
Android 命令(通过 Gateway 网关 node.invoke)
-
camera.list- 响应有效载荷:
devices—{ id, name, position, deviceType }数组。
- 响应有效载荷:
-
camera.snap- 参数:
facing(front|back,默认front)、quality(默认0.95,限制在[0.1, 1.0])、maxWidth(默认1600)、deviceId(可选;未知 id 会以INVALID_REQUEST失败)。 - 响应有效载荷:
format: "jpg"、base64、width、height。 - 有效载荷保护:重新压缩以使 base64 保持在 5MB 以下(与 iOS 预算相同)。
- 参数:
-
camera.clip- 参数:
facing(默认front)、durationMs(默认3000,限制在[200, 60000])、includeAudio(默认true)、deviceId(可选)。 - 响应有效载荷:
format: "mp4"、base64、durationMs、hasAudio。 - 有效载荷保护:原始 MP4 在 base64 编码前上限为 18MB;超大片段会以
PAYLOAD_TOO_LARGE失败(减小durationMs后重试)。
- 参数:
macOS 应用
macOS 用户设置
macOS 配套应用提供一个复选框:- 设置 → 通用 → 允许摄像头(
openclaw.cameraEnabled)。- 默认值:关闭。
- 关闭时:摄像头请求返回
CAMERA_DISABLED: enable Camera in Settings。
CLI 辅助工具(节点调用)
使用主openclaw CLI 在 macOS 节点上调用摄像头命令。
- 除非被覆盖,否则
openclaw nodes camera snap默认使用maxWidth=1600。 camera.snap在预热/曝光稳定后等待delayMs(默认 2000ms,限制在[0, 10000])再捕获。- 照片有效载荷会被重新压缩,使 base64 保持在 5MB 以下。
安全性 + 实际限制
- 摄像头和麦克风访问会触发通常的操作系统权限提示(并且需要
Info.plist中的用途字符串)。 - 视频片段上限为 60s,以避免节点有效载荷过大(base64 开销加上消息限制)。