カメラキャプチャ(エージェント)

OpenClaw はエージェントワークフロー向けのカメラキャプチャに対応しています。

  • iOS ノード(Gateway 経由でペアリング): node.invoke写真jpg)や短いビデオクリップmp4、オプションで音声付き)をキャプチャ。
  • Android ノード(Gateway 経由でペアリング): node.invoke写真jpg)や短いビデオクリップmp4、オプションで音声付き)をキャプチャ。
  • macOS アプリ(Gateway 経由のノード): node.invoke写真jpg)や短いビデオクリップmp4、オプションで音声付き)をキャプチャ。

カメラへのアクセスはすべてユーザー制御の設定によってゲートされています。

iOS ノード

ユーザー設定(デフォルトはオン)

  • iOS の設定タブ → CameraAllow Cameracamera.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: 現在は jpg
      • delayMs: 数値(任意。デフォルト 0
      • deviceId: 文字列(任意。camera.list から取得)
    • レスポンスペイロード:
      • format: "jpg"
      • base64: "<...>"
      • widthheight
    • ペイロードガード: base64 ペイロードが 5 MB 以下になるよう写真は再圧縮されます。
  • camera.clip

    • パラメータ:
      • facing: front|back(デフォルト: front
      • durationMs: 数値(デフォルト 3000、最大 60000 に制限)
      • includeAudio: boolean(デフォルト true
      • format: 現在は mp4
      • deviceId: 文字列(任意。camera.list から取得)
    • レスポンスペイロード:
      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

フォアグラウンド要件

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 の設定シート → CameraAllow Cameracamera.enabled
    • デフォルト: オン(キーが未設定の場合は有効として扱われます)。
    • オフの場合: camera.* コマンドは CAMERA_DISABLED を返します。

パーミッション

  • Android ではランタイムパーミッションが必要です。
    • camera.snapcamera.clip の両方に CAMERA
    • includeAudio=true の場合の camera.clipRECORD_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 Cameraopenclaw.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)が必要です。