Captura de Cámara
OpenClaw soporta captura de cámara para flujos de trabajo de agentes:
- Nodo iOS (emparejado vía Gateway): captura una foto (
jpg) o clip de video corto (mp4, con audio opcional) víanode.invoke. - Nodo Android (emparejado vía Gateway): captura una foto (
jpg) o clip de video corto (mp4, con audio opcional) víanode.invoke. - Aplicación macOS (nodo vía Gateway): captura una foto (
jpg) o clip de video corto (mp4, con audio opcional) víanode.invoke.
Todo acceso a la cámara está controlado por ajustes gestionados por el usuario.
Nodo iOS
Ajuste de usuario (activado por defecto)
- Pestaña Ajustes de iOS → Cámara → Permitir Cámara (
camera.enabled)- Por defecto: activado (la ausencia de la clave se trata como activado).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Comandos (vía Gateway node.invoke)
camera.list- Respuesta de carga útil:
devices: array de{ id, name, position, deviceType }
- Respuesta de carga útil:
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)
- Respuesta de carga útil:
format: "jpg"base64: "<...>"width,height
- Protección de carga útil: las fotos se recomprimen para mantener la carga útil 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)
- Respuesta de carga útil:
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 los medios decodificados 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 dar al agente ambas vistas.- Los archivos de salida son temporales (en el directorio temporal del SO) a menos que construyas tu propio envoltorio.
Nodo Android
Ajuste de usuario en Android (activado por defecto)
- Hoja de Ajustes de Android → Cámara → Permitir Cámara (
camera.enabled)- Por defecto: activado (la ausencia de la clave se trata como activado).
- Cuando está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Permisos
- Android requiere permisos en tiempo de ejecución:
CAMERAparacamera.snapycamera.clip.RECORD_AUDIOparacamera.clipcuandoincludeAudio=true.
Si faltan permisos, la aplicación 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- Respuesta de carga útil:
devices: array de{ id, name, position, deviceType }
- Respuesta de carga útil:
Protección de carga útil
Las fotos se recomprimen para mantener la carga útil base64 por debajo de 5 MB.
Aplicación macOS
Ajuste de usuario (desactivado por defecto)
La aplicación complementaria de macOS expone una casilla de verificación:
- Ajustes → General → Permitir Cámara (
openclaw.cameraEnabled)- Por defecto: desactivado
- Cuando está desactivado: las solicitudes de cámara devuelven "Cámara deshabilitada por el usuario".
Ayudante CLI (node invoke)
Usa el CLI principal openclaw para invocar comandos de cámara en el nodo macOS. Ejemplos:
openclaw nodes camera list --node <id> # listar ids de cámara
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> (bandera antigua)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
Notas:
openclaw nodes camera snappor defecto usamaxWidth=1600a menos que se sobrescriba.- En macOS,
camera.snapesperadelayMs(por defecto 2000ms) después del calentamiento/estabilización de la exposición antes de capturar. - Las cargas útiles 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 las solicitudes de permiso habituales del SO (y requiere cadenas de uso en Info.plist).
- Los clips de video tienen un límite (actualmente
<= 60s) para evitar cargas útiles de nodo demasiado grandes (sobrecarga base64 + límites de mensaje).
Video de pantalla macOS (a nivel de SO)
Para video de pantalla (no de cámara), usa el complemento de macOS:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # imprime MEDIA:<ruta>
Notas:
- Requiere permiso de Grabación de Pantalla de macOS (TCC).