Kamera-Aufnahme (Agent)

OpenClaw unterstützt Kamera-Aufnahmen für Agent-Workflows:

  • iOS Node (gekoppelt über Gateway): Nimm ein Foto (jpg) oder einen kurzen Videoclip (mp4, mit optionalem Audio) über node.invoke auf.
  • Android Node (gekoppelt über Gateway): Nimm ein Foto (jpg) oder einen kurzen Videoclip (mp4, mit optionalem Audio) über node.invoke auf.
  • macOS App (Node über Gateway): Nimm ein Foto (jpg) oder einen kurzen Videoclip (mp4, mit optionalem Audio) über node.invoke auf.

Der gesamte Kamera-Zugriff ist durch benutzerkontrollierte Einstellungen geschützt.

iOS Node

Benutzereinstellung (standardmäßig an)

  • iOS Settings Tab → CameraAllow Camera (camera.enabled)
    • Standard: an (fehlender Schlüssel wird als aktiviert behandelt).
    • Wenn aus: camera.*-Befehle geben CAMERA_DISABLED zurück.

Befehle (über Gateway node.invoke)

  • camera.list

    • Response Payload:
      • devices: Array von { id, name, position, deviceType }
  • camera.snap

    • Parameter:
      • facing: front|back (Standard: front)
      • maxWidth: Zahl (optional; Standard 1600 auf dem iOS Node)
      • quality: 0..1 (optional; Standard 0.9)
      • format: aktuell jpg
      • delayMs: Zahl (optional; Standard 0)
      • deviceId: String (optional; von camera.list)
    • Response Payload:
      • format: "jpg"
      • base64: "<...>"
      • width, height
    • Payload Guard: Fotos werden neu komprimiert, um den base64-Payload unter 5 MB zu halten.
  • camera.clip

    • Parameter:
      • facing: front|back (Standard: front)
      • durationMs: Zahl (Standard 3000, maximal 60000)
      • includeAudio: Boolean (Standard true)
      • format: aktuell mp4
      • deviceId: String (optional; von camera.list)
    • Response Payload:
      • format: "mp4"
      • base64: "<...>"
      • durationMs
      • hasAudio

Vordergrund-Anforderung

Wie bei canvas.* erlaubt der iOS Node camera.*-Befehle nur im Vordergrund. Aufrufe im Hintergrund geben NODE_BACKGROUND_UNAVAILABLE zurück.

CLI Helper (Temp-Dateien + MEDIA)

Der einfachste Weg, um Anhänge zu bekommen, ist über den CLI Helper, der dekodierte Medien in eine Temp-Datei schreibt und MEDIA:<path> ausgibt.

Beispiele:

openclaw nodes camera snap --node <id>               # Standard: beide Seiten front + back (2 MEDIA-Zeilen)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio

Hinweise:

  • nodes camera snap verwendet standardmäßig beide Kameraseiten, um dem Agent beide Ansichten zu geben.
  • Ausgabedateien sind temporär (im OS-Temp-Verzeichnis), außer du baust deinen eigenen Wrapper.

Android Node

Benutzereinstellung (standardmäßig an)

  • Android Settings Sheet → CameraAllow Camera (camera.enabled)
    • Standard: an (fehlender Schlüssel wird als aktiviert behandelt).
    • Wenn aus: camera.*-Befehle geben CAMERA_DISABLED zurück.

Berechtigungen

  • Android benötigt Runtime-Berechtigungen:
    • CAMERA für sowohl camera.snap als auch camera.clip.
    • RECORD_AUDIO für camera.clip, wenn includeAudio=true.

Falls Berechtigungen fehlen, fordert die App diese nach Möglichkeit an; bei Ablehnung schlagen camera.*-Anfragen mit einem *_PERMISSION_REQUIRED-Fehler fehl.

Vordergrund-Anforderung

Wie bei canvas.* erlaubt der Android Node camera.*-Befehle nur im Vordergrund. Aufrufe im Hintergrund geben NODE_BACKGROUND_UNAVAILABLE zurück.

Payload Guard

Fotos werden neu komprimiert, um den base64-Payload unter 5 MB zu halten.

macOS App

Benutzereinstellung (standardmäßig aus)

Die macOS Companion App bietet eine Checkbox:

  • Settings → General → Allow Camera (openclaw.cameraEnabled)
    • Standard: aus
    • Wenn aus: Kamera-Anfragen geben “Camera disabled by user” zurück.

CLI Helper (Node Invoke)

Nutze die openclaw CLI, um Kamera-Befehle auf dem macOS Node auszuführen.

Beispiele:

openclaw nodes camera list --node <id>            # Kamera-IDs auflisten
openclaw nodes camera snap --node <id>            # gibt MEDIA:<path> aus
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          # gibt MEDIA:<path> aus
openclaw nodes camera clip --node <id> --duration-ms 3000      # gibt MEDIA:<path> aus (Legacy-Flag)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio

Hinweise:

  • openclaw nodes camera snap verwendet standardmäßig maxWidth=1600, außer du überschreibst es.
  • Auf macOS wartet camera.snap nach dem Warm-up/Belichtungsausgleich delayMs (Standard 2000ms), bevor aufgenommen wird.
  • Foto-Payloads werden neu komprimiert, um base64 unter 5 MB zu halten.

Sicherheit + praktische Limits

  • Kamera- und Mikrofon-Zugriff lösen die üblichen OS-Berechtigungsabfragen aus (und benötigen Usage Strings in Info.plist).
  • Videoclips sind begrenzt (aktuell <= 60s), um zu große Node-Payloads zu vermeiden (base64-Overhead + Nachrichtenlimits).

macOS Screen Video (OS-Level)

Für Bildschirm-Video (nicht Kamera) nutze die macOS Companion:

openclaw nodes screen record --node <id> --duration 10s --fps 15   # gibt MEDIA:<path> aus

Hinweise:

  • Benötigt macOS Screen Recording Berechtigung (TCC).