相機擷取(agent)

OpenClaw 支援 agent 工作流程中的相機擷取功能:

  • iOS 節點(透過 Gateway 配對):透過 node.invoke 拍攝照片jpg)或錄製短片mp4,可含音訊)。
  • Android 節點(透過 Gateway 配對):透過 node.invoke 拍攝照片jpg)或錄製短片mp4,可含音訊)。
  • macOS 應用程式(透過 Gateway 作為節點):透過 node.invoke 拍攝照片jpg)或錄製短片mp4,可含音訊)。

所有相機存取都受使用者控制的設定保護。

iOS 節點

使用者設定(預設開啟)

  • iOS 設定頁 → 相機允許相機camera.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 payload 不超過 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 設定頁 → 相機允許相機camera.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 payload 不超過 5 MB。

macOS 應用程式

使用者設定(預設關閉)

macOS 伴隨應用程式提供一個核取方塊:

  • 設定 → 一般 → 允許相機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)再擷取。
  • 照片 payload 會重新壓縮,確保 base64 不超過 5 MB。

安全性與實際限制

  • 相機與麥克風存取會觸發一般作業系統的權限提示(且 Info.plist 中需包含使用說明字串)。
  • 影片錄製有長度上限(目前 <= 60s),避免節點 payload 過大(base64 額外開銷 + 訊息大小限制)。

macOS 螢幕錄影(系統層級)

若需_螢幕_錄影(非相機),請使用 macOS 伴隨應用程式:

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

注意:

  • 需要 macOS 螢幕錄製權限(TCC)。