---
read_when:
    - การเพิ่มหรือแก้ไขการจับภาพจากกล้องบนโหนด iOS/Android หรือ macOS
    - การขยายเวิร์กโฟลว์ไฟล์ชั่วคราว MEDIA ที่เอเจนต์เข้าถึงได้
summary: 'การจับภาพจากกล้อง (โหนด iOS/Android + แอป macOS) สำหรับการใช้งานของเอเจนต์: รูปภาพ (jpg) และคลิปวิดีโอสั้น (mp4)'
title: การจับภาพจากกล้อง
x-i18n:
    generated_at: "2026-06-27T17:46:17Z"
    model: gpt-5.5
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 8cb02b1e0e5d68e537dc699bcabacfb48b7beaf07459bf47800810a721191795
    source_path: nodes/camera.md
    workflow: 16
---

OpenClaw รองรับ **การจับภาพจากกล้อง** สำหรับเวิร์กโฟลว์ของเอเจนต์:

- **โหนด iOS** (จับคู่ผ่าน Gateway): จับภาพ **รูปถ่าย** (`jpg`) หรือ **คลิปวิดีโอสั้น** (`mp4` พร้อมเสียงเพิ่มเติมได้) ผ่าน `node.invoke`
- **โหนด Android** (จับคู่ผ่าน Gateway): จับภาพ **รูปถ่าย** (`jpg`) หรือ **คลิปวิดีโอสั้น** (`mp4` พร้อมเสียงเพิ่มเติมได้) ผ่าน `node.invoke`
- **แอป macOS** (โหนดผ่าน Gateway): จับภาพ **รูปถ่าย** (`jpg`) หรือ **คลิปวิดีโอสั้น** (`mp4` พร้อมเสียงเพิ่มเติมได้) ผ่าน `node.invoke`

การเข้าถึงกล้องทั้งหมดถูกควบคุมด้วย **การตั้งค่าที่ผู้ใช้ควบคุมได้**

## โหนด iOS

### การตั้งค่าผู้ใช้ (เปิดเป็นค่าเริ่มต้น)

- แท็บการตั้งค่า 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)
    - `quality`: `0..1` (ไม่บังคับ; ค่าเริ่มต้น `0.9`)
    - `format`: ปัจจุบันคือ `jpg`
    - `delayMs`: ตัวเลข (ไม่บังคับ; ค่าเริ่มต้น `0`)
    - `deviceId`: สตริง (ไม่บังคับ; จาก `camera.list`)
  - เพย์โหลดการตอบกลับ:
    - `format: "jpg"`
    - `base64: "<...>"`
    - `width`, `height`
  - ตัวป้องกันเพย์โหลด: รูปถ่ายจะถูกบีบอัดซ้ำเพื่อให้เพย์โหลด base64 มีขนาดต่ำกว่า 5 MB

- `camera.clip`
  - พารามิเตอร์:
    - `facing`: `front|back` (ค่าเริ่มต้น: `front`)
    - `durationMs`: ตัวเลข (ค่าเริ่มต้น `3000` จำกัดค่าสูงสุดไว้ที่ `60000`)
    - `includeAudio`: บูลีน (ค่าเริ่มต้น `true`)
    - `format`: ปัจจุบันคือ `mp4`
    - `deviceId`: สตริง (ไม่บังคับ; จาก `camera.list`)
  - เพย์โหลดการตอบกลับ:
    - `format: "mp4"`
    - `base64: "<...>"`
    - `durationMs`
    - `hasAudio`

### ข้อกำหนดเรื่องการอยู่เบื้องหน้า

เช่นเดียวกับ `canvas.*` โหนด iOS อนุญาตคำสั่ง `camera.*` เฉพาะใน **เบื้องหน้า** เท่านั้น การเรียกใช้งานเบื้องหลังจะส่งคืน `NODE_BACKGROUND_UNAVAILABLE`

### ตัวช่วย CLI

