jpg) ou um clipe de vídeo curto (mp4, com áudio opcional) via node.invoke do Gateway.
Todo acesso à câmera é controlado por uma configuração definida pelo usuário em cada plataforma.
Node iOS
Configuração do usuário no iOS
- Aba Configurações do iOS → Câmera → Permitir câmera (
camera.enabled).- Padrão: ativado (uma chave ausente é considerada habilitada).
- Quando desativado: os comandos
camera.*retornamCAMERA_DISABLED.
Comandos do iOS (via node.invoke do Gateway)
-
camera.list- Payload da resposta:
devices— matriz de{ id, name, position, deviceType }.
- Payload da resposta:
-
camera.snap- Parâmetros:
facing:front|back(padrão:front)maxWidth: número (opcional; padrão1600)quality:0..1(opcional; padrão0.9, limitado a[0.05, 1.0])format: atualmentejpgdelayMs: número (opcional; padrão0, limitado internamente a10000)deviceId: string (opcional; decamera.list)
- Payload da resposta:
format: "jpg",base64,width,height. - Proteção do payload: as fotos são recomprimidas para manter o payload codificado em base64 abaixo de 5MB.
- Parâmetros:
-
camera.clip- Parâmetros:
facing:front|back(padrão:front)durationMs: número (padrão3000, limitado a[250, 60000])includeAudio: booleano (padrãotrue)format: atualmentemp4deviceId: string (opcional; decamera.list)
- Payload da resposta:
format: "mp4",base64,durationMs,hasAudio.
- Parâmetros:
Requisito de primeiro plano no iOS
Assim comocanvas.*, o Node iOS permite comandos camera.* somente em primeiro plano. As invocações em segundo plano retornam NODE_BACKGROUND_UNAVAILABLE.
Auxiliar da CLI
A maneira mais fácil de obter arquivos de mídia é usar o auxiliar da CLI, que grava a mídia decodificada em um arquivo temporário e exibe o caminho salvo.nodes camera snap usa --facing both por padrão, capturando pelas câmeras frontal e traseira para fornecer ao agente as duas perspectivas; informe --device-id com uma única orientação explícita (both é rejeitado quando --device-id está definido). Os arquivos de saída são temporários (no diretório temporário do sistema operacional), a menos que seja criado um wrapper próprio.
Node Android
Configuração do usuário no Android
- Painel Configurações do Android → Câmera → Permitir câmera (
camera.enabled).- Em instalações novas, o padrão é desativado. As instalações existentes anteriores a essa configuração são migradas para ativado, para que as atualizações não removam silenciosamente um acesso à câmera que funcionava antes.
- Quando desativado: os comandos
camera.*retornamCAMERA_DISABLED: enable Camera in Settings.
Permissões
CAMERAé obrigatório paracamera.snapecamera.clip; uma permissão ausente ou negada retornaCAMERA_PERMISSION_REQUIRED.RECORD_AUDIOé obrigatório paracamera.clipquandoincludeAudioétrue; uma permissão ausente ou negada retornaMIC_PERMISSION_REQUIRED.
Requisito de primeiro plano no Android
Assim comocanvas.*, o Node Android permite comandos camera.* somente em primeiro plano. As invocações em segundo plano retornam NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Comandos do Android (via node.invoke do Gateway)
-
camera.list- Payload da resposta:
devices— matriz de{ id, name, position, deviceType }.
- Payload da resposta:
-
camera.snap- Parâmetros:
facing(front|back, padrãofront),quality(padrão0.95, limitado a[0.1, 1.0]),maxWidth(padrão1600),deviceId(opcional; um ID desconhecido falha comINVALID_REQUEST). - Payload da resposta:
format: "jpg",base64,width,height. - Proteção do payload: recomprimido para manter o base64 abaixo de 5MB (o mesmo limite do iOS).
- Parâmetros:
-
camera.clip- Parâmetros:
facing(padrãofront),durationMs(padrão3000, limitado a[200, 60000]),includeAudio(padrãotrue),deviceId(opcional). - Payload da resposta:
format: "mp4",base64,durationMs,hasAudio. - Proteção do payload: o MP4 bruto é limitado a 18MB antes da codificação em base64; clipes acima do limite falham com
PAYLOAD_TOO_LARGE(reduzadurationMse tente novamente).
- Parâmetros:
Aplicativo para macOS
Configuração do usuário no macOS
O aplicativo complementar para macOS disponibiliza uma caixa de seleção:- Configurações → Geral → Permitir câmera (
openclaw.cameraEnabled).- Padrão: desativado.
- Quando desativado: as solicitações da câmera retornam
CAMERA_DISABLED: enable Camera in Settings.
Auxiliar da CLI (invocação do Node)
Use a CLI principalopenclaw para invocar comandos da câmera no Node macOS.
openclaw nodes camera snapusamaxWidth=1600por padrão, a menos que seja substituído.camera.snapaguardadelayMs(padrão 2000ms, limitado a[0, 10000]) após a estabilização do aquecimento e da exposição antes da captura.- Os payloads de fotos são recomprimidos para manter o base64 abaixo de 5MB.
Host do Node Linux
O Plugin Linux Node incluído adiciona captura pela câmera ao serviçoopenclaw node da CLI. Ele funciona em um host sem interface gráfica e não exige o aplicativo para desktop Linux.
O acesso à câmera é desativado por padrão. Habilite-o na entrada do Plugin e reinicie o serviço do Node para que seu anúncio do Gateway seja recriado:
- FFmpeg com entrada V4L2,
libx264e suporte a AAC - um dispositivo
/dev/video*legível pelo usuário do serviço do Node; em distribuições comuns, adicione esse usuário ao grupovideo - para clipes com o
includeAudio: truepadrão, um servidor PulseAudio funcional ou uma camada de compatibilidade PipeWire PulseAudio com uma fonte padrão
camera.list; o FFmpeg verifica cada candidato /dev/video* e omite metadados ou Nodes somente de saída. O position do dispositivo é unknown, portanto, solicitações de orientação sem deviceId produzem uma foto ou um clipe com posição unknown, em vez de afirmar que a câmera é frontal ou traseira. Use deviceId quando um host tiver várias câmeras. camera.snap usa o aquecimento da entrada do FFmpeg por delayMs e preserva a proporção da imagem ao limitar a largura. camera.clip grava o áudio do microfone como a faixa de áudio do MP4; o OpenClaw deliberadamente não disponibiliza um comando independente para o microfone.
O Plugin usa libx264 para vídeo MP4 e não altera codecs silenciosamente. Uma compilação do FFmpeg sem a entrada ou os codificadores obrigatórios retorna CAMERA_UNAVAILABLE. Fotos e clipes que excederiam o limite de 25MB do payload em base64 falham com PAYLOAD_TOO_LARGE.
camera.snap e camera.clip continuam sendo comandos perigosos. Adicione-os a gateway.nodes.allowCommands somente quando houver a intenção de armar a captura; habilitar apenas o Plugin não ignora a política do Gateway.
Segurança e limites práticos
- O acesso à câmera e ao microfone aciona as solicitações de permissão habituais do sistema operacional (e exige strings de uso em
Info.plist). - Os clipes de vídeo são limitados a 60s para evitar payloads do Node grandes demais (sobrecarga do base64 somada aos limites das mensagens).