Nodes and media

Съёмка камерой

OpenClaw поддерживает захват с камеры для рабочих процессов агентов на сопряжённых узлах iOS, Android, macOS и Linux: создание фотографии (jpg) или короткого видеоклипа (mp4, с необязательным звуком) через Gateway node.invoke.

На каждой платформе доступ к камере контролируется пользовательской настройкой.

Узел iOS

Пользовательская настройка iOS

  • Вкладка iOS Settings → CameraAllow 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: в настоящее время jpg
      • delayMs: число (необязательно; по умолчанию 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: в настоящее время mp4
      • deviceId: строка (необязательно; из camera.list)
    • Полезная нагрузка ответа: format: "mp4", base64, durationMs, hasAudio.

Требование активного режима для iOS

Как и canvas.*, узел iOS разрешает команды camera.* только в активном режиме. Фоновые вызовы возвращают NODE_BACKGROUND_UNAVAILABLE.

Вспомогательная команда CLI

Проще всего получить медиафайлы с помощью вспомогательной команды CLI, которая записывает декодированные медиаданные во временный файл и выводит путь к сохранённому файлу.

bash
openclaw nodes camera snap --node <id>                 # по умолчанию: передняя + задняя камеры (2 строки MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audio

nodes camera snap по умолчанию имеет значение --facing both, поэтому съёмка выполняется одновременно передней и задней камерами, чтобы агент получил оба ракурса; передайте --device-id с одним явно указанным направлением камеры (both отклоняется, если задано --device-id). Выходные файлы являются временными (в каталоге временных файлов ОС), если не создана собственная обёртка.

Узел Android

Пользовательская настройка Android

  • Панель Android Settings → CameraAllow 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 (вызов узла)

Используйте основной CLI openclaw для вызова команд камеры на узле macOS.

bash
openclaw nodes camera list --node <id>                     # список идентификаторов камерopenclaw nodes camera snap --node <id>                     # выводит путь к сохранённому файлуopenclaw nodes camera snap --node <id> --max-width 1280openclaw nodes camera snap --node <id> --delay-ms 2000openclaw nodes camera snap --node <id> --device-id <id>openclaw nodes camera clip --node <id> --duration 10s       # выводит путь к сохранённому файлуopenclaw nodes camera clip --node <id> --duration-ms 3000   # выводит путь к сохранённому файлу (устаревший флаг)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audio
  • openclaw nodes camera snap по умолчанию имеет значение maxWidth=1600, если оно не переопределено.
  • camera.snap ожидает delayMs (по умолчанию 2000ms, ограничивается значением [0, 10000]) после прогрева и стабилизации экспозиции перед съёмкой.
  • Фотографии повторно сжимаются, чтобы размер полезной нагрузки в кодировке base64 не превышал 5MB.

Хост узла Linux

Встроенный плагин Linux Node добавляет захват с камеры в службу CLI openclaw node. Он работает на хосте без графического интерфейса и не требует приложения Linux для рабочего стола.

По умолчанию доступ к камере выключен. Включите его в записи плагина, затем перезапустите службу узла, чтобы заново сформировать её объявление Gateway:

json5
{  plugins: {    entries: {      "linux-node": {        config: {          camera: { enabled: true },        },      },    },  },}

Требования:

  • FFmpeg с поддержкой входных данных V4L2, libx264 и AAC
  • устройство /dev/video*, доступное для чтения пользователю службы узла; в распространённых дистрибутивах добавьте этого пользователя в группу video
  • для клипов со значением includeAudio: true по умолчанию — работающий сервер PulseAudio или слой совместимости PipeWire с PulseAudio, имеющий источник по умолчанию

Linux возвращает доступные для чтения пути устройств V4L2 с поддержкой захвата из 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 и ограничения размера сообщений).

Видео экрана macOS (на уровне ОС)

Для записи видео экрана (не камеры) используйте сопутствующее приложение macOS:

bash
openclaw nodes screen record --node <id> --duration 10s --fps 15   # выводит путь к сохранённому файлу

Требуется разрешение macOS Screen Recording (TCC).

Связанные материалы

Was this useful?
On this page

On this page