カメラキャプチャ(エージェント)
OpenClaw はエージェントワークフロー向けのカメラキャプチャに対応しています。
- iOS ノード(Gateway 経由でペアリング):
node.invokeで写真(jpg)や短いビデオクリップ(mp4、オプションで音声付き)をキャプチャ。 - Android ノード(Gateway 経由でペアリング):
node.invokeで写真(jpg)や短いビデオクリップ(mp4、オプションで音声付き)をキャプチャ。 - macOS アプリ(Gateway 経由のノード):
node.invokeで写真(jpg)や短いビデオクリップ(mp4、オプションで音声付き)をキャプチャ。
カメラへのアクセスはすべてユーザー制御の設定によってゲートされています。
iOS ノード
ユーザー設定(デフォルトはオン)
- iOS の設定タブ → Camera → Allow Camera(
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 ペイロードが 5 MB 以下になるよう写真は再圧縮されます。
- パラメータ:
-
camera.clip- パラメータ:
facing:front|back(デフォルト:front)durationMs: 数値(デフォルト3000、最大60000に制限)includeAudio: boolean(デフォルト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> # デフォルト: 前面と背面の両方(MEDIA 行 2 つ)
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はデフォルトで両方の向きをキャプチャし、エージェントに両方のビューを提供します。- 出力ファイルは一時的なもの(OS の一時ディレクトリ内)です。独自のラッパーを作成しない限り、そのままです。
Android ノード
Android ユーザー設定(デフォルトはオン)
- Android の設定シート → Camera → Allow Camera(
camera.enabled)- デフォルト: オン(キーが未設定の場合は有効として扱われます)。
- オフの場合:
camera.*コマンドはCAMERA_DISABLEDを返します。
パーミッション
- Android ではランタイムパーミッションが必要です。
camera.snapとcamera.clipの両方にCAMERA。includeAudio=trueの場合のcamera.clipにRECORD_AUDIO。
パーミッションが不足している場合、可能であればアプリがプロンプトを表示します。拒否された場合、camera.* リクエストは *_PERMISSION_REQUIRED エラーで失敗します。
Android フォアグラウンド要件
canvas.* と同様に、Android ノードはフォアグラウンドでのみ camera.* コマンドを許可します。バックグラウンドでの呼び出しは NODE_BACKGROUND_UNAVAILABLE を返します。
Android コマンド(Gateway node.invoke 経由)
camera.list- レスポンスペイロード:
devices:{ id, name, position, deviceType }の配列
- レスポンスペイロード:
ペイロードガード
base64 ペイロードが 5 MB 以下になるよう写真は再圧縮されます。
macOS アプリ
ユーザー設定(デフォルトはオフ)
macOS コンパニオンアプリにはチェックボックスがあります。
- Settings → General → Allow Camera(
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)待機します。 - 写真のペイロードは base64 が 5 MB 以下になるよう再圧縮されます。
安全性と実用上の制限
- カメラとマイクへのアクセスは通常の OS パーミッションプロンプトをトリガーします(Info.plist に使用説明文字列が必要です)。
- ビデオクリップは上限付き(現在
<= 60 秒)で、ノードペイロードの肥大化(base64 オーバーヘッド + メッセージ制限)を防ぎます。
macOS スクリーンビデオ(OS レベル)
_スクリーン_ビデオ(カメラではなく)の場合は、macOS コンパニオンを使用します。
openclaw nodes screen record --node <id> --duration 10s --fps 15 # MEDIA:<path> を出力
補足:
- macOS の Screen Recording パーミッション(TCC)が必要です。