摄像头拍摄(agent 用)

OpenClaw 支持面向 agent 工作流的摄像头拍摄

  • iOS 节点(通过 Gateway 配对):通过 node.invoke 拍摄照片jpg)或短视频片段mp4,可含音频)。
  • Android 节点(通过 Gateway 配对):通过 node.invoke 拍摄照片jpg)或短视频片段mp4,可含音频)。
  • macOS 应用(通过 Gateway 作为节点):通过 node.invoke 拍摄照片jpg)或短视频片段mp4,可含音频)。

所有摄像头访问都受用户设置控制。

iOS 节点

用户设置(默认开启)

  • iOS 设置 → CameraAllow Cameracamera.enabled
    • 默认:开启(缺少该配置项视为开启)。
    • 关闭时:camera.* 命令返回 CAMERA_DISABLED

命令(通过 Gateway node.invoke

  • camera.list

    • 返回:
      • devices{ id, name, position, deviceType } 数组
  • camera.snap

    • 参数:
      • facingfront|back(默认 front
      • maxWidth:数字(可选;iOS 节点默认 1600
      • quality0..1(可选;默认 0.9
      • format:目前仅 jpg
      • delayMs:数字(可选;默认 0
      • deviceId:字符串(可选;来自 camera.list
    • 返回:
      • format: "jpg"
      • base64: "<...>"
      • widthheight
    • 大小保护:照片会被重新压缩,确保 base64 不超过 5 MB。
  • camera.clip

    • 参数:
      • facingfront|back(默认 front
      • durationMs:数字(默认 3000,上限 60000
      • includeAudio:布尔值(默认 true
      • format:目前仅 mp4
      • deviceId:字符串(可选;来自 camera.list
    • 返回:
      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

前台要求

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 设置 → CameraAllow Cameracamera.enabled
    • 默认:开启(缺少该配置项视为开启)。
    • 关闭时:camera.* 命令返回 CAMERA_DISABLED

权限

  • Android 需要运行时权限:
    • camera.snapcamera.clip 都需要 CAMERA 权限。
    • camera.clipincludeAudio=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 Cameraopenclaw.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)。