วิธีที่ง่ายที่สุดในการรับไฟล์สื่อคือผ่านตัวช่วย CLI ซึ่งจะเขียนสื่อที่ถอดรหัสแล้วไปยังไฟล์ชั่วคราวและพิมพ์พาธที่บันทึกไว้

ตัวอย่าง:

```bash
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

### การตั้งค่าผู้ใช้ Android (เปิดเป็นค่าเริ่มต้น)

- ชีตการตั้งค่า Android → **กล้อง** → **อนุญาตกล้อง** (`camera.enabled`)
  - ค่าเริ่มต้น: **เปิด** (คีย์ที่หายไปจะถือว่าเปิดใช้งาน)
  - เมื่อปิด: คำสั่ง `camera.*` จะส่งคืน `CAMERA_DISABLED`

### สิทธิ์

- Android ต้องใช้สิทธิ์ขณะรันไทม์:
  - `CAMERA` สำหรับทั้ง `camera.snap` และ `camera.clip`
  - `RECORD_AUDIO` สำหรับ `camera.clip` เมื่อ `includeAudio=true`

หากไม่มีสิทธิ์ แอปจะแจ้งขอเมื่อทำได้; หากถูกปฏิเสธ คำขอ `camera.*` จะล้มเหลวด้วยข้อผิดพลาด
`*_PERMISSION_REQUIRED`

### ข้อกำหนดเรื่องการอยู่เบื้องหน้าของ Android

เช่นเดียวกับ `canvas.*` โหนด Android อนุญาตคำสั่ง `camera.*` เฉพาะใน **เบื้องหน้า** เท่านั้น การเรียกใช้งานเบื้องหลังจะส่งคืน `NODE_BACKGROUND_UNAVAILABLE`

### คำสั่ง Android (ผ่าน Gateway `node.invoke`)

- `camera.list`
  - เพย์โหลดการตอบกลับ:
    - `devices`: อาร์เรย์ของ `{ id, name, position, deviceType }`

### ตัวป้องกันเพย์โหลด

รูปถ่ายจะถูกบีบอัดซ้ำเพื่อให้เพย์โหลด base64 มีขนาดต่ำกว่า 5 MB

## แอป macOS

### การตั้งค่าผู้ใช้ (ปิดเป็นค่าเริ่มต้น)

แอปคู่หู macOS แสดงช่องทำเครื่องหมาย:

- **การตั้งค่า → ทั่วไป → อนุญาตกล้อง** (`openclaw.cameraEnabled`)
  - ค่าเริ่มต้น: **ปิด**
  - เมื่อปิด: คำขอกล้องจะส่งคืน "กล้องถูกปิดใช้งานโดยผู้ใช้"

### ตัวช่วย CLI (เรียกใช้โหนด)

ใช้ CLI หลัก `openclaw` เพื่อเรียกใช้คำสั่งกล้องบนโหนด macOS

ตัวอย่าง:

```bash
openclaw nodes camera list --node <id>            # list camera ids
openclaw nodes camera snap --node <id>            # prints saved 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 saved path
openclaw nodes camera clip --node <id> --duration-ms 3000      # prints saved 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`) เพื่อหลีกเลี่ยงเพย์โหลดโหนดที่ใหญ่เกินไป (โอเวอร์เฮดของ base64 + ขีดจำกัดข้อความ)

## วิดีโอหน้าจอ macOS (ระดับ OS)

สำหรับวิดีโอ_หน้าจอ_ (ไม่ใช่กล้อง) ให้ใช้คู่หู macOS:

```bash
openclaw nodes screen record --node <id> --duration 10s --fps 15   # prints saved path
```

หมายเหตุ:

- ต้องใช้สิทธิ์ **การบันทึกหน้าจอ** ของ macOS (TCC)

## ที่เกี่ยวข้อง

- [การรองรับรูปภาพและสื่อ](/th/nodes/images)
- [การเข้าใจสื่อ](/th/nodes/media-understanding)
- [คำสั่งตำแหน่งที่ตั้ง](/th/nodes/location-command)
