Skip to content

相機擷取

OpenClaw 支援代理工作流程的 相機擷取

  • iOS 節點(透過 Gateway 配對):透過 node.invoke 擷取 照片 (jpg) 或 短影片片段 (mp4,可選音訊)。
  • Android 節點(透過 Gateway 配對):透過 node.invoke 擷取 照片 (jpg) 或 短影片片段 (mp4,可選音訊)。
  • macOS 應用程式(透過 Gateway 的節點):透過 node.invoke 擷取 照片 (jpg) 或 短影片片段 (mp4,可選音訊)。

所有相機存取權均受限於 使用者控制的設定

  • iOS 設定分頁 → 相機允許相機 (camera.enabled)
    • 預設值:on(缺少金鑰會被視為已啟用)。
    • 關閉時:camera.* 指令會傳回 CAMERA_DISABLED
  • camera.list

    • 回應承載:
      • devices: 陣列的 { id, name, position, deviceType }
  • camera.snap

    • 參數:
      • facing: front|back (預設值: front)
      • maxWidth: number (選填;iOS 節點上的預設值為 1600)
      • quality: 0..1 (選填;預設值為 0.9)
      • format: 目前為 jpg
      • delayMs: number (選填;預設值為 0)
      • deviceId: 字串 (選填;來自 camera.list)
    • 回應承載:
      • format: "jpg"
      • base64: "<...>"
      • width, height
    • Payload guard: 照片會被重新壓縮,以將 base64 payload 保持在 5 MB 以下。
  • camera.clip

    • 參數:
      • facing: front|back (預設值:front)
      • durationMs: number (預設值 3000,上限為 60000)
      • includeAudio: boolean (預設值 true)
      • format: 目前為 mp4
      • deviceId: string (可選;來自 camera.list)
    • 回應 payload:
      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

canvas.* 相同,iOS 節點僅允許在 前景 中執行 camera.* 指令。背景呼叫會傳回 NODE_BACKGROUND_UNAVAILABLE

取得附件最簡單的方法是透過 CLI 輔助程式,它會將解碼後的媒體寫入暫存檔案並列印 MEDIA:<path>

範例:

Terminal window
openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
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 預設為 both (雙向) 鏡頭,以提供代理程式兩個視角。
  • 除非您自行建構包裝程式,否則輸出檔案是暫時的 (位於 OS 暫存目錄中)。
  • Android Settings sheet → CameraAllow Camera (camera.enabled)
    • 預設值:on (缺少鍵值將視為已啟用)。
    • 關閉時:camera.* 指令會傳回 CAMERA_DISABLED
  • Android 需要執行時期權限:
    • 針對 camera.snapcamera.clip 兩者都需要 CAMERA
    • includeAudio=true 時,camera.clip 需要 RECORD_AUDIO

如果缺少權限,應用程式會盡可能提示;如果拒絕,camera.* 請求將會失敗並回傳 *_PERMISSION_REQUIRED 錯誤。

canvas.* 類似,Android 節點僅允許在前景執行 camera.* 指令。背景調用會傳回 NODE_BACKGROUND_UNAVAILABLE

Android 指令(透過 Gateway node.invoke

Section titled “Android 指令(透過 Gateway node.invoke)”
  • camera.list
    • 回應內容:
      • devices{ id, name, position, deviceType } 陣列

照片會重新壓縮,以將 base64 內容保持在 5 MB 以下。

macOS 伴隨應用程式提供一個勾選框:

  • Settings → General → Allow Cameraopenclaw.cameraEnabled
    • 預設值:關閉
    • 關閉時:相機請求會傳回「Camera disabled by user」。

使用主要的 openclaw CLI 在 macOS 節點上調用相機指令。

範例:

Terminal window
openclaw nodes camera list --node <id> # list camera ids
openclaw nodes camera snap --node <id> # prints 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 # prints MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<path> (legacy flag)
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 以下。
  • 相機和麥克風存取會觸發常見的 OS 權限提示(並且需要在 Info.plist 中加入使用說明字串)。
  • 影片片段設有上限(目前為 <= 60s),以避免節點內容過大(base64 開銷 + 訊息限制)。

若要錄製 螢幕 影片(而非相機),請使用 macOS 伴隨應用程式:

Terminal window
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>

備註:

  • 需要 macOS Screen Recording 權限(TCC)。