Nodes and media
Kameraaufnahme
OpenClaw unterstützt die Kameraaufnahme für Agent-Workflows auf gekoppelten iOS-, Android-, macOS- und Linux-Nodes: Nehmen Sie über den Gateway node.invoke ein Foto (jpg) oder einen kurzen Videoclip (mp4, optional mit Audio) auf.
Der gesamte Kamerazugriff wird auf jeder Plattform durch eine benutzergesteuerte Einstellung geregelt.
iOS-Node
iOS-Benutzereinstellung
- iOS Settings tab → Camera → Allow Camera (
camera.enabled).- Standard: ein (ein fehlender Schlüssel wird als aktiviert behandelt).
- Wenn deaktiviert:
camera.*-Befehle gebenCAMERA_DISABLEDzurück.
iOS-Befehle (über Gateway node.invoke)
-
camera.list- Antwortnutzlast:
devices– Array von{ id, name, position, deviceType }.
- Antwortnutzlast:
-
camera.snap- Parameter:
facing:front|back(Standard:front)maxWidth: Zahl (optional; Standard:1600)quality:0..1(optional; Standard:0.9, begrenzt auf[0.05, 1.0])format: derzeitjpgdelayMs: Zahl (optional; Standard:0, intern auf10000begrenzt)deviceId: Zeichenfolge (optional; auscamera.list)
- Antwortnutzlast:
format: "jpg",base64,width,height. - Nutzlastbegrenzung: Fotos werden erneut komprimiert, damit die Base64-codierte Nutzlast unter 5MB bleibt.
- Parameter:
-
camera.clip- Parameter:
facing:front|back(Standard:front)durationMs: Zahl (Standard:3000, begrenzt auf[250, 60000])includeAudio: boolescher Wert (Standard:true)format: derzeitmp4deviceId: Zeichenfolge (optional; auscamera.list)
- Antwortnutzlast:
format: "mp4",base64,durationMs,hasAudio.
- Parameter:
iOS-Vordergrundanforderung
Wie canvas.* erlaubt der iOS-Node camera.*-Befehle nur im Vordergrund. Aufrufe im Hintergrund geben NODE_BACKGROUND_UNAVAILABLE zurück.
CLI-Hilfsfunktion
Am einfachsten erhalten Sie Mediendateien über die CLI-Hilfsfunktion. Sie schreibt die decodierten Medien in eine temporäre Datei und gibt den Speicherpfad aus.
openclaw nodes camera snap --node <id> # Standard: Vorder- und Rückkamera (2 MEDIA-Zeilen)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audionodes camera snap verwendet standardmäßig --facing both und erfasst sowohl die Vorder- als auch die Rückansicht, damit dem Agent beide Ansichten zur Verfügung stehen. Übergeben Sie --device-id mit genau einer expliziten Ausrichtung (both wird abgelehnt, wenn --device-id festgelegt ist). Ausgabedateien sind temporär (im temporären Verzeichnis des Betriebssystems), sofern Sie keinen eigenen Wrapper erstellen.
Android-Node
Android-Benutzereinstellung
- Android Settings sheet → Camera → Allow Camera (
camera.enabled).- Bei Neuinstallationen ist die Einstellung standardmäßig deaktiviert. Bestehende Installationen, die älter als diese Einstellung sind, werden auf ein migriert, damit bei Upgrades ein zuvor funktionierender Kamerazugriff nicht unbemerkt verloren geht.
- Wenn deaktiviert:
camera.*-Befehle gebenCAMERA_DISABLED: enable Camera in Settingszurück.
Berechtigungen
CAMERAist sowohl fürcamera.snapals auch fürcamera.cliperforderlich; eine fehlende oder verweigerte Berechtigung gibtCAMERA_PERMISSION_REQUIREDzurück.RECORD_AUDIOist fürcamera.cliperforderlich, wennincludeAudioden Werttruehat; eine fehlende oder verweigerte Berechtigung gibtMIC_PERMISSION_REQUIREDzurück.
Die App fordert nach Möglichkeit Laufzeitberechtigungen an.
Android-Vordergrundanforderung
Wie canvas.* erlaubt der Android-Node camera.*-Befehle nur im Vordergrund. Aufrufe im Hintergrund geben NODE_BACKGROUND_UNAVAILABLE: command requires foreground zurück.
Android-Befehle (über Gateway node.invoke)
-
camera.list- Antwortnutzlast:
devices– Array von{ id, name, position, deviceType }.
- Antwortnutzlast:
-
camera.snap- Parameter:
facing(front|back, Standard:front),quality(Standard:0.95, begrenzt auf[0.1, 1.0]),maxWidth(Standard:1600),deviceId(optional; eine unbekannte ID schlägt mitINVALID_REQUESTfehl). - Antwortnutzlast:
format: "jpg",base64,width,height. - Nutzlastbegrenzung: erneute Komprimierung, damit Base64 unter 5MB bleibt (dasselbe Budget wie bei iOS).
- Parameter:
-
camera.clip- Parameter:
facing(Standard:front),durationMs(Standard:3000, begrenzt auf[200, 60000]),includeAudio(Standard:true),deviceId(optional). - Antwortnutzlast:
format: "mp4",base64,durationMs,hasAudio. - Nutzlastbegrenzung: Die rohe MP4-Datei ist vor der Base64-Codierung auf 18MB begrenzt; zu große Clips schlagen mit
PAYLOAD_TOO_LARGEfehl (reduzieren SiedurationMsund versuchen Sie es erneut).
- Parameter:
macOS-App
macOS-Benutzereinstellung
Die macOS-Begleit-App stellt ein Kontrollkästchen bereit:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- Standard: aus.
- Wenn deaktiviert: Kameraanfragen geben
CAMERA_DISABLED: enable Camera in Settingszurück.
CLI-Hilfsfunktion (Node-Aufruf)
Verwenden Sie die zentrale openclaw-CLI, um Kamerabefehle auf dem macOS-Node aufzurufen.
openclaw nodes camera list --node <id> # Kamera-IDs auflistenopenclaw nodes camera snap --node <id> # gibt den Speicherpfad ausopenclaw nodes camera snap --node <id> --max-width 1280openclaw nodes camera snap --node <id> --delay-ms 2000openclaw nodes camera snap --node <id> --device-id <id>openclaw nodes camera clip --node <id> --duration 10s # gibt den Speicherpfad ausopenclaw nodes camera clip --node <id> --duration-ms 3000 # gibt den Speicherpfad aus (veraltetes Flag)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioopenclaw nodes camera snapverwendet standardmäßigmaxWidth=1600, sofern dies nicht überschrieben wird.camera.snapwartet nach dem Aufwärmen und Einregeln der BelichtungdelayMs(Standard: 2000ms, begrenzt auf[0, 10000]), bevor die Aufnahme erfolgt.- Fotonutzlasten werden erneut komprimiert, damit Base64 unter 5MB bleibt.
Linux-Node-Host
Das mitgelieferte Linux-Node-Plugin fügt dem CLI-Dienst openclaw node die Kameraaufnahme hinzu. Es funktioniert auf einem Headless-Host und erfordert nicht die Linux-Desktop-App.
Der Kamerazugriff ist standardmäßig deaktiviert. Aktivieren Sie ihn unter dem Plugin-Eintrag und starten Sie anschließend den Node-Dienst neu, damit seine Gateway-Ankündigung neu erstellt wird:
{ plugins: { entries: { "linux-node": { config: { camera: { enabled: true }, }, }, }, },}Anforderungen:
- FFmpeg mit V4L2-Eingabe,
libx264und AAC-Unterstützung - ein
/dev/video*-Gerät, das für den Benutzer des Node-Dienstes lesbar ist; fügen Sie diesen Benutzer bei gängigen Distributionen der Gruppevideohinzu - für Clips mit dem standardmäßigen
includeAudio: trueeinen funktionierenden PulseAudio-Server oder eine PipeWire-PulseAudio-Kompatibilitätsschicht mit einer Standardquelle
Linux gibt über camera.list aufnahmefähige, lesbare V4L2-Gerätepfade zurück; FFmpeg prüft jeden /dev/video*-Kandidaten und lässt Metadaten- oder reine Ausgabegeräte aus. Das Geräteattribut position lautet unknown, sodass Ausrichtungsanfragen ohne deviceId ein Foto oder einen Clip mit der Position unknown erzeugen, anstatt eine Vorder- oder Rückkamera auszuweisen. Verwenden Sie deviceId, wenn ein Host über mehrere Kameras verfügt. camera.snap verwendet für delayMs die FFmpeg-Eingabeaufwärmung und behält das Seitenverhältnis bei, während die Breite begrenzt wird. camera.clip zeichnet Mikrofonaudio als MP4-Audiospur auf; OpenClaw stellt bewusst keinen eigenständigen Mikrofonbefehl bereit.
Das Plugin verwendet libx264 für MP4-Video und wechselt nicht stillschweigend den Codec. Ein FFmpeg-Build ohne die erforderliche Eingabe oder die erforderlichen Encoder gibt CAMERA_UNAVAILABLE zurück. Fotos und Clips, die das Base64-Nutzlastbudget von 25MB überschreiten würden, schlagen mit PAYLOAD_TOO_LARGE fehl.
camera.snap und camera.clip bleiben gefährliche Befehle. Fügen Sie sie nur dann zu gateway.nodes.commands.allow hinzu, wenn Sie die Aufnahme bewusst aktivieren möchten; allein durch das Aktivieren des Plugins wird die Gateway-Richtlinie nicht umgangen.
Sicherheit und praktische Grenzen
- Der Kamera- und Mikrofonzugriff löst die üblichen Berechtigungsabfragen des Betriebssystems aus (und erfordert Verwendungsbeschreibungen in
Info.plist). - Videoclips sind auf 60s begrenzt, um übergroße Node-Nutzlasten zu vermeiden (Base64-Overhead plus Nachrichtengrenzen).
macOS-Bildschirmvideo (auf Betriebssystemebene)
Verwenden Sie für Bildschirmvideos (nicht für Kameraaufnahmen) die macOS-Begleit-App:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # gibt den Speicherpfad ausErfordert die macOS-Berechtigung Screen Recording (TCC).