6.8 KiB
| read_when | summary | title | x-i18n | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Captura de cámara (nodos iOS/Android + app de macOS) para uso del agente: fotos (jpg) y clips de video cortos (mp4) | Captura de cámara |
|
OpenClaw admite captura de cámara para flujos de trabajo del agente:
- Nodo iOS (vinculado mediante Gateway): capturar una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - Nodo Android (vinculado mediante Gateway): capturar una foto (
jpg) o un clip de video corto (mp4, con audio opcional) mediantenode.invoke. - App de macOS (nodo mediante 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 ajustes controlados por el usuario.
Nodo iOS
Ajuste de usuario (activado por defecto)
- Pestaña Ajustes de iOS → Camera → Allow Camera (
camera.enabled)- Predeterminado: activado (la ausencia de la clave se trata como habilitado).
- Si está desactivado: los comandos
camera.*devuelvenCAMERA_DISABLED.
Comandos (mediante Gateway node.invoke)
-
camera.list- Carga de respuesta:
devices: array de{ id, name, position, deviceType }
- Carga de respuesta:
-
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 de respuesta:
format: "jpg"base64: "<...>"width,height
- Protección de carga: las fotos se recomprimen para mantener la carga base64 por debajo de 5 MB.
- Parámetros:
-
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 de respuesta:
format: "mp4"base64: "<...>"durationMshasAudio
- Parámetros:
Requisito de primer plano
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 sencilla de obtener adjuntos es mediante el ayudante CLI, que escribe los medios decodificados en un archivo temporal e imprime MEDIA:<path>.
Ejemplos:
openclaw nodes camera snap --node <id> # predeterminado: ambos, front + back (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 snapusa por defecto 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 contenedor.
Nodo Android
Ajuste de usuario de Android (activado por defecto)
- Hoja de Ajustes de Android → Camera → Allow Camera (
camera.enabled)- Predeterminado: activado (la ausencia de la clave se trata como habilitado).
- Si 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 mostrará la solicitud cuando sea posible; si se deniegan, las solicitudes camera.* fallan con un
error *_PERMISSION_REQUIRED.
Requisito de primer plano en Android
Igual que canvas.*, el nodo Android solo permite comandos camera.* en primer plano. Las invocaciones en segundo plano devuelven NODE_BACKGROUND_UNAVAILABLE.
Comandos de Android (mediante Gateway node.invoke)
camera.list- Carga de respuesta:
devices: array de{ id, name, position, deviceType }
- Carga de respuesta:
Protección de carga
Las fotos se recomprimen para mantener la carga base64 por debajo de 5 MB.
App de macOS
Ajuste de usuario (desactivado por defecto)
La app complementaria de macOS expone una casilla de verificación:
- Settings → General → Allow Camera (
openclaw.cameraEnabled)- Predeterminado: desactivado
- Si está desactivado: las solicitudes de cámara devuelven “Camera disabled by user”.
Ayudante CLI (node invoke)
Usa la CLI principal openclaw para invocar comandos de cámara en el nodo macOS.
Ejemplos:
openclaw nodes camera list --node <id> # listar id de cámaras
openclaw nodes camera snap --node <id> # imprime 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 # imprime MEDIA:<path>
openclaw nodes camera clip --node <id> --duration-ms 3000 # imprime MEDIA:<path> (indicador heredado)
openclaw nodes camera clip --node <id> --device-id <id>
openclaw nodes camera clip --node <id> --no-audio
Notas:
openclaw nodes camera snapusa por defectomaxWidth=1600salvo sobrescritura.- En macOS,
camera.snapesperadelayMs(predeterminado 2000ms) después del calentamiento/estabilización de la exposición antes de capturar. - Las cargas de fotos se recomprimen para mantener el base64 por debajo de 5 MB.
Seguridad + límites prácticos
- El acceso a cámara y micrófono activa las solicitudes 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 de 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:<path>
Notas:
- Requiere permiso de macOS Screen Recording (TCC).