node.invoke 擷取照片 (jpg) 或短影片片段(mp4,可選擇包含音訊)。
所有相機存取都會受每個平台上由使用者控制的設定限制。
iOS 節點
iOS 使用者設定
- iOS 設定分頁 → 相機 → 允許相機 (
camera.enabled)。- 預設:開啟(缺少鍵值會被視為已啟用)。
- 關閉時:
camera.*命令會傳回CAMERA_DISABLED。
iOS 命令(透過閘道 node.invoke)
-
camera.list- 回應承載資料:
devices—{ id, name, position, deviceType }的陣列。
- 回應承載資料:
-
camera.snap- 參數:
facing:front|back(預設:front)maxWidth: number(選用;預設1600)quality:0..1(選用;預設0.9,限制在[0.05, 1.0])format: 目前為jpgdelayMs: number(選用;預設0,內部上限為10000)deviceId: string(選用;來自camera.list)
- 回應承載資料:
format: "jpg"、base64、width、height。 - 承載資料防護:照片會重新壓縮,讓 base64 編碼後的承載資料維持在 5MB 以下。
- 參數:
-
camera.clip- 參數:
facing:front|back(預設:front)durationMs: number(預設3000,限制在[250, 60000])includeAudio: boolean(預設true)format: 目前為mp4deviceId: string(選用;來自camera.list)
- 回應承載資料:
format: "mp4"、base64、durationMs、hasAudio。
- 參數:
iOS 前景要求
如同canvas.*,iOS 節點只允許在前景執行 camera.* 命令。背景呼叫會傳回 NODE_BACKGROUND_UNAVAILABLE。
命令列介面輔助工具
取得媒體檔案最簡單的方式是透過命令列介面輔助工具,它會將解碼後的媒體寫入暫存檔,並列印儲存路徑。nodes camera snap 預設為 --facing both,會同時擷取前鏡頭和後鏡頭,讓代理取得兩個視角;若傳入 --device-id,必須搭配單一明確的 facing(設定 --device-id 時會拒絕 both)。輸出檔案會是暫存檔(位於 OS 暫存目錄),除非你建置自己的包裝工具。
Android 節點
Android 使用者設定
- Android 設定面板 → 相機 → 允許相機 (
camera.enabled)。- 全新安裝預設為關閉。 早於此設定的既有安裝會遷移為開啟,因此升級不會悄悄失去先前可用的相機存取。
- 關閉時:
camera.*命令會傳回CAMERA_DISABLED: enable Camera in Settings。
權限
CAMERA是camera.snap和camera.clip都需要的權限;缺少或遭拒的權限會傳回CAMERA_PERMISSION_REQUIRED。- 當
includeAudio為true時,camera.clip需要RECORD_AUDIO;缺少或遭拒的權限會傳回MIC_PERMISSION_REQUIRED。
Android 前景要求
如同canvas.*,Android 節點只允許在前景執行 camera.* 命令。背景呼叫會傳回 NODE_BACKGROUND_UNAVAILABLE: command requires foreground。
Android 命令(透過閘道 node.invoke)
-
camera.list- 回應承載資料:
devices—{ id, name, position, deviceType }的陣列。
- 回應承載資料:
-
camera.snap- 參數:
facing(front|back,預設front)、quality(預設0.95,限制在[0.1, 1.0])、maxWidth(預設1600)、deviceId(選用;未知 id 會以INVALID_REQUEST失敗)。 - 回應承載資料:
format: "jpg"、base64、width、height。 - 承載資料防護:重新壓縮以讓 base64 維持在 5MB 以下(與 iOS 相同的容量預算)。
- 參數:
-
camera.clip- 參數:
facing(預設front)、durationMs(預設3000,限制在[200, 60000])、includeAudio(預設true)、deviceId(選用)。 - 回應承載資料:
format: "mp4"、base64、durationMs、hasAudio。 - 承載資料防護:原始 MP4 在 base64 編碼前上限為 18MB;超出大小的片段會以
PAYLOAD_TOO_LARGE失敗(請降低durationMs後重試)。
- 參數:
macOS 應用程式
macOS 使用者設定
macOS 伴隨應用程式提供核取方塊:- 設定 → 一般 → 允許相機 (
openclaw.cameraEnabled)。- 預設:關閉。
- 關閉時:相機要求會傳回
CAMERA_DISABLED: enable Camera in Settings。
命令列介面輔助工具(節點 invoke)
使用主要的openclaw 命令列介面,在 macOS 節點上呼叫相機命令。
- 除非覆寫,
openclaw nodes camera snap預設為maxWidth=1600。 camera.snap會在暖機/曝光穩定後等待delayMs(預設 2000ms,限制在[0, 10000])再進行擷取。- 照片承載資料會重新壓縮,讓 base64 維持在 5MB 以下。
安全性 + 實務限制
- 相機和麥克風存取會觸發一般的 OS 權限提示(並需要
Info.plist中的用途字串)。 - 影片片段上限為 60s,以避免節點承載資料過大(base64 額外負擔加上訊息限制)。