jpg) или короткого видеоклипа (mp4, с необязательным звуком) через Gateway node.invoke.
На каждой платформе доступ к камере контролируется пользовательской настройкой.
Узел iOS
Пользовательская настройка iOS
- Вкладка iOS Settings → Camera → Allow Camera (
camera.enabled).- По умолчанию: включено (отсутствующий ключ считается включённым).
- Если выключено: команды
camera.*возвращаютCAMERA_DISABLED.
Команды iOS (через Gateway node.invoke)
-
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.*, узел iOS разрешает команды camera.* только в активном режиме. Фоновые вызовы возвращают NODE_BACKGROUND_UNAVAILABLE.
Вспомогательная команда CLI
Проще всего получить медиафайлы с помощью вспомогательной команды CLI, которая записывает декодированные медиаданные во временный файл и выводит путь к сохранённому файлу.nodes camera snap по умолчанию имеет значение --facing both, поэтому съёмка выполняется одновременно передней и задней камерами, чтобы агент получил оба ракурса; передайте --device-id с одним явно указанным направлением камеры (both отклоняется, если задано --device-id). Выходные файлы являются временными (в каталоге временных файлов ОС), если не создана собственная обёртка.
Узел 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.*, узел Android разрешает команды camera.* только в активном режиме. Фоновые вызовы возвращают NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Команды Android (через Gateway node.invoke)
-
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 до кодирования в base64 ограничен 18MB; слишком большие клипы завершаются ошибкой
PAYLOAD_TOO_LARGE(уменьшитеdurationMsи повторите попытку).
- Параметры:
Приложение macOS
Пользовательская настройка macOS
В сопутствующем приложении macOS доступен флажок:- Settings → General → Allow Camera (
openclaw.cameraEnabled).- По умолчанию: выключено.
- Если выключено: запросы камеры возвращают
CAMERA_DISABLED: enable Camera in Settings.
Вспомогательная команда CLI (вызов узла)
Используйте основной CLIopenclaw для вызова команд камеры на узле macOS.
openclaw nodes camera snapпо умолчанию имеет значениеmaxWidth=1600, если оно не переопределено.camera.snapожидаетdelayMs(по умолчанию 2000ms, ограничивается значением[0, 10000]) после прогрева и стабилизации экспозиции перед съёмкой.- Фотографии повторно сжимаются, чтобы размер полезной нагрузки в кодировке base64 не превышал 5MB.
Хост узла Linux
Встроенный плагин Linux Node добавляет захват с камеры в службу CLIopenclaw node. Он работает на хосте без графического интерфейса и не требует приложения Linux для рабочего стола.
По умолчанию доступ к камере выключен. Включите его в записи плагина, затем перезапустите службу узла, чтобы заново сформировать её объявление Gateway:
- FFmpeg с поддержкой входных данных V4L2,
libx264и AAC - устройство
/dev/video*, доступное для чтения пользователю службы узла; в распространённых дистрибутивах добавьте этого пользователя в группуvideo - для клипов со значением
includeAudio: trueпо умолчанию — работающий сервер PulseAudio или слой совместимости PipeWire с PulseAudio, имеющий источник по умолчанию
camera.list; FFmpeg проверяет каждого кандидата /dev/video* и исключает узлы без метаданных или предназначенные только для вывода. Устройство position имеет значение unknown, поэтому запросы направления камеры без deviceId создают одну фотографию или один клип с положением unknown, не заявляя, что камера передняя или задняя. Используйте deviceId, если на хосте несколько камер. camera.snap использует прогрев входных данных FFmpeg в течение delayMs и сохраняет соотношение сторон при ограничении ширины. camera.clip записывает звук с микрофона в качестве звуковой дорожки MP4; OpenClaw намеренно не предоставляет отдельную команду для микрофона.
Плагин использует libx264 для видео MP4 и не меняет кодеки без уведомления. Сборка FFmpeg без необходимых входных модулей или кодировщиков возвращает CAMERA_UNAVAILABLE. Если размер фотографий или клипов превышает лимит полезной нагрузки base64 в 25MB, возвращается ошибка PAYLOAD_TOO_LARGE.
camera.snap и camera.clip остаются опасными командами. Добавляйте их в gateway.nodes.allowCommands только при намеренном разрешении захвата; одного включения плагина недостаточно для обхода политики Gateway.
Безопасность и практические ограничения
- Доступ к камере и микрофону вызывает стандартные запросы разрешений ОС (и требует строк описания использования в
Info.plist). - Продолжительность видеоклипов ограничена 60s, чтобы избежать чрезмерно больших полезных нагрузок узла (накладные расходы base64 и ограничения размера сообщений).