Captura de cámara (agente)
OpenClaw soporta captura de cámara para flujos de trabajo del agente:
- Nodo iOS (vinculado vía Gateway): captura una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - Nodo Android (vinculado vía Gateway): captura una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - App macOS (nodo vía Gateway): captura 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 ajustes controlados por el usuario.
Nodo iOS
Ajuste del usuario (activado por defecto)
- Pestaña de Ajustes en iOS → Cámara → Permitir cámara (
camera.enabled)- Por defecto: activado (la clave ausente se trata como habilitada).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Comandos (vía Gateway node.invoke)
-
camera.list- Payload de respuesta:
devices: array de{ id, name, position, deviceType }
- Payload de respuesta:
-
camera.snap- Parámetros:
facing:front|back(por defecto:front)maxWidth: número (opcional; por defecto1600en el nodo iOS)quality:0..1(opcional; por defecto0.9)format: actualmentejpgdelayMs: número (opcional; por defecto0)deviceId: string (opcional; decamera.list)
- Payload de respuesta:
format: "jpg"base64: "<...>"width,height
- Límite de payload: las fotos se recomprimen para mantener el payload base64 por debajo de 5 MB.
- Parámetros:
-
camera.clip- Parámetros:
facing:front|back(por defecto:front)durationMs: número (por defecto3000, limitado a un máximo de60000)includeAudio: booleano (por defectotrue)format: actualmentemp4deviceId: string (opcional; decamera.list)
- Payload de respuesta:
format: "mp4"base64: "<...>"durationMshasAudio
- Parámetros:
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 CLI (archivos temporales + MEDIA)
La forma más fácil de obtener adjuntos es mediante el ayudante CLI, que escribe el medio decodificado en un archivo temporal e imprime MEDIA:<ruta>.
Ejemplos:
openclaw nodes camera snap --node <id> # por defecto: frontal + trasera (2 líneas 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
Notas:
nodes camera snappor defecto captura ambas orientaciones para darle al agente ambas vistas.- Los archivos de salida son temporales (en el directorio temporal del SO) a menos que crees tu propio wrapper.
Nodo Android
Ajuste del usuario en Android (activado por defecto)
- Hoja de Ajustes de Android → Cámara → Permitir cámara (
camera.enabled)- Por defecto: activado (la 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.
Comandos Android (vía Gateway node.invoke)
camera.list- Payload de respuesta:
devices: array de{ id, name, position, deviceType }
- Payload de respuesta:
Límite de payload
Las fotos se recomprimen para mantener el payload base64 por debajo de 5 MB.
App macOS
Ajuste del usuario (desactivado por defecto)
La app complementaria de macOS expone una casilla:
- Ajustes → General → Permitir cámara (
openclaw.cameraEnabled)- Por defecto: desactivado
- Cuando está desactivado: las solicitudes de cámara devuelven “Camera disabled by user”.
Ayudante CLI (node invoke)
Usa el CLI principal de openclaw para invocar comandos de cámara en el nodo macOS.
Ejemplos:
openclaw nodes camera list --node <id> # listar ids de cámaras
openclaw nodes camera snap --node <id> # imprime MEDIA:<ruta>
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 # imprime MEDIA:<ruta>
openclaw nodes camera clip --node <id> --duration-ms 3000 # imprime MEDIA:<ruta> (flag legacy)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
Notas:
openclaw nodes camera snapusa por defectomaxWidth=1600a menos que se sobreescriba.- En macOS,
camera.snapesperadelayMs(por defecto 2000ms) tras el calentamiento/estabilización de exposición antes de capturar. - Los payloads de fotos se recomprimen para mantener el base64 por debajo de 5 MB.
Seguridad y 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 payloads de nodo sobredimensionados (overhead de base64 + límites de mensaje).
Video de pantalla en macOS (nivel SO)
Para video de pantalla (no de cámara), usa la app complementaria de macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # imprime MEDIA:<ruta>
Notas:
- Requiere permiso de Grabación de pantalla en macOS (TCC).