Захват с камеры (агент)
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 МБ.
- Параметры:
-
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 (временные файлы + MEDIA)
Самый простой способ получить вложения — через помощник CLI, который записывает декодированные медиа во временный файл и выводит MEDIA:<путь>.
Примеры:
openclaw nodes camera snap --node <id> # по умолчанию: обе стороны front + back (2 строки MEDIA)
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 по умолчанию делает обе стороны, чтобы дать агенту оба вида.
- Выходные файлы временные (во временном каталоге ОС), если вы не создадите свою собственную обертку.
Узел Android
Пользовательская настройка (по умолчанию включена)
- Лист настроек Android → Камера → Разрешить камеру (camera.enabled)
- По умолчанию: включена (отсутствующий ключ обрабатывается как включенный).
- Когда выключена: команды camera.* возвращают CAMERA_DISABLED.
Разрешения
- Android требует разрешения во время выполнения:
- CAMERA для camera.snap и camera.clip.
- RECORD_AUDIO для camera.clip когда includeAudio=true.
Если разрешения отсутствуют, приложение запросит их при возможности; если отклонены, запросы camera.* завершатся неудачей с ошибкой *_PERMISSION_REQUIRED.
Требование переднего плана
Как и canvas.*, узел Android разрешает команды camera.* только на переднем плане. Фоновые вызовы возвращают NODE_BACKGROUND_UNAVAILABLE.
Защита полезной нагрузки
Фотографии перекомпрессируются, чтобы поддерживать полезную нагрузку base64 до 5 МБ.
Приложение macOS
Пользовательская настройка (по умолчанию выключена)
Приложение-компаньон macOS предоставляет флажок:
- Настройки → Общие → Разрешить камеру (openclaw.cameraEnabled)
- По умолчанию: выключена
- Когда выключена: запросы камеры возвращают "Камера отключена пользователем".
Помощник CLI (вызов узла)
Используйте основной CLI openclaw для вызова команд камеры на узле macOS.
Примеры:
openclaw nodes camera list --node <id> # список идентификаторов камер
openclaw nodes camera snap --node <id> # выводит MEDIA:<путь>
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 # выводит MEDIA:<путь>
openclaw nodes camera clip --node <id> --duration-ms 3000 # выводит MEDIA:<путь> (устаревший флаг)
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 МБ.
Безопасность + практические ограничения
- Доступ к камере и микрофону вызывает обычные запросы разрешений ОС (и требует строк использования в Info.plist).
- Видеоклипы ограничены (в настоящее время <= 60s), чтобы избежать слишком больших полезных нагрузок узла (накладные расходы base64 + ограничения сообщений).
Видео экрана macOS (уровень ОС)
Для видео экрана (не камеры) используйте компаньон macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # выводит MEDIA:<путь>
Примечания:
- Требуется разрешение macOS Запись экрана (TCC).