Captura de cámara (agente)¶
OpenClaw admite captura de cámara para flujos de trabajo del agente:
- Nodo iOS (emparejado vía Gateway): capturar una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - Nodo Android (emparejado vía Gateway): capturar una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - App macOS (nodo vía Gateway): capturar una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke.
Todo el acceso a la cámara está protegido por configuraciones controladas por el usuario.
Nodo iOS¶
Configuración del usuario (activada por defecto)¶
- Pestaña de Ajustes de iOS → Cámara → Permitir cámara (
camera.enabled) - Valor predeterminado: activado (una clave ausente se trata como habilitada).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Comandos (vía Gateway node.invoke)¶
camera.list-
Carga útil de la respuesta:
devices: arreglo de{ id, name, position, deviceType }
-
camera.snap - Parámetros:
facing:front|back(predeterminado:front)maxWidth: número (opcional; predeterminado1600en el nodo iOS)quality:0..1(opcional; predeterminado0.9)format: actualmentejpgdelayMs: número (opcional; predeterminado0)deviceId: cadena (opcional; decamera.list)
- Carga útil de la respuesta:
format: "jpg"base64: "<...>"width,height
-
Protección de carga útil: las fotos se recomprimen para mantener la carga base64 por debajo de 5 MB.
-
camera.clip - Parámetros:
facing:front|back(predeterminado:front)durationMs: número (predeterminado3000, limitado a un máximo de60000)includeAudio: booleano (predeterminadotrue)format: actualmentemp4deviceId: cadena (opcional; decamera.list)
- Carga útil de la respuesta:
format: "mp4"base64: "<...>"durationMshasAudio
Requisito de primer plano¶
Al igual que canvas.*, el nodo iOS solo permite comandos camera.* en primer plano. Las invocaciones en segundo plano devuelven NODE_BACKGROUND_UNAVAILABLE.
Ayudante de la CLI (archivos temporales + MEDIA)¶
La forma más sencilla de obtener adjuntos es mediante el ayudante de la CLI, que escribe los medios decodificados en un archivo temporal e imprime MEDIA:<path>.
Ejemplos:
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 snapse establece de forma predeterminada en ambas orientaciones para dar al agente ambas vistas.- Los archivos de salida son temporales (en el directorio temporal del sistema operativo) a menos que construya su propio envoltorio.
Nodo Android¶
Configuración del usuario en Android (activada por defecto)¶
- Hoja de Ajustes de Android → Cámara → Permitir cámara (
camera.enabled) - Valor predeterminado: activado (una clave ausente se trata como habilitada).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Permisos¶
- Android requiere permisos en tiempo de ejecución:
CAMERAtanto paracamera.snapcomo paracamera.clip.RECORD_AUDIOparacamera.clipcuandoincludeAudio=true.
Si faltan permisos, la app solicitará cuando sea posible; si se deniegan, las solicitudes camera.* fallan con un
error *_PERMISSION_REQUIRED.
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.
Protección de carga útil¶
Las fotos se recomprimen para mantener la carga base64 por debajo de 5 MB.
App macOS¶
Configuración del usuario (desactivada por defecto)¶
La app complementaria de macOS expone una casilla:
- Ajustes → General → Permitir cámara (
openclaw.cameraEnabled) - Valor predeterminado: desactivado
- Cuando está desactivado: las solicitudes de cámara devuelven “Cámara deshabilitada por el usuario”.
Ayudante de la CLI (invocación del nodo)¶
Use la CLI principal openclaw para invocar comandos de cámara en el nodo macOS.
Ejemplos:
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 snapse establece de forma predeterminada enmaxWidth=1600salvo que se anule.- En macOS,
camera.snapesperadelayMs(predeterminado 2000 ms) después de la preparación/estabilización de la exposición antes de capturar. - Las cargas de fotos se recomprimen para mantener base64 por debajo de 5 MB.
Seguridad + límites prácticos¶
- El acceso a la cámara y al micrófono activa los avisos habituales de permisos del SO (y requiere cadenas de uso en Info.plist).
- Los clips de video están limitados (actualmente
<= 60s) para evitar cargas de nodo sobredimensionadas (sobrecarga base64 + límites de mensajes).
Video de pantalla en macOS (nivel del SO)¶
Para video de pantalla (no de cámara), use el complemento de macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
Notas:
- Requiere el permiso de macOS Grabación de pantalla (TCC).