Nodes and media
การจับภาพจากกล้อง
OpenClaw รองรับ การถ่ายภาพจากกล้อง สำหรับเวิร์กโฟลว์ของเอเจนต์:
- iOS Node (จับคู่ผ่าน Gateway): ถ่าย ภาพถ่าย (
jpg) หรือ คลิปวิดีโอสั้น (mp4พร้อมเสียงหรือไม่ก็ได้) ผ่านnode.invoke - Android Node (จับคู่ผ่าน Gateway): ถ่าย ภาพถ่าย (
jpg) หรือ คลิปวิดีโอสั้น (mp4พร้อมเสียงหรือไม่ก็ได้) ผ่านnode.invoke - แอป macOS (Node ผ่าน Gateway): ถ่าย ภาพถ่าย (
jpg) หรือ คลิปวิดีโอสั้น (mp4พร้อมเสียงหรือไม่ก็ได้) ผ่านnode.invoke
การเข้าถึงกล้องทั้งหมดถูกควบคุมด้วย การตั้งค่าที่ผู้ใช้ควบคุมได้
iOS Node
การตั้งค่าของผู้ใช้ (เปิดโดยค่าเริ่มต้น)
- แท็บการตั้งค่า iOS → กล้อง → อนุญาตกล้อง (
camera.enabled)- ค่าเริ่มต้น: เปิด (หากไม่มีคีย์นี้ จะถือว่าเปิดใช้งาน)
- เมื่อปิด: คำสั่ง
camera.*จะส่งคืนCAMERA_DISABLED
คำสั่ง (ผ่าน Gateway node.invoke)
-
camera.list- เพย์โหลดการตอบกลับ:
devices: อาร์เรย์ของ{ id, name, position, deviceType }
- เพย์โหลดการตอบกลับ:
-
camera.snap- พารามิเตอร์:
facing:front|back(ค่าเริ่มต้น:front)maxWidth: ตัวเลข (ไม่บังคับ; ค่าเริ่มต้น1600บน iOS Node)quality:0..1(ไม่บังคับ; ค่าเริ่มต้น0.9)format: ปัจจุบันคือjpgdelayMs: ตัวเลข (ไม่บังคับ; ค่าเริ่มต้น0)deviceId: สตริง (ไม่บังคับ; จากcamera.list)
- เพย์โหลดการตอบกลับ:
format: "jpg"base64: "<...>"width,height
- การป้องกันขนาดเพย์โหลด: ภาพถ่ายจะถูกบีบอัดใหม่เพื่อให้เพย์โหลด base64 มีขนาดต่ำกว่า 5 MB
- พารามิเตอร์:
-
camera.clip- พารามิเตอร์:
facing:front|back(ค่าเริ่มต้น:front)durationMs: ตัวเลข (ค่าเริ่มต้น3000และจำกัดค่าสูงสุดไว้ที่60000)includeAudio: บูลีน (ค่าเริ่มต้นtrue)format: ปัจจุบันคือmp4deviceId: สตริง (ไม่บังคับ; จากcamera.list)
- เพย์โหลดการตอบกลับ:
format: "mp4"base64: "<...>"durationMshasAudio
- พารามิเตอร์:
ข้อกำหนดเรื่องการอยู่เบื้องหน้า
เช่นเดียวกับ canvas.* iOS Node อนุญาตคำสั่ง camera.* เฉพาะเมื่ออยู่ใน เบื้องหน้า เท่านั้น การเรียกใช้เบื้องหลังจะส่งคืน NODE_BACKGROUND_UNAVAILABLE
ตัวช่วย CLI (ไฟล์ชั่วคราว + MEDIA)
วิธีที่ง่ายที่สุดในการรับไฟล์แนบคือผ่านตัวช่วย CLI ซึ่งจะเขียนสื่อที่ถอดรหัสแล้วลงในไฟล์ชั่วคราวและพิมพ์ MEDIA:<path>
ตัวอย่าง:
openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio
หมายเหตุ:
nodes camera snapใช้ทั้ง สอง ทิศทางกล้องเป็นค่าเริ่มต้น เพื่อให้เอเจนต์มีภาพจากทั้งสองมุมมอง- ไฟล์ผลลัพธ์เป็นไฟล์ชั่วคราว (ในไดเรกทอรีชั่วคราวของ OS) เว้นแต่คุณจะสร้าง wrapper ของคุณเอง
Android Node
การตั้งค่าของผู้ใช้ Android (เปิดโดยค่าเริ่มต้น)
- แผ่นการตั้งค่า Android → กล้อง → อนุญาตกล้อง (
camera.enabled)- ค่าเริ่มต้น: เปิด (หากไม่มีคีย์นี้ จะถือว่าเปิดใช้งาน)
- เมื่อปิด: คำสั่ง
camera.*จะส่งคืนCAMERA_DISABLED
สิทธิ์
- Android ต้องใช้สิทธิ์ขณะรันไทม์:
CAMERAสำหรับทั้งcamera.snapและcamera.clipRECORD_AUDIOสำหรับcamera.clipเมื่อincludeAudio=true
หากไม่มีสิทธิ์ แอปจะแสดงพรอมป์เมื่อทำได้; หากถูกปฏิเสธ คำขอ camera.* จะล้มเหลวพร้อมข้อผิดพลาด
*_PERMISSION_REQUIRED
ข้อกำหนดเรื่องการอยู่เบื้องหน้าบน Android
เช่นเดียวกับ canvas.* Android Node อนุญาตคำสั่ง camera.* เฉพาะเมื่ออยู่ใน เบื้องหน้า เท่านั้น การเรียกใช้เบื้องหลังจะส่งคืน NODE_BACKGROUND_UNAVAILABLE
คำสั่ง Android (ผ่าน Gateway node.invoke)
camera.list- เพย์โหลดการตอบกลับ:
devices: อาร์เรย์ของ{ id, name, position, deviceType }
- เพย์โหลดการตอบกลับ:
การป้องกันขนาดเพย์โหลด
ภาพถ่ายจะถูกบีบอัดใหม่เพื่อให้เพย์โหลด base64 มีขนาดต่ำกว่า 5 MB
แอป macOS
การตั้งค่าของผู้ใช้ (ปิดโดยค่าเริ่มต้น)
แอปคู่ขนานบน macOS แสดงช่องทำเครื่องหมาย:
- การตั้งค่า → ทั่วไป → อนุญาตกล้อง (
openclaw.cameraEnabled)- ค่าเริ่มต้น: ปิด
- เมื่อปิด: คำขอกล้องจะส่งคืน "กล้องถูกปิดใช้งานโดยผู้ใช้"
ตัวช่วย CLI (การเรียกใช้ Node)
ใช้ CLI หลักของ openclaw เพื่อเรียกใช้คำสั่งกล้องบน macOS Node
ตัวอย่าง:
openclaw nodes camera list --node <id> # list camera ids
openclaw nodes camera snap --node <id> # prints 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 # prints MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<path> (legacy flag)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
หมายเหตุ:
openclaw nodes camera snapใช้ค่าเริ่มต้นเป็นmaxWidth=1600เว้นแต่จะถูกแทนที่- บน macOS,
camera.snapจะรอdelayMs(ค่าเริ่มต้น 2000ms) หลังจากการวอร์มอัป/การปรับแสงนิ่งแล้วก่อนถ่ายภาพ - เพย์โหลดภาพถ่ายจะถูกบีบอัดใหม่เพื่อให้ base64 มีขนาดต่ำกว่า 5 MB
ความปลอดภัย + ขีดจำกัดเชิงปฏิบัติ
- การเข้าถึงกล้องและไมโครโฟนจะเรียกพรอมป์สิทธิ์ตามปกติของ OS (และต้องมีสตริงการใช้งานใน Info.plist)
- คลิปวิดีโอถูกจำกัดความยาว (ปัจจุบัน
<= 60s) เพื่อหลีกเลี่ยงเพย์โหลด Node ที่มีขนาดใหญ่เกินไป (โอเวอร์เฮด base64 + ขีดจำกัดข้อความ)
วิดีโอหน้าจอ macOS (ระดับ OS)
สำหรับวิดีโอ หน้าจอ (ไม่ใช่กล้อง) ให้ใช้แอปคู่ขนานบน macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
หมายเหตุ:
- ต้องใช้สิทธิ์ การบันทึกหน้าจอ ของ macOS (TCC)