Kameraaufnahme (Agent)

OpenClaw unterstützt Kameraaufnahme für Agent-Workflows:

  • iOS-Node (über Gateway gekoppelt): Aufnahme eines Fotos (jpg) oder eines kurzen Videoclips (mp4, optional mit Audio) über node.invoke.
  • Android-Node (über Gateway gekoppelt): Aufnahme eines Fotos (jpg) oder eines kurzen Videoclips (mp4, optional mit Audio) über node.invoke.
  • macOS-App (Node über Gateway): Aufnahme eines Fotos (jpg) oder eines kurzen Videoclips (mp4, optional mit Audio) über node.invoke.

Jeder Kamerazugriff wird durch benutzerkontrollierte Einstellungen geschützt.

iOS-Node

Benutzereinstellung (standardmäßig an)

  • iOS Einstellungen-Tab → KameraKamera erlauben (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

    • Antwort-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; aus camera.list)
    • Antwort-Payload:
      • format: "jpg"
      • base64: "<...>"
      • width, height
    • Payload-Schutz: Fotos werden rekomprimiert, um den Base64-Payload unter 5 MB zu halten.
  • camera.clip

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

Vordergrund-Anforderung

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

CLI-Helfer (temporäre Dateien + MEDIA)

Der einfachste Weg, Anhänge zu erhalten, ist der CLI-Helfer, der dekodierte Medien in eine temporäre 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 nimmt standardmäßig beide Richtungen auf, um dem Agent beide Ansichten zu geben.
  • Ausgabedateien sind temporär (im OS-Temp-Verzeichnis), sofern du keinen eigenen Wrapper baust.

Android-Node

Android-Benutzereinstellung (standardmäßig an)

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

Berechtigungen

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

Wenn Berechtigungen fehlen, fragt die App wenn möglich nach; bei Ablehnung schlagen camera.*-Anfragen mit einem *_PERMISSION_REQUIRED-Fehler fehl.

Android-Vordergrund-Anforderung

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

Android-Befehle (über Gateway node.invoke)

  • camera.list
    • Antwort-Payload:
      • devices: Array von { id, name, position, deviceType }

Payload-Schutz

Fotos werden rekomprimiert, um den Base64-Payload unter 5 MB zu halten.

macOS-App

Benutzereinstellung (standardmäßig aus)

Die macOS-Begleit-App bietet ein Kontrollkästchen:

  • Einstellungen → Allgemein → Kamera erlauben (openclaw.cameraEnabled)
    • Standard: aus
    • Wenn aus: Kameraanfragen geben „Camera disabled by user” zurück.

CLI-Helfer (Node Invoke)

Verwende die openclaw-CLI, um Kamerabefehle 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, sofern nicht überschrieben.
  • Auf macOS wartet camera.snap delayMs (Standard 2000ms) nach Aufwärm-/Belichtungsausgleich, bevor aufgenommen wird.
  • Foto-Payloads werden rekomprimiert, um Base64 unter 5 MB zu halten.

Sicherheit und praktische Limits

  • Kamera- und Mikrofonzugriff lösen die üblichen OS-Berechtigungsabfragen aus (und erfordern Usage-Strings in Info.plist).
  • Videoclips sind begrenzt (aktuell <= 60s), um überdimensionierte Node-Payloads zu vermeiden (Base64-Overhead + Nachrichtenlimits).

macOS Screen-Video (OS-Ebene)

Für Bildschirm-Video (nicht Kamera) verwende die macOS-Begleit-App:

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

Hinweise:

  • Erfordert die macOS-Berechtigung Bildschirmaufnahme (TCC).