Nodes and media
Captura de cámara
OpenClaw admite la captura con cámara para flujos de trabajo de agentes en nodos iOS, Android, macOS y Linux emparejados: permite capturar una foto (jpg) o un breve clip de vídeo (mp4, con audio opcional) mediante node.invoke del Gateway.
Todo acceso a la cámara está sujeto a un ajuste controlado por el usuario en cada plataforma.
Nodo iOS
Ajuste de usuario de iOS
- Pestaña Settings de iOS → Camera → Allow Camera (
camera.enabled).- Valor predeterminado: activado (si falta la clave, se considera activado).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Comandos de iOS (mediante node.invoke del Gateway)
-
camera.list- Carga útil de respuesta:
devices— matriz de{ id, name, position, deviceType }.
- Carga útil de respuesta:
-
camera.snap- Parámetros:
facing:front|back(valor predeterminado:front)maxWidth: número (opcional; valor predeterminado:1600)quality:0..1(opcional; valor predeterminado:0.9, limitado a[0.05, 1.0])format: actualmentejpgdelayMs: número (opcional; valor predeterminado:0, con un límite interno de10000)deviceId: cadena (opcional; decamera.list)
- Carga útil de respuesta:
format: "jpg",base64,width,height. - Protección de la carga útil: las fotos se vuelven a comprimir para mantener la carga útil codificada en base64 por debajo de 5MB.
- Parámetros:
-
camera.clip- Parámetros:
facing:front|back(valor predeterminado:front)durationMs: número (valor predeterminado:3000, limitado a[250, 60000])includeAudio: booleano (valor predeterminado:true)format: actualmentemp4deviceId: cadena (opcional; decamera.list)
- Carga útil de respuesta:
format: "mp4",base64,durationMs,hasAudio.
- Parámetros:
Requisito de primer plano en iOS
Al igual que canvas.*, el nodo iOS solo permite comandos camera.* en primer plano. Las invocaciones en segundo plano devuelven NODE_BACKGROUND_UNAVAILABLE.
Utilidad de la CLI
La forma más sencilla de obtener archivos multimedia es mediante la utilidad de la CLI, que escribe el contenido multimedia decodificado en un archivo temporal e imprime la ruta guardada.
openclaw nodes camera snap --node <id> # valor predeterminado: frontal + trasera (2 líneas MEDIA)openclaw nodes camera snap --node <id> --facing frontopenclaw nodes camera clip --node <id> --duration 3000openclaw nodes camera clip --node <id> --no-audionodes camera snap tiene como valor predeterminado --facing both, lo que captura tanto con la cámara frontal como con la trasera para proporcionar al agente ambas vistas; pase --device-id con una única orientación explícita (both se rechaza cuando se establece --device-id). Los archivos de salida son temporales (se almacenan en el directorio temporal del sistema operativo), salvo que se cree un contenedor propio.
Nodo Android
Ajuste de usuario de Android
- Panel Settings de Android → Camera → Allow Camera (
camera.enabled).- En las instalaciones nuevas está desactivado de forma predeterminada. Las instalaciones existentes anteriores a este ajuste se migran a activado para que las actualizaciones no pierdan silenciosamente el acceso a la cámara que antes funcionaba.
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED: enable Camera in Settings.
Permisos
- Se requiere
CAMERAtanto paracamera.snapcomo paracamera.clip; si el permiso falta o se deniega, se devuelveCAMERA_PERMISSION_REQUIRED. - Se requiere
RECORD_AUDIOparacamera.clipcuandoincludeAudioestrue; si el permiso falta o se deniega, se devuelveMIC_PERMISSION_REQUIRED.
La aplicación solicita permisos en tiempo de ejecución cuando es posible.
Requisito de primer plano en Android
Al igual que canvas.*, el nodo Android solo permite comandos camera.* en primer plano. Las invocaciones en segundo plano devuelven NODE_BACKGROUND_UNAVAILABLE: command requires foreground.
Comandos de Android (mediante node.invoke del Gateway)
-
camera.list- Carga útil de respuesta:
devices— matriz de{ id, name, position, deviceType }.
- Carga útil de respuesta:
-
camera.snap- Parámetros:
facing(front|back, valor predeterminado:front),quality(valor predeterminado:0.95, limitado a[0.1, 1.0]),maxWidth(valor predeterminado:1600),deviceId(opcional; un identificador desconocido produce el errorINVALID_REQUEST). - Carga útil de respuesta:
format: "jpg",base64,width,height. - Protección de la carga útil: se vuelve a comprimir para mantener el contenido base64 por debajo de 5MB (el mismo límite que en iOS).
- Parámetros:
-
camera.clip- Parámetros:
facing(valor predeterminado:front),durationMs(valor predeterminado:3000, limitado a[200, 60000]),includeAudio(valor predeterminado:true),deviceId(opcional). - Carga útil de respuesta:
format: "mp4",base64,durationMs,hasAudio. - Protección de la carga útil: el MP4 sin procesar está limitado a 18MB antes de la codificación en base64; los clips que superen el límite producen el error
PAYLOAD_TOO_LARGE(reduzcadurationMsy vuelva a intentarlo).
- Parámetros:
Aplicación para macOS
Ajuste de usuario de macOS
La aplicación complementaria para macOS muestra una casilla:
- Settings → General → Allow Camera (
openclaw.cameraEnabled).- Valor predeterminado: desactivado.
- Cuando está desactivado: las solicitudes de la cámara devuelven
CAMERA_DISABLED: enable Camera in Settings.
Utilidad de la CLI (invocación del nodo)
Utilice la CLI principal openclaw para invocar comandos de la cámara en el nodo macOS.
openclaw nodes camera list --node <id> # muestra los identificadores de las cámarasopenclaw nodes camera snap --node <id> # imprime la ruta guardadaopenclaw 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 # imprime la ruta guardadaopenclaw nodes camera clip --node <id> --duration-ms 3000 # imprime la ruta guardada (opción heredada)openclaw nodes camera clip --node <id> --device-id <id>openclaw nodes camera clip --node <id> --no-audioopenclaw nodes camera snaptiene como valor predeterminadomaxWidth=1600, salvo que se sobrescriba.camera.snapesperadelayMs(valor predeterminado: 2000ms, limitado a[0, 10000]) después del calentamiento y la estabilización de la exposición antes de capturar.- Las cargas útiles de las fotos se vuelven a comprimir para mantener el contenido base64 por debajo de 5MB.
Host del nodo Linux
El Plugin de Node Linux incluido añade captura con cámara al servicio de la CLI openclaw node. Funciona en un host sin interfaz gráfica y no requiere la aplicación de escritorio para Linux.
El acceso a la cámara está desactivado de forma predeterminada. Actívelo en la entrada del Plugin y reinicie después el servicio del nodo para que se vuelva a crear su anuncio del Gateway:
{ plugins: { entries: { "linux-node": { config: { camera: { enabled: true }, }, }, }, },}Requisitos:
- FFmpeg con entrada V4L2,
libx264y compatibilidad con AAC - un dispositivo
/dev/video*que pueda leer el usuario del servicio del nodo; en las distribuciones habituales, añada ese usuario al grupovideo - para clips con el valor predeterminado
includeAudio: true, un servidor PulseAudio operativo o una capa de compatibilidad con PulseAudio de PipeWire que tenga una fuente predeterminada
Linux devuelve desde camera.list las rutas legibles de dispositivos V4L2 que permiten capturar; FFmpeg sondea cada candidato /dev/video* y omite los nodos de metadatos o solo de salida. El valor de position del dispositivo es unknown, por lo que las solicitudes de orientación sin deviceId generan una foto o un clip con posición unknown, en lugar de afirmar que se trata de una cámara frontal o trasera. Utilice deviceId cuando un host tenga varias cámaras. camera.snap utiliza el calentamiento de entrada de FFmpeg durante delayMs y conserva la relación de aspecto mientras limita la anchura. camera.clip graba el audio del micrófono como pista de audio del MP4; OpenClaw no expone deliberadamente ningún comando independiente para el micrófono.
El Plugin utiliza libx264 para vídeo MP4 y no cambia los códecs de forma silenciosa. Una compilación de FFmpeg sin la entrada o los codificadores necesarios devuelve CAMERA_UNAVAILABLE. Las fotos y los clips que superarían el límite de carga útil base64 de 25MB producen el error PAYLOAD_TOO_LARGE.
camera.snap y camera.clip siguen siendo comandos peligrosos. Añádalos a gateway.nodes.commands.allow únicamente cuando se pretenda habilitar la captura; activar el Plugin por sí solo no elude la política del Gateway.
Seguridad y límites prácticos
- El acceso a la cámara y al micrófono activa las solicitudes de permisos habituales del sistema operativo (y requiere cadenas de uso en
Info.plist). - Los clips de vídeo están limitados a 60s para evitar cargas útiles de nodo demasiado grandes (sobrecarga de base64 más límites de los mensajes).
Vídeo de pantalla en macOS (en el ámbito del sistema operativo)
Para grabar vídeo de la pantalla (no de la cámara), utilice la aplicación complementaria para macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # imprime la ruta guardadaRequiere el permiso Screen Recording de macOS (TCC).