Nodes and media
Przechwytywanie obrazu z kamery
OpenClaw obsługuje przechwytywanie obrazu z kamery na potrzeby przepływów pracy agentów na sparowanych węzłach iOS, Android, macOS i Linux: wykonywanie zdjęcia (jpg) lub nagrywanie krótkiego klipu wideo (mp4, opcjonalnie z dźwiękiem) za pośrednictwem Gateway node.invoke.
Każda platforma umożliwia dostęp do kamery wyłącznie po włączeniu ustawienia kontrolowanego przez użytkownika.
Węzeł iOS
Ustawienie użytkownika w systemie iOS
- Karta iOS Settings → Camera → Allow Camera (
camera.enabled).- Domyślnie: włączone (brak klucza jest traktowany jako włączenie).
- Po wyłączeniu: polecenia
camera.*zwracająCAMERA_DISABLED.
Polecenia iOS (za pośrednictwem Gateway node.invoke)
-
camera.list- Dane odpowiedzi:
devices— tablica elementów{ id, name, position, deviceType }.
- Dane odpowiedzi:
-
camera.snap- Parametry:
facing:front|back(domyślnie:front)maxWidth: liczba (opcjonalnie; domyślnie1600)quality:0..1(opcjonalnie; domyślnie0.9, ograniczone do[0.05, 1.0])format: obecniejpgdelayMs: liczba (opcjonalnie; domyślnie0, wewnętrznie ograniczona do10000)deviceId: ciąg znaków (opcjonalnie; zcamera.list)
- Dane odpowiedzi:
format: "jpg",base64,width,height. - Limit danych: zdjęcia są ponownie kompresowane, aby zakodowane w base64 dane nie przekraczały 5MB.
- Parametry:
-
camera.clip- Parametry:
facing:front|back(domyślnie:front)durationMs: liczba (domyślnie3000, ograniczona do[250, 60000])includeAudio: wartość logiczna (domyślnietrue)format: obecniemp4deviceId: ciąg znaków (opcjonalnie; zcamera.list)
- Dane odpowiedzi:
format: "mp4",base64,durationMs,hasAudio.
- Parametry:
Wymóg działania systemu iOS na pierwszym planie
Podobnie jak canvas.*, węzeł iOS zezwala na polecenia camera.* wyłącznie na pierwszym planie. Wywołania w tle zwracają NODE_BACKGROUND_UNAVAILABLE.
Pomocnicze polecenie CLI
Najłatwiejszym sposobem uzyskania plików multimedialnych jest użycie pomocniczego polecenia CLI, które zapisuje zdekodowane multimedia w pliku tymczasowym i wyświetla ścieżkę zapisu.
openclaw nodes camera snap --node <id> # domyślnie: przedni i tylny aparat (2 wiersze MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audionodes camera snap ma domyślnie wartość --facing both, dzięki czemu przechwytuje obraz zarówno z przedniego, jak i tylnego aparatu, aby udostępnić agentowi oba widoki; należy przekazać --device-id z jednym jawnie określonym kierunkiem (both jest odrzucane, gdy ustawiono --device-id). Pliki wyjściowe są tymczasowe (znajdują się w katalogu tymczasowym systemu operacyjnego), chyba że zostanie utworzona własna otoczka.
Węzeł Android
Ustawienie użytkownika w systemie Android
- Arkusz Android Settings → Camera → Allow Camera (
camera.enabled).- W nowych instalacjach ustawienie jest domyślnie wyłączone. W istniejących instalacjach sprzed wprowadzenia tego ustawienia jest ono migrowane do stanu włączonego, aby aktualizacje nie powodowały niezauważalnej utraty działającego wcześniej dostępu do kamery.
- Po wyłączeniu: polecenia
camera.*zwracająCAMERA_DISABLED: enable Camera in Settings.
Uprawnienia
CAMERAjest wymagane zarówno dlacamera.snap, jak icamera.clip; brak uprawnienia lub jego odmowa powoduje zwrócenieCAMERA_PERMISSION_REQUIRED.RECORD_AUDIOjest wymagane dlacamera.clip, gdyincludeAudioma wartośćtrue; brak uprawnienia lub jego odmowa powoduje zwrócenieMIC_PERMISSION_REQUIRED.
Aplikacja prosi o uprawnienia w czasie działania, gdy jest to możliwe.
Wymóg działania systemu Android na pierwszym planie
Podobnie jak canvas.*, węzeł Android zezwala na polecenia camera.* wyłącznie na pierwszym planie. Wywołania w tle zwracają NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Polecenia Android (za pośrednictwem Gateway node.invoke)
-
camera.list- Dane odpowiedzi:
devices— tablica elementów{ id, name, position, deviceType }.
- Dane odpowiedzi:
-
camera.snap- Parametry:
facing(front|back, domyślniefront),quality(domyślnie0.95, ograniczone do[0.1, 1.0]),maxWidth(domyślnie1600),deviceId(opcjonalnie; nieznany identyfikator powoduje błądINVALID_REQUEST). - Dane odpowiedzi:
format: "jpg",base64,width,height. - Limit danych: ponowna kompresja utrzymuje dane base64 poniżej 5MB (taki sam limit jak w systemie iOS).
- Parametry:
-
camera.clip- Parametry:
facing(domyślniefront),durationMs(domyślnie3000, ograniczone do[200, 60000]),includeAudio(domyślnietrue),deviceId(opcjonalnie). - Dane odpowiedzi:
format: "mp4",base64,durationMs,hasAudio. - Limit danych: nieprzetworzony plik MP4 jest ograniczony do 18MB przed zakodowaniem w base64; zbyt duże klipy powodują błąd
PAYLOAD_TOO_LARGE(należy zmniejszyćdurationMsi spróbować ponownie).
- Parametry:
Aplikacja macOS
Ustawienie użytkownika w systemie macOS
Aplikacja towarzysząca dla systemu macOS udostępnia pole wyboru:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- Domyślnie: wyłączone.
- Po wyłączeniu: żądania dostępu do kamery zwracają
CAMERA_DISABLED: enable Camera in Settings.
Pomocnicze polecenie CLI (wywołanie węzła)
Do wywoływania poleceń kamery w węźle macOS należy użyć głównego CLI openclaw.
openclaw nodes camera list --node <id> # wyświetla identyfikatory kameropenclaw nodes camera snap --node <id> # wyświetla ścieżkę zapisuopenclaw 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 # wyświetla ścieżkę zapisuopenclaw nodes camera clip --node <id> --duration-ms 3000 # wyświetla ścieżkę zapisu (starsza flaga)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioopenclaw nodes camera snapma domyślnie wartośćmaxWidth=1600, o ile nie zostanie nadpisane.camera.snapczekadelayMs(domyślnie 2000ms, ograniczone do[0, 10000]) po rozgrzaniu i ustabilizowaniu ekspozycji przed przechwyceniem obrazu.- Dane zdjęć są ponownie kompresowane, aby dane base64 nie przekraczały 5MB.
Host węzła Linux
Dołączony Plugin węzła Linux dodaje przechwytywanie obrazu z kamery do usługi CLI openclaw node. Działa na hoście bez interfejsu graficznego i nie wymaga aplikacji komputerowej dla systemu Linux.
Dostęp do kamery jest domyślnie wyłączony. Należy go włączyć we wpisie Pluginu, a następnie ponownie uruchomić usługę węzła, aby jej ogłoszenie Gateway zostało przebudowane:
{ plugins: { entries: { "linux-node": { config: { camera: { enabled: true }, }, }, }, },}Wymagania:
- FFmpeg z obsługą wejścia V4L2,
libx264i AAC - urządzenie
/dev/video*dostępne do odczytu dla użytkownika usługi węzła; w popularnych dystrybucjach należy dodać tego użytkownika do grupyvideo - w przypadku klipów z domyślnym ustawieniem
includeAudio: true: działający serwer PulseAudio lub warstwa zgodności PipeWire z PulseAudio z domyślnym źródłem
Linux zwraca z camera.list możliwe do odczytu ścieżki urządzeń V4L2 obsługujących przechwytywanie; FFmpeg sprawdza każdego kandydata /dev/video* i pomija węzły bez metadanych lub wyłącznie wyjściowe. Urządzenie position ma wartość unknown, dlatego żądania kierunku bez deviceId tworzą jedno zdjęcie lub klip z pozycji unknown, zamiast deklarować użycie przedniej albo tylnej kamery. Gdy host ma wiele kamer, należy użyć deviceId. camera.snap używa wstępnego rozgrzewania wejścia FFmpeg przez delayMs i zachowuje proporcje obrazu, ograniczając jego szerokość. camera.clip nagrywa dźwięk z mikrofonu jako ścieżkę audio pliku MP4; OpenClaw celowo nie udostępnia osobnego polecenia mikrofonu.
Plugin używa libx264 do kodowania wideo MP4 i nie zmienia kodeków bez powiadomienia. Kompilacja FFmpeg bez wymaganego wejścia lub koderów zwraca CAMERA_UNAVAILABLE. Zdjęcia i klipy, które przekroczyłyby limit 25MB danych base64, powodują błąd PAYLOAD_TOO_LARGE.
camera.snap i camera.clip pozostają niebezpiecznymi poleceniami. Należy dodać je do gateway.nodes.allowCommands tylko wtedy, gdy przechwytywanie ma zostać uzbrojone; samo włączenie Pluginu nie omija zasad Gateway.
Bezpieczeństwo i ograniczenia praktyczne
- Dostęp do kamery i mikrofonu wywołuje standardowe monity o uprawnienia systemu operacyjnego (i wymaga ciągów opisujących użycie w
Info.plist). - Klipy wideo są ograniczone do 60s, aby uniknąć zbyt dużych danych węzła (narzut base64 oraz limity wiadomości).
Nagrywanie ekranu w systemie macOS (na poziomie systemu operacyjnego)
Do nagrywania ekranu (nie obrazu z kamery) należy użyć aplikacji towarzyszącej dla systemu macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # wyświetla ścieżkę zapisuWymaga uprawnienia systemu macOS Screen Recording (TCC).