相机捕获(智能体)

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 }
  • camera.snap

    • 参数:
      • facingfront|back(默认:front
      • maxWidth:数字(可选;iOS node 上默认 1600
      • quality0..1(可选,默认 0.9
      • format:当前为 jpg
      • delayMs:数字(可选,默认 0
      • deviceId:字符串(可选,来自 camera.list
    • 响应 payload:
      • format: "jpg"
      • base64: "<...>"
      • width, height
    • Payload 保护:照片会被重新压缩以保持 base64 payload 在 5 MB 以下。
  • camera.clip

    • 参数:
      • facingfront|back(默认:front
      • durationMs:数字(默认 3000,限制最大 60000
      • includeAudio:布尔(默认 true
      • format:当前为 mp4
      • deviceId:字符串(可选,来自 camera.list
    • 响应 payload:
      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

前台要求

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.snapcamera.clip
    • RECORD_AUDIO 用于 camera.clipincludeAudio=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)。