OpenClaw 支持在 iOS、Android 和 macOS 节点上通过 node.invoke 进行摄像头捕获,用于代理工作流。
概述
摄像头捕获功能允许 AI 代理访问设备摄像头,拍摄照片或录制视频片段。所有平台都需要在前台运行,后台调用会返回 NODE_BACKGROUND_UNAVAILABLE 错误。
iOS 节点
设置
- 位置: Camera → Allow Camera
- 配置项:
camera.enabled - 默认值: 开启
- 禁用响应:
CAMERA_DISABLED
命令
camera.list - 列出相机设备
返回设备上所有可用的相机列表:
{
"devices": [
{ "id": "...", "name": "...", "position": "front|back", "deviceType": "..." }
]
}
camera.snap - 拍摄照片
捕获单张照片:
facing- 相机方向:front或backmaxWidth- 最大宽度(像素)quality- 质量 (0.0 - 1.0)format- 格式:jpg或pngdelayMs- 预热后延迟(毫秒)deviceId- 特定设备 ID
返回:
{
"format": "jpg",
"base64": "<...>",
"width": 1920,
"height": 1080
}
负载 < 5 MB
camera.clip - 录制视频片段
录制短视频:
facing- 相机方向durationMs- 持续时间(毫秒,≤ 60s)includeAudio- 是否包含音频format- 格式:mp4deviceId- 特定设备 ID
返回:
{
"format": "mp4",
"base64": "<...>",
"durationMs": 3000,
"hasAudio": true
}
CLI 示例
# 拍摄照片
openclaw nodes camera snap --node <node-id>
# 录制 3 秒视频
openclaw nodes camera clip --node <node-id> --duration 3000
注意事项
- 仅前台可用 - 后台返回
NODE_BACKGROUND_UNAVAILABLE - 照片负载重新压缩以保持 base64 < 5 MB
Android 节点
设置
- 位置: Camera → Allow Camera
- 配置项:
camera.enabled - 默认值: 开启
- 禁用响应:
CAMERA_DISABLED
权限要求
CAMERA- 拍照和录像RECORD_AUDIO- 录制带音频的视频片段
注意事项
- 仅前台可用 - 后台返回
NODE_BACKGROUND_UNAVAILABLE - 照片重新压缩以保持 base64 < 5 MB
macOS 应用
设置
- 位置: Settings → General → Allow Camera
- 配置项:
openclaw.cameraEnabled - 默认值: 关闭
- 禁用响应: "Camera disabled by user"
CLI 示例
# 列出相机设备
openclaw nodes camera list --node <node-id>
# 录制无音频视频
openclaw nodes camera clip --node <node-id> --no-audio
注意事项
camera.snap在预热后等待delayMs毫秒再捕获- 照片负载重新压缩以保持 base64 < 5 MB
macOS 屏幕录制
macOS 还支持屏幕录制功能:
# 录制 10 秒屏幕视频,15 fps
openclaw nodes screen record --node <node-id> --duration 10s --fps 15
权限要求
需要 macOS 屏幕录制权限 (TCC)
安全限制
- 所有平台都需要操作系统权限提示(相机/麦克风)
- 视频片段限制为 ≤ 60 秒以避免负载过大
- 所有照片自动重新压缩以保持 base64 编码 < 5 MB
- 所有命令仅在应用前台时可用
使用示例
在代理工作流中使用相机:
// 列出可用相机
const cameras = await node.invoke('camera.list');
// 拍摄后置相机照片
const photo = await node.invoke('camera.snap', {
facing: 'back',
maxWidth: 1920,
quality: 0.85,
format: 'jpg'
});
// 录制 5 秒视频片段
const clip = await node.invoke('camera.clip', {
facing: 'front',
durationMs: 5000,
includeAudio: true,
format: 'mp4'
});
提示
更多详情请参考 官方文档 - Camera Capture