相機擷取(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- 參數:
facing:front|back(預設:front)maxWidth:數字(可選;iOS 節點預設1600)quality:0..1(可選;預設0.9)format:目前為jpgdelayMs:數字(可選;預設0)deviceId:字串(可選;從camera.list取得)
- 回應內容:
format: "jpg"base64: "<...>"width、height
- 大小保護:照片會重新壓縮,確保 base64 payload 不超過 5 MB。
- 參數:
-
camera.clip- 參數:
facing:front|back(預設:front)durationMs:數字(預設3000,上限60000)includeAudio:布林值(預設true)format:目前為mp4deviceId:字串(可選;從camera.list取得)
- 回應內容:
format: "mp4"base64: "<...>"durationMshasAudio
- 參數:
前景需求
與 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.snap和camera.clip均需CAMERA。camera.clip在includeAudio=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)。