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
Wiecanvas.* 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.nodes 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.
Android-Vordergrundanforderung
Wiecanvas.* 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 zentraleopenclaw-CLI, um Kamerabefehle auf dem macOS-Node aufzurufen.
openclaw 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-Dienstopenclaw 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:
- 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
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).