Nodes and media
การจับภาพจากกล้อง
OpenClaw รองรับการจับภาพจากกล้องสำหรับเวิร์กโฟลว์ของเอเจนต์บน Node iOS, Android และ macOS ที่จับคู่แล้ว โดยสามารถถ่ายภาพ (jpg) หรือบันทึกคลิปวิดีโอสั้น (mp4 พร้อมเสียงได้ตามต้องการ) ผ่าน node.invoke ของ Gateway
การเข้าถึงกล้องทั้งหมดอยู่ภายใต้การควบคุมของการตั้งค่าผู้ใช้ในแต่ละแพลตฟอร์ม
Node iOS
การตั้งค่าผู้ใช้บน iOS
- แท็บ iOS Settings → Camera → Allow Camera (
camera.enabled)- ค่าเริ่มต้น: เปิด (หากไม่มีคีย์ จะถือว่าเปิดใช้งาน)
- เมื่อปิด: คำสั่ง
camera.*จะส่งคืนCAMERA_DISABLED
คำสั่ง iOS (ผ่าน node.invoke ของ Gateway)
-
camera.list- เพย์โหลดการตอบกลับ:
devices— อาร์เรย์ของ{ id, name, position, deviceType }
- เพย์โหลดการตอบกลับ:
-
camera.snap- พารามิเตอร์:
facing:front|back(ค่าเริ่มต้น:front)maxWidth: ตัวเลข (ไม่บังคับ; ค่าเริ่มต้น1600)quality:0..1(ไม่บังคับ; ค่าเริ่มต้น0.9และจำกัดให้อยู่ในช่วง[0.05, 1.0])format: ปัจจุบันคือjpgdelayMs: ตัวเลข (ไม่บังคับ; ค่าเริ่มต้น0และจำกัดภายในไว้สูงสุดที่10000)deviceId: สตริง (ไม่บังคับ; ได้จากcamera.list)
- เพย์โหลดการตอบกลับ:
format: "jpg",base64,width,height - การป้องกันขนาดเพย์โหลด: บีบอัดภาพใหม่เพื่อให้เพย์โหลดที่เข้ารหัสแบบ base64 มีขนาดต่ำกว่า 5MB
- พารามิเตอร์:
-
camera.clip- พารามิเตอร์:
facing:front|back(ค่าเริ่มต้น:front)durationMs: ตัวเลข (ค่าเริ่มต้น3000และจำกัดให้อยู่ในช่วง[250, 60000])includeAudio: ค่าบูลีน (ค่าเริ่มต้นtrue)format: ปัจจุบันคือmp4deviceId: สตริง (ไม่บังคับ; ได้จากcamera.list)
- เพย์โหลดการตอบกลับ:
format: "mp4",base64,durationMs,hasAudio
- พารามิเตอร์:
ข้อกำหนดการทำงานเบื้องหน้าของ iOS
เช่นเดียวกับ canvas.* Node iOS อนุญาตคำสั่ง camera.* เฉพาะขณะที่แอปอยู่ใน เบื้องหน้า เท่านั้น การเรียกใช้ขณะอยู่เบื้องหลังจะส่งคืน NODE_BACKGROUND_UNAVAILABLE
ตัวช่วย CLI
วิธีรับไฟล์สื่อที่ง่ายที่สุดคือใช้ตัวช่วย CLI ซึ่งจะเขียนสื่อที่ถอดรหัสแล้วลงในไฟล์ชั่วคราวและแสดงพาธที่บันทึกไว้
openclaw nodes camera snap --node <id> # ค่าเริ่มต้น: ทั้งกล้องหน้าและหลัง (2 บรรทัด MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audioค่าเริ่มต้นของ nodes camera snap คือ --facing both ซึ่งจับภาพจากทั้งกล้องหน้าและกล้องหลังเพื่อให้เอเจนต์เห็นภาพจากทั้งสองมุมมอง หากระบุ --device-id ต้องใช้ทิศทางกล้องเดียวอย่างชัดเจน (both จะถูกปฏิเสธเมื่อตั้งค่า --device-id) ไฟล์ผลลัพธ์เป็นไฟล์ชั่วคราว (ในไดเรกทอรีชั่วคราวของระบบปฏิบัติการ) เว้นแต่คุณจะสร้างตัวครอบคำสั่งของคุณเอง
Node Android
การตั้งค่าผู้ใช้บน Android
- แผง Android Settings → Camera → Allow Camera (
camera.enabled)- การติดตั้งใหม่มีค่าเริ่มต้นเป็นปิด การติดตั้งเดิมที่มีอยู่ก่อนเพิ่มการตั้งค่านี้จะถูกย้ายค่าเป็น เปิด เพื่อไม่ให้การอัปเกรดทำให้สูญเสียการเข้าถึงกล้องที่เคยใช้งานได้โดยไม่มีการแจ้งเตือน
- เมื่อปิด: คำสั่ง
camera.*จะส่งคืนCAMERA_DISABLED: enable Camera in Settings
สิทธิ์
- ต้องมีสิทธิ์
CAMERAสำหรับทั้งcamera.snapและcamera.clipหากไม่มีหรือปฏิเสธสิทธิ์ จะส่งคืนCAMERA_PERMISSION_REQUIRED - ต้องมีสิทธิ์
RECORD_AUDIOสำหรับcamera.clipเมื่อincludeAudioเป็นtrueหากไม่มีหรือปฏิเสธสิทธิ์ จะส่งคืนMIC_PERMISSION_REQUIRED
แอปจะแจ้งขอสิทธิ์ขณะทำงานเมื่อสามารถทำได้
ข้อกำหนดการทำงานเบื้องหน้าของ Android
เช่นเดียวกับ canvas.* Node Android อนุญาตคำสั่ง camera.* เฉพาะขณะที่แอปอยู่ใน เบื้องหน้า เท่านั้น การเรียกใช้ขณะอยู่เบื้องหลังจะส่งคืน NODE_BACKGROUND_UNAVAILABLE: command requires foreground
คำสั่ง Android (ผ่าน node.invoke ของ Gateway)
-
camera.list- เพย์โหลดการตอบกลับ:
devices— อาร์เรย์ของ{ id, name, position, deviceType }
- เพย์โหลดการตอบกลับ:
-
camera.snap- พารามิเตอร์:
facing(front|backค่าเริ่มต้นfront),quality(ค่าเริ่มต้น0.95และจำกัดให้อยู่ในช่วง[0.1, 1.0]),maxWidth(ค่าเริ่มต้น1600),deviceId(ไม่บังคับ; หากไม่รู้จักรหัสจะล้มเหลวด้วยINVALID_REQUEST) - เพย์โหลดการตอบกลับ:
format: "jpg",base64,width,height - การป้องกันขนาดเพย์โหลด: บีบอัดใหม่เพื่อให้ base64 มีขนาดต่ำกว่า 5MB (ใช้ขีดจำกัดเดียวกับ iOS)
- พารามิเตอร์:
-
camera.clip- พารามิเตอร์:
facing(ค่าเริ่มต้นfront),durationMs(ค่าเริ่มต้น3000และจำกัดให้อยู่ในช่วง[200, 60000]),includeAudio(ค่าเริ่มต้นtrue),deviceId(ไม่บังคับ) - เพย์โหลดการตอบกลับ:
format: "mp4",base64,durationMs,hasAudio - การป้องกันขนาดเพย์โหลด: MP4 ดิบถูกจำกัดไว้ที่ 18MB ก่อนเข้ารหัสแบบ base64 คลิปที่มีขนาดเกินจะล้มเหลวด้วย
PAYLOAD_TOO_LARGE(ลดdurationMsแล้วลองอีกครั้ง)
- พารามิเตอร์:
แอป macOS
การตั้งค่าผู้ใช้บน macOS
แอปคู่หู macOS มีช่องทำเครื่องหมายดังนี้:
- Settings → General → Allow Camera (
openclaw.cameraEnabled)- ค่าเริ่มต้น: ปิด
- เมื่อปิด: คำขอใช้กล้องจะส่งคืน
CAMERA_DISABLED: enable Camera in Settings
ตัวช่วย CLI (การเรียกใช้ Node)
ใช้ CLI หลัก openclaw เพื่อเรียกคำสั่งกล้องบน Node macOS
openclaw nodes camera list --node <id> # แสดงรายการรหัสกล้องopenclaw nodes camera snap --node <id> # แสดงพาธที่บันทึกไว้openclaw 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 # แสดงพาธที่บันทึกไว้openclaw nodes camera clip --node <id> --duration-ms 3000 # แสดงพาธที่บันทึกไว้ (แฟล็กเดิม)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audio- ค่าเริ่มต้นของ
openclaw nodes camera snapคือmaxWidth=1600เว้นแต่จะกำหนดค่าอื่น camera.snapจะรอเป็นเวลาdelayMs(ค่าเริ่มต้น 2000ms และจำกัดให้อยู่ในช่วง[0, 10000]) หลังจากอุ่นเครื่อง/รอให้การรับแสงคงที่ ก่อนจับภาพ- เพย์โหลดภาพถ่ายจะถูกบีบอัดใหม่เพื่อให้ base64 มีขนาดต่ำกว่า 5MB
ความปลอดภัยและขีดจำกัดในการใช้งานจริง
- การเข้าถึงกล้องและไมโครโฟนจะเรียกข้อความแจ้งขอสิทธิ์ตามปกติของระบบปฏิบัติการ (และต้องมีสตริงคำอธิบายการใช้งานใน
Info.plist) - คลิปวิดีโอถูกจำกัดไว้ที่ 60 วินาที เพื่อหลีกเลี่ยงเพย์โหลดของ Node ที่มีขนาดใหญ่เกินไป (โอเวอร์เฮดของ base64 รวมกับขีดจำกัดข้อความ)
วิดีโอหน้าจอบน macOS (ระดับระบบปฏิบัติการ)
สำหรับวิดีโอ_หน้าจอ_ (ไม่ใช่กล้อง) ให้ใช้แอปคู่หู macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # แสดงพาธที่บันทึกไว้ต้องมีสิทธิ์ Screen Recording ของ macOS (TCC)