摄像头捕捉(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 → CameraAllow Cameracamera.enabled

    • 默认:on
    • 若该 key 缺失,也视为 enabled。
    • 关闭后:camera.* 命令会返回 CAMERA_DISABLED

命令(通过 Gateway node.invoke

  • camera.list

    • 响应 payload:

      • devices:由 { id, name, position, deviceType } 组成的数组
  • camera.snap

    • 参数:

      • facingfront|back(默认:front
      • maxWidth:number(可选;iOS node 上默认 1600
      • quality0..1(可选;默认 0.9
      • format:当前为 jpg
      • delayMs:number(可选;默认 0
      • deviceId:string(可选;来自 camera.list
    • 响应 payload:

      • format: "jpg"
      • base64: "<...>"
      • widthheight
    • Payload guard:照片会被重新压缩,以确保 base64 payload 小于 5 MB。
  • camera.clip

    • 参数:

      • facingfront|back(默认:front
      • durationMs:number(默认 3000,最大会被限制到 60000
      • includeAudio:boolean(默认 true
      • format:当前为 mp4
      • deviceId:string(可选;来自 camera.list
    • 响应 payload:

      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

前台要求

canvas.* 一样,iOS node 仅允许在前台执行 camera.* 命令。后台调用会返回 NODE_BACKGROUND_UNAVAILABLE

CLI helper(临时文件 + MEDIA)

获取附件最简单的方式是使用 CLI helper。它会把解码后的媒体写入临时文件,并输出 MEDIA:<path>

示例:

  1. openclaw nodes camera snap --node <id> # 默认:同时拍 front + back(输出 2 行 MEDIA)
  2. openclaw nodes camera snap --node <id> --facing front
  3. openclaw nodes camera clip --node <id> --duration 3000
  4. openclaw nodes camera clip --node <id> --no-audio

说明:

  • nodes camera snap 默认会拍摄两个方向,让 agent 同时拿到 front 和 back 视角。
  • 输出文件是临时文件(位于 OS temp directory),除非你自行封装 wrapper。

Android node

Android 用户设置(默认开启)

  • Android Settings sheet → CameraAllow Cameracamera.enabled

    • 默认:on
    • 若该 key 缺失,也视为 enabled。
    • 关闭后:camera.* 命令会返回 CAMERA_DISABLED

权限

  • Android 需要运行时权限:

    • CAMERA:用于 camera.snapcamera.clip
    • RECORD_AUDIO:当 camera.clipincludeAudio=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 Cameraopenclaw.cameraEnabled

    • 默认:off
    • 关闭时:camera 请求会返回 “Camera disabled by user”。

CLI helper(node invoke)

使用主 openclaw CLI 在 macOS node 上调用 camera 命令。

示例:

  1. openclaw nodes camera list --node <id> # 列出 camera id
  2. openclaw nodes camera snap --node <id> # 输出 MEDIA:<path>
  3. openclaw nodes camera snap --node <id> --max-width 1280
  4. openclaw nodes camera snap --node <id> --delay-ms 2000
  5. openclaw nodes camera snap --node <id> --device-id <id>
  6. openclaw nodes camera clip --node <id> --duration 10s # 输出 MEDIA:<path>
  7. openclaw nodes camera clip --node <id> --duration-ms 3000 # 输出 MEDIA:<path>(旧参数)
  8. openclaw nodes camera clip --node <id> --device-id <id>
  9. 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:

  1. openclaw nodes screen record --node <id> --duration 10s --fps 15 # 输出 MEDIA:<path>