docs/nodes/camera.md
OpenClaw supports camera capture for agent workflows:
jpg) or short video clip (mp4, with optional audio) via node.invoke.jpg) or short video clip (mp4, with optional audio) via node.invoke.jpg) or short video clip (mp4, with optional audio) via node.invoke.All camera access is gated behind user-controlled settings.
camera.enabled)
camera.* commands return CAMERA_DISABLED.node.invoke)camera.list
devices: array of { id, name, position, deviceType }camera.snap
facing: front|back (default: front)maxWidth: number (optional; default 1600 on the iOS node)quality: 0..1 (optional; default 0.9)format: currently jpgdelayMs: number (optional; default 0)deviceId: string (optional; from camera.list)format: "jpg"base64: "<...>"width, heightcamera.clip
facing: front|back (default: front)durationMs: number (default 3000, clamped to a max of 60000)includeAudio: boolean (default true)format: currently mp4deviceId: string (optional; from camera.list)format: "mp4"base64: "<...>"durationMshasAudioLike canvas.*, the iOS node only allows camera.* commands in the foreground. Background invocations return NODE_BACKGROUND_UNAVAILABLE.
The easiest way to get attachments is via the CLI helper, which writes decoded media to a temp file and prints MEDIA:<path>.
Examples:
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
Notes:
nodes camera snap defaults to both facings to give the agent both views.camera.enabled)
camera.* commands return CAMERA_DISABLED.CAMERA for both camera.snap and camera.clip.RECORD_AUDIO for camera.clip when includeAudio=true.If permissions are missing, the app will prompt when possible; if denied, camera.* requests fail with a
*_PERMISSION_REQUIRED error.
Like canvas.*, the Android node only allows camera.* commands in the foreground. Background invocations return NODE_BACKGROUND_UNAVAILABLE.
node.invoke)camera.list
devices: array of { id, name, position, deviceType }Photos are recompressed to keep the base64 payload under 5 MB.
The macOS companion app exposes a checkbox:
openclaw.cameraEnabled)
Use the main openclaw CLI to invoke camera commands on the macOS node.
Examples:
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
Notes:
openclaw nodes camera snap defaults to maxWidth=1600 unless overridden.camera.snap waits delayMs (default 2000ms) after warm-up/exposure settle before capturing.<= 60s) to avoid oversized node payloads (base64 overhead + message limits).For screen video (not camera), use the macOS companion:
openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints MEDIA:<path>
Notes: