Медиа и устройства

Захват с камеры

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.

Команды (через node.invoke Gateway)

  • 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: boolean (по умолчанию 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>               # по умолчанию: и фронтальная, и задняя (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 (по умолчанию включена)

  • Панель настроек 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 (через node.invoke Gateway)

  • camera.list
    • Полезная нагрузка ответа:
      • devices: массив { id, name, position, deviceType }

Ограничение полезной нагрузки

Фотографии пережимаются, чтобы размер полезной нагрузки base64 не превышал 5 МБ.

Приложение macOS

Пользовательская настройка (по умолчанию выключена)

Приложение-компаньон macOS предоставляет флажок:

  • Настройки → Основные → Разрешить камеру (openclaw.cameraEnabled)
    • По умолчанию: выключено
    • Если выключено: запросы к камере возвращают "Камера отключена пользователем".

Помощник CLI (node invoke)

Используйте основной 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 (по умолчанию 2000 мс) после прогрева/стабилизации экспозиции перед захватом.
  • Полезные нагрузки фотографий пережимаются, чтобы размер base64 не превышал 5 МБ.

Безопасность и практические ограничения

  • Доступ к камере и микрофону вызывает стандартные запросы разрешений ОС (и требует строк использования в Info.plist).
  • Видеоклипы ограничены (в настоящее время <= 60с), чтобы избежать перегрузки полезной нагрузки узла (накладные расходы base64 + ограничения сообщений).

Запись экрана macOS (на уровне ОС)

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

openclaw nodes screen record --node <id> --duration 10s --fps 15   # выводит MEDIA:<путь>

Примечания:

  • Требуется разрешение Запись экрана macOS (TCC).

Аудио и голосовые заметкиРежим разговора