Captura de câmera (agente)¶
O OpenClaw oferece suporte à captura de câmera para fluxos de trabalho de agentes:
- Nó iOS (emparelhado via Gateway): captura uma foto (
jpg) ou clipe curto de vídeo (mp4, com áudio opcional) vianode.invoke. - Nó Android (emparelhado via Gateway): captura uma foto (
jpg) ou clipe curto de vídeo (mp4, com áudio opcional) vianode.invoke. - App macOS (nó via Gateway): captura uma foto (
jpg) ou clipe curto de vídeo (mp4, com áudio opcional) vianode.invoke.
Todo acesso à câmera é controlado por configurações definidas pelo usuário.
Nó iOS¶
Configuração do usuário (ativada por padrão)¶
- Aba Ajustes do iOS → Câmera → Permitir Câmera (
camera.enabled) - Padrão: ativado (chave ausente é tratada como habilitada).
- Quando desativado: comandos
camera.*retornamCAMERA_DISABLED.
Comandos (via Gateway node.invoke)¶
camera.list-
Payload de resposta:
devices: array de{ id, name, position, deviceType }
-
camera.snap - Parâmetros:
facing:front|back(padrão:front)maxWidth: number (opcional; padrão1600no nó iOS)quality:0..1(opcional; padrão0.9)format: atualmentejpgdelayMs: number (opcional; padrão0)deviceId: string (opcional; decamera.list)
- Payload de resposta:
format: "jpg"base64: "<...>"width,height
-
Proteção de payload: as fotos são recomprimidas para manter o payload base64 abaixo de 5 MB.
-
camera.clip - Parâmetros:
facing:front|back(padrão:front)durationMs: number (padrão3000, limitado a um máximo de60000)includeAudio: boolean (padrãotrue)format: atualmentemp4deviceId: string (opcional; decamera.list)
- Payload de resposta:
format: "mp4"base64: "<...>"durationMshasAudio
Requisito de primeiro plano¶
Assim como canvas.*, o nó iOS só permite comandos camera.* em primeiro plano. Invocações em segundo plano retornam NODE_BACKGROUND_UNAVAILABLE.
Auxiliar da CLI (arquivos temporários + MEDIA)¶
A maneira mais fácil de obter anexos é via o auxiliar da CLI, que grava a mídia decodificada em um arquivo temporário e imprime MEDIA:<path>.
Exemplos:
openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
openclaw nodes camera snap --node <id> --facing front
openclaw nodes camera clip --node <id> --duration 3000
openclaw nodes camera clip --node <id> --no-audio
Notas:
nodes camera snapusa ambas as câmeras por padrão para fornecer ao agente as duas visualizações.- Os arquivos de saída são temporários (no diretório temporário do SO), a menos que você crie seu próprio wrapper.
Nó Android¶
Configuração de usuário do Android (ativada por padrão)¶
- Tela de Configurações do Android → Câmera → Permitir Câmera (
camera.enabled) - Padrão: ativado (chave ausente é tratada como habilitada).
- Quando desativado: comandos
camera.*retornamCAMERA_DISABLED.
Permissões¶
- O Android exige permissões em tempo de execução:
CAMERAparacamera.snapecamera.clip.RECORD_AUDIOparacamera.clipquandoincludeAudio=true.
Se as permissões estiverem ausentes, o app solicitará quando possível; se negadas, solicitações camera.* falham com um
erro *_PERMISSION_REQUIRED.
Requisito de primeiro plano no Android¶
Assim como canvas.*, o nó Android só permite comandos camera.* em primeiro plano. Invocações em segundo plano retornam NODE_BACKGROUND_UNAVAILABLE.
Proteção de payload¶
As fotos são recomprimidas para manter o payload base64 abaixo de 5 MB.
App macOS¶
Configuração do usuário (desativada por padrão)¶
O app complementar do macOS expõe uma caixa de seleção:
- Ajustes → Geral → Permitir Câmera (
openclaw.cameraEnabled) - Padrão: desativado
- Quando desativado: solicitações de câmera retornam “Camera disabled by user”.
Auxiliar da CLI (invocação do nó)¶
Use a CLI principal openclaw para invocar comandos de câmera no nó macOS.
Exemplos:
openclaw nodes camera list --node <id> # list camera ids
openclaw nodes camera snap --node <id> # prints MEDIA:<path>
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 # prints MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # prints MEDIA:<path> (legacy flag)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
Notas:
openclaw nodes camera snapusamaxWidth=1600por padrão, a menos que seja substituído.- No macOS,
camera.snapaguardadelayMs(padrão 2000ms) após o aquecimento/estabilização de exposição antes de capturar. - Os payloads de foto são recomprimidos para manter o base64 abaixo de 5 MB.
Segurança + limites práticos¶
- O acesso à câmera e ao microfone aciona os prompts usuais de permissão do SO (e exige strings de uso no Info.plist).
- Os clipes de vídeo são limitados (atualmente
<= 60s) para evitar payloads de nó muito grandes (sobrecarga de base64 + limites de mensagem).
Vídeo de tela no macOS (nível do SO)¶
Para vídeo de tela (não da câmera), use o app complementar do macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
Notas:
- Requer permissão de Gravação de Tela do macOS (TCC).