Chuyển đến nội dung chính
OpenClaw hỗ trợ chụp từ camera cho các quy trình làm việc của tác tử trên các Node iOS, Android, macOSLinux đã ghép đôi: chụp ảnh (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 → CameraAllow 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 }.
  • camera.snap
    • Tham số:
      • facing: front|back (mặc định: front)
      • maxWidth: số (tùy chọn; mặc định 1600)
      • quality: 0..1 (tùy chọn; mặc định 0.9, được giới hạn ở [0.05, 1.0])
      • format: hiện là jpg
      • delayMs: số (tùy chọn; mặc định 0, đượ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.
  • camera.clip
    • Tham số:
      • facing: front|back (mặc định: front)
      • durationMs: số (mặc định 3000, được giới hạn ở [250, 60000])
      • includeAudio: boolean (mặc định true)
      • format: hiện là mp4
      • deviceId: chuỗi (tùy chọn; từ camera.list)
    • Nội dung phản hồi: format: "mp4", base64, durationMs, hasAudio.

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 → CameraAllow 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

  • CAMERA là bắt buộc cho cả camera.snapcamera.clip; nếu quyền bị thiếu hoặc bị từ chối, hệ thống trả về CAMERA_PERMISSION_REQUIRED.
  • RECORD_AUDIO là bắt buộc đối với camera.clip khi includeAudiotrue; nếu quyền bị thiếu hoặc bị từ chối, hệ thống trả về MIC_PERMISSION_REQUIRED.
Ứng dụng sẽ yêu cầu quyền khi chạy nếu có thể.

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 }.
  • camera.snap
    • Tham số: facing (front|back, mặc định front), quality (mặc định 0.95, được giới hạn ở [0.1, 1.0]), maxWidth (mặc định 1600), deviceId (tùy chọn; id không xác định sẽ thất bại với INVALID_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).
  • camera.clip
    • Tham số: facing (mặc định front), durationMs (mặc định 3000, được giới hạn ở [200, 60000]), includeAudio (mặc định true), 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ảm durationMs rồi thử lại).

Ứ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 CLI openclaw chính để gọi các lệnh camera trên Node macOS.
  • openclaw nodes camera snap mặc định là maxWidth=1600 trừ khi bị ghi đè.
  • camera.snap chờ 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ụ CLI openclaw 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:
Yêu cầu:
  • FFmpeg có đầu vào V4L2, libx264 và 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óm video
  • đối với các đoạn video dùng includeAudio: true mặ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
Linux trả về các đường dẫn thiết bị V4L2 có khả năng chụp và có thể đọc từ 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.snapcamera.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).

Video màn hình macOS (cấp hệ điều hành)

Đối với video màn hình (không phải camera), hãy sử dụng ứng dụng đồng hành trên macOS:
Yêu cầu quyền Screen Recording (TCC) của macOS.

Liên quan