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 jakcanvas.*, 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.nodes 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.
Wymóg działania systemu Android na pierwszym planie
Podobnie jakcanvas.*, 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 CLIopenclaw.
openclaw 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 CLIopenclaw 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:
- 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
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).