Nodes and media
相機擷取
OpenClaw 支援代理工作流程的相機擷取:
- iOS 節點(透過 Gateway 配對):透過
node.invoke擷取照片(jpg)或短影片片段(mp4,可選擇包含音訊)。 - Android 節點(透過 Gateway 配對):透過
node.invoke擷取照片(jpg)或短影片片段(mp4,可選擇包含音訊)。 - macOS App(透過 Gateway 的節點):透過
node.invoke擷取照片(jpg)或短影片片段(mp4,可選擇包含音訊)。
所有相機存取都受使用者可控制的設定管控。
iOS 節點
使用者設定(預設開啟)
- iOS 設定分頁 → 相機 → 允許相機(
camera.enabled)- 預設:開啟(缺少此鍵會視為已啟用)。
- 關閉時:
camera.*指令會傳回CAMERA_DISABLED。
指令(透過 Gateway node.invoke)
-
camera.list- 回應 payload:
devices:{ id, name, position, deviceType }的陣列
- 回應 payload:
-
camera.snap- 參數:
facing:front|back(預設:front)maxWidth:數字(選用;iOS 節點上的預設值為1600)quality:0..1(選用;預設0.9)format:目前為jpgdelayMs:數字(選用;預設0)deviceId:字串(選用;來自camera.list)
- 回應 payload:
format: "jpg"base64: "<...>"width、height
- Payload 保護:照片會重新壓縮,以將 base64 payload 維持在 5 MB 以下。
- 參數:
-
camera.clip- 參數:
facing:front|back(預設:front)durationMs:數字(預設3000,上限夾制為60000)includeAudio:布林值(預設true)format:目前為mp4deviceId:字串(選用;來自camera.list)
- 回應 payload:
format: "mp4"base64: "<...>"durationMshasAudio
- 參數:
前景需求
和 canvas.* 一樣,iOS 節點只允許在前景執行 camera.* 指令。背景叫用會傳回 NODE_BACKGROUND_UNAVAILABLE。
CLI 輔助工具(暫存檔案 + MEDIA)
取得附件最簡單的方式是使用 CLI 輔助工具,它會將解碼後的媒體寫入暫存檔案,並列印 MEDIA:<path>。
範例:
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預設使用兩種朝向,以便為代理提供兩個視角。- 輸出檔案是暫存檔(位於作業系統暫存目錄),除非你建置自己的 wrapper。
Android 節點
Android 使用者設定(預設開啟)
- Android 設定面板 → 相機 → 允許相機(
camera.enabled)- 預設:開啟(缺少此鍵會視為已啟用)。
- 關閉時:
camera.*指令會傳回CAMERA_DISABLED。
權限
- Android 需要執行階段權限:
CAMERA用於camera.snap和camera.clip。- 當
includeAudio=true時,camera.clip需要RECORD_AUDIO。
如果缺少權限,App 會在可行時提示;如果被拒絕,camera.* 請求會因
*_PERMISSION_REQUIRED 錯誤而失敗。
Android 前景需求
和 canvas.* 一樣,Android 節點只允許在前景執行 camera.* 指令。背景叫用會傳回 NODE_BACKGROUND_UNAVAILABLE。
Android 指令(透過 Gateway node.invoke)
camera.list- 回應 payload:
devices:{ id, name, position, deviceType }的陣列
- 回應 payload:
Payload 保護
照片會重新壓縮,以將 base64 payload 維持在 5 MB 以下。
macOS App
使用者設定(預設關閉)
macOS companion App 提供一個核取方塊:
- 設定 → 一般 → 允許相機(
openclaw.cameraEnabled)- 預設:關閉
- 關閉時:相機請求會傳回「使用者已停用相機」。
CLI 輔助工具(節點叫用)
使用主要的 openclaw CLI 在 macOS 節點上叫用相機指令。
範例:
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)再擷取。 - 照片 payload 會重新壓縮,以將 base64 維持在 5 MB 以下。
安全性 + 實際限制
- 相機和麥克風存取會觸發一般的作業系統權限提示(且需要 Info.plist 中的使用說明字串)。
- 影片片段有上限(目前
<= 60s),以避免過大的節點 payload(base64 開銷 + 訊息限制)。
macOS 螢幕影片(作業系統層級)
若要擷取_螢幕_影片(不是相機),請使用 macOS companion:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
注意事項:
- 需要 macOS 螢幕錄製權限(TCC)。