Nodes and media
Przechwytywanie obrazu z kamery
OpenClaw obsługuje przechwytywanie obrazu z kamery w przepływach pracy agentów:
- Node iOS (sparowany przez Gateway): przechwyć zdjęcie (
jpg) lub krótki klip wideo (mp4, z opcjonalnym dźwiękiem) przeznode.invoke. - Node Android (sparowany przez Gateway): przechwyć zdjęcie (
jpg) lub krótki klip wideo (mp4, z opcjonalnym dźwiękiem) przeznode.invoke. - Aplikacja macOS (Node przez Gateway): przechwyć zdjęcie (
jpg) lub krótki klip wideo (mp4, z opcjonalnym dźwiękiem) przeznode.invoke.
Cały dostęp do kamery jest chroniony przez ustawienia kontrolowane przez użytkownika.
Node iOS
Ustawienie użytkownika (domyślnie włączone)
- Karta Ustawienia iOS → Kamera → Zezwalaj na kamerę (
camera.enabled)- Domyślnie: włączone (brakujący klucz jest traktowany jako włączony).
- Gdy wyłączone: polecenia
camera.*zwracająCAMERA_DISABLED.
Polecenia (przez Gateway node.invoke)
-
camera.list- Ładunek odpowiedzi:
devices: tablica{ id, name, position, deviceType }
- Ładunek odpowiedzi:
-
camera.snap- Parametry:
facing:front|back(domyślnie:front)maxWidth: liczba (opcjonalnie; domyślnie1600w Node iOS)quality:0..1(opcjonalnie; domyślnie0.9)format: obecniejpgdelayMs: liczba (opcjonalnie; domyślnie0)deviceId: string (opcjonalnie; zcamera.list)
- Ładunek odpowiedzi:
format: "jpg"base64: "<...>"width,height
- Ochrona ładunku: zdjęcia są ponownie kompresowane, aby utrzymać ładunek base64 poniżej 5 MB.
- Parametry:
-
camera.clip- Parametry:
facing:front|back(domyślnie:front)durationMs: liczba (domyślnie3000, ograniczona do maksymalnie60000)includeAudio: boolean (domyślnietrue)format: obecniemp4deviceId: string (opcjonalnie; zcamera.list)
- Ładunek odpowiedzi:
format: "mp4"base64: "<...>"durationMshasAudio
- Parametry:
Wymóg pracy na pierwszym planie
Podobnie jak canvas.*, Node iOS zezwala na polecenia camera.* tylko na pierwszym planie. Wywołania w tle zwracają NODE_BACKGROUND_UNAVAILABLE.
Pomocnik CLI (pliki tymczasowe + MEDIA)
Najprostszy sposób uzyskania załączników to użycie pomocnika CLI, który zapisuje zdekodowane multimedia do pliku tymczasowego i wypisuje MEDIA:<path>.
Przykłady:
openclaw nodes camera snap --node <id> # domyślnie: przód + tył (2 wiersze MEDIA)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio
Uwagi:
nodes camera snapdomyślnie używa obu kierunków, aby dać agentowi oba widoki.- Pliki wyjściowe są tymczasowe (w katalogu tymczasowym systemu operacyjnego), chyba że zbudujesz własny wrapper.
Node Android
Ustawienie użytkownika Androida (domyślnie włączone)
- Arkusz Ustawienia Androida → Kamera → Zezwalaj na kamerę (
camera.enabled)- Domyślnie: włączone (brakujący klucz jest traktowany jako włączony).
- Gdy wyłączone: polecenia
camera.*zwracająCAMERA_DISABLED.
Uprawnienia
- Android wymaga uprawnień czasu wykonywania:
CAMERAdlacamera.snapicamera.clip.RECORD_AUDIOdlacamera.clip, gdyincludeAudio=true.
Jeśli brakuje uprawnień, aplikacja wyświetli monit, gdy będzie to możliwe; jeśli zostaną odrzucone, żądania camera.* zakończą się błędem
*_PERMISSION_REQUIRED.
Wymóg pracy na pierwszym planie w Androidzie
Podobnie jak canvas.*, Node Android zezwala na polecenia camera.* tylko na pierwszym planie. Wywołania w tle zwracają NODE_BACKGROUND_UNAVAILABLE.
Polecenia Androida (przez Gateway node.invoke)
camera.list- Ładunek odpowiedzi:
devices: tablica{ id, name, position, deviceType }
- Ładunek odpowiedzi:
Ochrona ładunku
Zdjęcia są ponownie kompresowane, aby utrzymać ładunek base64 poniżej 5 MB.
Aplikacja macOS
Ustawienie użytkownika (domyślnie wyłączone)
Aplikacja towarzysząca macOS udostępnia pole wyboru:
- Ustawienia → Ogólne → Zezwalaj na kamerę (
openclaw.cameraEnabled)- Domyślnie: wyłączone
- Gdy wyłączone: żądania kamery zwracają „Kamera wyłączona przez użytkownika”.
Pomocnik CLI (wywołanie Node)
Użyj głównego CLI openclaw, aby wywołać polecenia kamery w Node macOS.
Przykłady:
openclaw nodes camera list --node <id> # wyświetl identyfikatory kamer
openclaw nodes camera snap --node <id> # wypisuje MEDIA:<path>
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 # wypisuje MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # wypisuje MEDIA:<path> (starsza flaga)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
Uwagi:
openclaw nodes camera snapdomyślnie używamaxWidth=1600, chyba że zostanie nadpisane.- W macOS
camera.snapczekadelayMs(domyślnie 2000 ms) po rozgrzaniu i ustabilizowaniu ekspozycji przed przechwyceniem. - Ładunki zdjęć są ponownie kompresowane, aby utrzymać base64 poniżej 5 MB.
Bezpieczeństwo i praktyczne limity
- Dostęp do kamery i mikrofonu wywołuje zwykłe monity o uprawnienia systemu operacyjnego (i wymaga ciągów opisu użycia w Info.plist).
- Klipy wideo są ograniczone (obecnie
<= 60s), aby uniknąć zbyt dużych ładunków Node (narzut base64 + limity wiadomości).
Wideo ekranu macOS (poziom systemu operacyjnego)
Do wideo ekranu (nie z kamery) użyj aplikacji towarzyszącej macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # wypisuje MEDIA:<path>
Uwagi:
- Wymaga uprawnienia macOS Nagrywanie ekranu (TCC).