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) übernode.invoke. - Android-Node (über Gateway gekoppelt): Aufnahme eines Fotos (
jpg) oder eines kurzen Videoclips (mp4, optional mit Audio) übernode.invoke. - macOS-App (Node über Gateway): Aufnahme eines Fotos (
jpg) oder eines kurzen Videoclips (mp4, optional mit Audio) übernode.invoke.
Jeder Kamerazugriff wird durch benutzerkontrollierte Einstellungen geschützt.
iOS-Node
Benutzereinstellung (standardmäßig an)
- iOS Einstellungen-Tab → Kamera → Kamera erlauben (
camera.enabled)- Standard: an (fehlender Schlüssel wird als aktiviert behandelt).
- Wenn aus:
camera.*-Befehle gebenCAMERA_DISABLEDzurück.
Befehle (über Gateway node.invoke)
-
camera.list- Antwort-Payload:
devices: Array von{ id, name, position, deviceType }
- Antwort-Payload:
-
camera.snap- Parameter:
facing:front|back(Standard:front)maxWidth: Zahl (optional; Standard1600auf dem iOS-Node)quality:0..1(optional; Standard0.9)format: aktuelljpgdelayMs: Zahl (optional; Standard0)deviceId: String (optional; auscamera.list)
- Antwort-Payload:
format: "jpg"base64: "<...>"width,height
- Payload-Schutz: Fotos werden rekomprimiert, um den Base64-Payload unter 5 MB zu halten.
- Parameter:
-
camera.clip- Parameter:
facing:front|back(Standard:front)durationMs: Zahl (Standard3000, begrenzt auf maximal60000)includeAudio: Boolean (Standardtrue)format: aktuellmp4deviceId: String (optional; auscamera.list)
- Antwort-Payload:
format: "mp4"base64: "<...>"durationMshasAudio
- Parameter:
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 snapnimmt 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 → Kamera → Kamera erlauben (
camera.enabled)- Standard: an (fehlender Schlüssel wird als aktiviert behandelt).
- Wenn aus:
camera.*-Befehle gebenCAMERA_DISABLEDzurück.
Berechtigungen
- Android benötigt Laufzeitberechtigungen:
CAMERAfür sowohlcamera.snapals auchcamera.clip.RECORD_AUDIOfürcamera.clip, wennincludeAudio=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 }
- Antwort-Payload:
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 snapverwendet standardmäßigmaxWidth=1600, sofern nicht überschrieben.- Auf macOS wartet
camera.snapdelayMs(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).