Nodes and media
Pengambilan gambar kamera
OpenClaw mendukung pengambilan gambar kamera untuk alur kerja agen pada node iOS, Android, macOS, dan Linux yang dipasangkan: mengambil foto (jpg) atau klip video pendek (mp4, dengan audio opsional) melalui Gateway node.invoke.
Semua akses kamera dibatasi oleh pengaturan yang dikendalikan pengguna pada setiap platform.
Node iOS
Pengaturan pengguna iOS
- Tab Settings iOS → Camera → Allow Camera (
camera.enabled).- Default: aktif (kunci yang tidak ada dianggap aktif).
- Saat nonaktif: perintah
camera.*mengembalikanCAMERA_DISABLED.
Perintah iOS (melalui Gateway node.invoke)
-
camera.list- Payload respons:
devices— larik{ id, name, position, deviceType }.
- Payload respons:
-
camera.snap- Parameter:
facing:front|back(default:front)maxWidth: angka (opsional; default1600)quality:0..1(opsional; default0.9, dibatasi ke[0.05, 1.0])format: saat inijpgdelayMs: angka (opsional; default0, secara internal dibatasi maksimum10000)deviceId: string (opsional; daricamera.list)
- Payload respons:
format: "jpg",base64,width,height. - Pembatas payload: foto dikompresi ulang agar payload yang dikodekan dengan base64 tetap di bawah 5MB.
- Parameter:
-
camera.clip- Parameter:
facing:front|back(default:front)durationMs: angka (default3000, dibatasi ke[250, 60000])includeAudio: boolean (defaulttrue)format: saat inimp4deviceId: string (opsional; daricamera.list)
- Payload respons:
format: "mp4",base64,durationMs,hasAudio.
- Parameter:
Persyaratan latar depan iOS
Seperti canvas.*, node iOS hanya mengizinkan perintah camera.* di latar depan. Pemanggilan di latar belakang mengembalikan NODE_BACKGROUND_UNAVAILABLE.
Pembantu CLI
Cara termudah untuk memperoleh berkas media adalah melalui pembantu CLI, yang menulis media hasil dekode ke berkas sementara dan mencetak jalur penyimpanannya.
openclaw nodes camera snap --node <id> # default: kamera depan + belakang (2 baris 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 secara default menggunakan --facing both, mengambil gambar dari kamera depan dan belakang untuk memberikan kedua tampilan kepada agen; teruskan --device-id dengan satu arah kamera eksplisit (both ditolak ketika --device-id ditetapkan). Berkas keluaran bersifat sementara (di direktori sementara OS), kecuali jika Anda membuat pembungkus sendiri.
Node Android
Pengaturan pengguna Android
- Lembar Settings Android → Camera → Allow Camera (
camera.enabled).- Instalasi baru secara default nonaktif. Instalasi yang sudah ada sebelum pengaturan ini tersedia dimigrasikan menjadi aktif agar peningkatan versi tidak secara diam-diam menghilangkan akses kamera yang sebelumnya berfungsi.
- Saat nonaktif: perintah
camera.*mengembalikanCAMERA_DISABLED: enable Camera in Settings.
Izin
CAMERAdiperlukan untukcamera.snapmaupuncamera.clip; izin yang tidak ada/ditolak mengembalikanCAMERA_PERMISSION_REQUIRED.RECORD_AUDIOdiperlukan untukcamera.clipketikaincludeAudiobernilaitrue; izin yang tidak ada/ditolak mengembalikanMIC_PERMISSION_REQUIRED.
Aplikasi meminta izin runtime jika memungkinkan.
Persyaratan latar depan Android
Seperti canvas.*, node Android hanya mengizinkan perintah camera.* di latar depan. Pemanggilan di latar belakang mengembalikan NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Perintah Android (melalui Gateway node.invoke)
-
camera.list- Payload respons:
devices— larik{ id, name, position, deviceType }.
- Payload respons:
-
camera.snap- Parameter:
facing(front|back, defaultfront),quality(default0.95, dibatasi ke[0.1, 1.0]),maxWidth(default1600),deviceId(opsional; id yang tidak dikenal gagal denganINVALID_REQUEST). - Payload respons:
format: "jpg",base64,width,height. - Pembatas payload: dikompresi ulang agar base64 tetap di bawah 5MB (batas yang sama seperti iOS).
- Parameter:
-
camera.clip- Parameter:
facing(defaultfront),durationMs(default3000, dibatasi ke[200, 60000]),includeAudio(defaulttrue),deviceId(opsional). - Payload respons:
format: "mp4",base64,durationMs,hasAudio. - Pembatas payload: MP4 mentah dibatasi maksimum 18MB sebelum pengodean base64; klip yang terlalu besar gagal dengan
PAYLOAD_TOO_LARGE(kurangidurationMsdan coba lagi).
- Parameter:
Aplikasi macOS
Pengaturan pengguna macOS
Aplikasi pendamping macOS menyediakan kotak centang:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- Default: nonaktif.
- Saat nonaktif: permintaan kamera mengembalikan
CAMERA_DISABLED: enable Camera in Settings.
Pembantu CLI (pemanggilan node)
Gunakan CLI utama openclaw untuk memanggil perintah kamera pada node macOS.
openclaw nodes camera list --node <id> # cantumkan id kameraopenclaw nodes camera snap --node <id> # mencetak jalur penyimpananopenclaw 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 # mencetak jalur penyimpananopenclaw nodes camera clip --node <id> --duration-ms 3000 # mencetak jalur penyimpanan (flag lama)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioopenclaw nodes camera snapsecara default menggunakanmaxWidth=1600kecuali ditimpa.camera.snapmenunggudelayMs(default 2000ms, dibatasi ke[0, 10000]) setelah pemanasan/penstabilan eksposur sebelum mengambil gambar.- Payload foto dikompresi ulang agar base64 tetap di bawah 5MB.
Host node Linux
Plugin Node Linux bawaan menambahkan pengambilan gambar kamera ke layanan CLI openclaw node. Plugin ini berfungsi pada host tanpa antarmuka grafis dan tidak memerlukan aplikasi desktop Linux.
Akses kamera secara default nonaktif. Aktifkan di bawah entri plugin, lalu mulai ulang layanan node agar pengumuman Gateway-nya dibuat ulang:
{ plugins: { entries: { "linux-node": { config: { camera: { enabled: true }, }, }, }, },}Persyaratan:
- FFmpeg dengan input V4L2,
libx264, dan dukungan AAC - perangkat
/dev/video*yang dapat dibaca oleh pengguna layanan node; pada distribusi umum, tambahkan pengguna tersebut ke grupvideo - untuk klip dengan
includeAudio: truedefault, server PulseAudio yang berfungsi atau lapisan kompatibilitas PulseAudio PipeWire dengan sumber default
Linux mengembalikan jalur perangkat V4L2 yang dapat mengambil gambar dan dapat dibaca dari camera.list; FFmpeg memeriksa setiap kandidat /dev/video* dan mengabaikan node metadata atau node khusus keluaran. position perangkat adalah unknown, sehingga permintaan arah kamera tanpa deviceId menghasilkan satu foto atau klip dengan posisi unknown, alih-alih mengklaim kamera depan atau belakang. Gunakan deviceId ketika host memiliki beberapa kamera. camera.snap menggunakan pemanasan input FFmpeg selama delayMs dan mempertahankan rasio aspek sambil membatasi lebar. camera.clip merekam audio mikrofon sebagai trek audio MP4; OpenClaw secara sengaja tidak menyediakan perintah mikrofon mandiri.
Plugin menggunakan libx264 untuk video MP4 dan tidak mengubah codec secara diam-diam. Build FFmpeg tanpa input atau encoder yang diperlukan mengembalikan CAMERA_UNAVAILABLE. Foto dan klip yang akan melampaui batas payload base64 sebesar 25MB gagal dengan PAYLOAD_TOO_LARGE.
camera.snap dan camera.clip tetap merupakan perintah berbahaya. Tambahkan perintah tersebut ke gateway.nodes.allowCommands hanya jika Anda bermaksud mengaktifkan pengambilan; mengaktifkan plugin saja tidak melewati kebijakan Gateway.
Keamanan + batas praktis
- Akses kamera dan mikrofon memicu permintaan izin OS seperti biasa (dan memerlukan string penggunaan dalam
Info.plist). - Klip video dibatasi maksimum 60s untuk menghindari payload node yang terlalu besar (overhead base64 ditambah batas pesan).
Video layar macOS (tingkat OS)
Untuk video layar (bukan kamera), gunakan aplikasi pendamping macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # mencetak jalur penyimpananMemerlukan izin Screen Recording macOS (TCC).