jpg) hoặc quay một đoạn video ngắn (mp4, có âm thanh tùy chọn) qua Gateway node.invoke.
Mọi quyền truy cập camera đều được kiểm soát bằng một cài đặt do người dùng quản lý trên từng nền tảng.
Node iOS
Cài đặt người dùng trên iOS
- Tab iOS Settings → Camera → Allow Camera (
camera.enabled).- Mặc định: bật (khóa bị thiếu được coi là đã bật).
- Khi tắt: các lệnh
camera.*trả vềCAMERA_DISABLED.
Các lệnh iOS (qua Gateway node.invoke)
-
camera.list- Nội dung phản hồi:
devices— mảng gồm các{ id, name, position, deviceType }.
- Nội dung phản hồi:
-
camera.snap- Tham số:
facing:front|back(mặc định:front)maxWidth: số (tùy chọn; mặc định1600)quality:0..1(tùy chọn; mặc định0.9, được giới hạn ở[0.05, 1.0])format: hiện làjpgdelayMs: số (tùy chọn; mặc định0, được giới hạn nội bộ ở10000)deviceId: chuỗi (tùy chọn; từcamera.list)
- Nội dung phản hồi:
format: "jpg",base64,width,height. - Giới hạn nội dung: ảnh được nén lại để giữ nội dung mã hóa base64 dưới 5MB.
- Tham số:
-
camera.clip- Tham số:
facing:front|back(mặc định:front)durationMs: số (mặc định3000, được giới hạn ở[250, 60000])includeAudio: boolean (mặc địnhtrue)format: hiện làmp4deviceId: chuỗi (tùy chọn; từcamera.list)
- Nội dung phản hồi:
format: "mp4",base64,durationMs,hasAudio.
- Tham số:
Yêu cầu chạy ở tiền cảnh trên iOS
Tương tựcanvas.*, Node iOS chỉ cho phép các lệnh camera.* ở tiền cảnh. Các lệnh gọi trong nền trả về NODE_BACKGROUND_UNAVAILABLE.
Trình hỗ trợ CLI
Cách dễ nhất để lấy tệp phương tiện là dùng trình hỗ trợ CLI, công cụ này ghi phương tiện đã giải mã vào một tệp tạm thời và in ra đường dẫn đã lưu.nodes camera snap mặc định là --facing both, chụp bằng cả camera trước và sau để cung cấp cho tác tử cả hai góc nhìn; truyền --device-id với một hướng camera cụ thể duy nhất (both bị từ chối khi đặt --device-id). Các tệp đầu ra là tạm thời (trong thư mục tạm của hệ điều hành), trừ khi bạn tự xây dựng trình bao bọc.
Node Android
Cài đặt người dùng trên Android
- Bảng Android Settings → Camera → Allow Camera (
camera.enabled).- Các bản cài đặt mới mặc định là tắt. Các bản cài đặt hiện có từ trước khi cài đặt này xuất hiện sẽ được di chuyển sang trạng thái bật, để quá trình nâng cấp không âm thầm làm mất quyền truy cập camera vốn hoạt động trước đó.
- Khi tắt: các lệnh
camera.*trả vềCAMERA_DISABLED: enable Camera in Settings.
Quyền
CAMERAlà bắt buộc cho cảcamera.snapvàcamera.clip; nếu quyền bị thiếu hoặc bị từ chối, hệ thống trả vềCAMERA_PERMISSION_REQUIRED.RECORD_AUDIOlà bắt buộc đối vớicamera.clipkhiincludeAudiolàtrue; nếu quyền bị thiếu hoặc bị từ chối, hệ thống trả vềMIC_PERMISSION_REQUIRED.
Yêu cầu chạy ở tiền cảnh trên Android
Tương tựcanvas.*, Node Android chỉ cho phép các lệnh camera.* ở tiền cảnh. Các lệnh gọi trong nền trả về NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Các lệnh Android (qua Gateway node.invoke)
-
camera.list- Nội dung phản hồi:
devices— mảng gồm các{ id, name, position, deviceType }.
- Nội dung phản hồi:
-
camera.snap- Tham số:
facing(front|back, mặc địnhfront),quality(mặc định0.95, được giới hạn ở[0.1, 1.0]),maxWidth(mặc định1600),deviceId(tùy chọn; id không xác định sẽ thất bại vớiINVALID_REQUEST). - Nội dung phản hồi:
format: "jpg",base64,width,height. - Giới hạn nội dung: được nén lại để giữ dữ liệu base64 dưới 5MB (cùng giới hạn với iOS).
- Tham số:
-
camera.clip- Tham số:
facing(mặc địnhfront),durationMs(mặc định3000, được giới hạn ở[200, 60000]),includeAudio(mặc địnhtrue),deviceId(tùy chọn). - Nội dung phản hồi:
format: "mp4",base64,durationMs,hasAudio. - Giới hạn nội dung: MP4 thô bị giới hạn ở 18MB trước khi mã hóa base64; các đoạn video vượt kích thước sẽ thất bại với
PAYLOAD_TOO_LARGE(giảmdurationMsrồi thử lại).
- Tham số:
Ứng dụng macOS
Cài đặt người dùng trên macOS
Ứng dụng đồng hành trên macOS cung cấp một hộp kiểm:- Settings → General → Allow Camera (
openclaw.cameraEnabled).- Mặc định: tắt.
- Khi tắt: các yêu cầu camera trả về
CAMERA_DISABLED: enable Camera in Settings.
Trình hỗ trợ CLI (gọi Node)
Sử dụng CLIopenclaw chính để gọi các lệnh camera trên Node macOS.
openclaw nodes camera snapmặc định làmaxWidth=1600trừ khi bị ghi đè.camera.snapchờdelayMs(mặc định 2000ms, được giới hạn ở[0, 10000]) sau khi khởi động và ổn định độ phơi sáng rồi mới chụp.- Nội dung ảnh được nén lại để giữ dữ liệu base64 dưới 5MB.
Máy chủ Node Linux
Plugin Node Linux đi kèm bổ sung khả năng chụp từ camera cho dịch vụ CLIopenclaw node. Plugin hoạt động trên máy chủ không có giao diện đồ họa và không yêu cầu ứng dụng máy tính Linux.
Quyền truy cập camera mặc định bị tắt. Bật quyền này trong mục Plugin, sau đó khởi động lại dịch vụ Node để thông tin quảng bá Gateway của dịch vụ được tạo lại:
- FFmpeg có đầu vào V4L2,
libx264và hỗ trợ AAC - một thiết bị
/dev/video*mà người dùng chạy dịch vụ Node có thể đọc; trên các bản phân phối phổ biến, hãy thêm người dùng đó vào nhómvideo - đối với các đoạn video dùng
includeAudio: truemặc định, cần có máy chủ PulseAudio hoạt động hoặc lớp tương thích PulseAudio của PipeWire với một nguồn mặc định
camera.list; FFmpeg thăm dò từng ứng viên /dev/video* và bỏ qua các Node chỉ có siêu dữ liệu hoặc chỉ có đầu ra. position của thiết bị là unknown, vì vậy các yêu cầu về hướng camera không có deviceId sẽ tạo ra một ảnh hoặc đoạn video ở vị trí unknown, thay vì tuyên bố đó là camera trước hoặc sau. Sử dụng deviceId khi máy chủ có nhiều camera. camera.snap sử dụng quá trình khởi động đầu vào FFmpeg cho delayMs và giữ nguyên tỷ lệ khung hình trong khi giới hạn chiều rộng. camera.clip ghi âm thanh từ micrô làm rãnh âm thanh MP4; OpenClaw chủ ý không cung cấp lệnh micrô độc lập.
Plugin sử dụng libx264 cho video MP4 và không âm thầm thay đổi codec. Bản dựng FFmpeg thiếu đầu vào hoặc bộ mã hóa bắt buộc sẽ trả về CAMERA_UNAVAILABLE. Ảnh và đoạn video có thể vượt quá giới hạn nội dung base64 25MB sẽ thất bại với PAYLOAD_TOO_LARGE.
camera.snap và camera.clip vẫn là các lệnh nguy hiểm. Chỉ thêm chúng vào gateway.nodes.allowCommands khi bạn chủ ý kích hoạt khả năng chụp; chỉ bật Plugin không thể bỏ qua chính sách Gateway.
An toàn và giới hạn thực tế
- Quyền truy cập camera và micrô kích hoạt các lời nhắc quyền thông thường của hệ điều hành (và yêu cầu chuỗi mô tả mục đích sử dụng trong
Info.plist). - Các đoạn video bị giới hạn ở 60s để tránh nội dung Node quá lớn (chi phí bổ sung của base64 cộng với giới hạn tin nhắn).