Camsnap: Capture Snapshots, Clips & Motion Events from Any RTSP/ONVIF Camera
10,046 downloads and 821 installs on ClawHub as of March 2026. That install count puts camsnap in the top tier of all skills on the platform — and it does exactly one thing: give your OpenClaw agent eyes on any RTSP or ONVIF network camera.
Built by @steipete (Peter Steinberger, former co-founder of PSPDFKit, now full-time open source builder), camsnap is a Go CLI tool that wraps ffmpeg and speaks directly to your camera's network stream.
The Problem It Solves
Security cameras are everywhere, but accessing their feeds programmatically is a pain. RTSP streams require ffmpeg incantations. ONVIF discovery is underdocumented. Motion detection usually means spinning up Home Assistant, Frigate, or a full NVR stack.
camsnap collapses all of that into a three-command workflow: add a camera, snap a frame, watch for motion. No server. No web UI. Just your agent asking "what does the kitchen camera see right now?" and getting an answer.
How It Works
camsnap installs as a native binary via Homebrew and reads a YAML config file at ~/.config/camsnap/config.yaml. Each camera entry stores its hostname, credentials, and RTSP path. Once configured, every command references cameras by name — no URLs to remember.
Under the hood it shells out to ffmpeg for all media capture and uses ONVIF's discovery protocol to auto-detect cameras on your network.
Prerequisite: ffmpeg must be on your PATH.
Core Commands
Discover Cameras
camsnap discover --infoScans the local network for ONVIF-compatible cameras and prints their addresses, capabilities, and stream URIs. Useful first step in any new installation.
Add a Camera
camsnap add --name kitchen --host 192.168.0.10 --user admin --pass mypasswordWrites the camera config to ~/.config/camsnap/config.yaml. After this, all commands refer to the camera by the kitchen alias.
Capture a Snapshot
camsnap snap kitchen --out /tmp/shot.jpgGrabs a single JPEG frame from the camera's RTSP stream. Fast enough to call on-demand from a conversation — your agent can literally "look at" a camera mid-task.
Record a Clip
camsnap clip kitchen --dur 5s --out /tmp/clip.mp4Records a fixed-duration video segment. The --dur flag accepts standard duration strings (5s, 1m, 30s).
Watch for Motion
camsnap watch kitchen --threshold 0.2 --action 'notify-send "Motion detected!"'Continuously monitors the camera feed and executes the --action shell command when pixel-change exceeds the threshold. The threshold is a float from 0.0 (any movement) to 1.0 (near-total frame change).
Run a Self-Check
camsnap doctor --probeVerifies ffmpeg availability, tests camera connectivity, and reports any configuration issues. Run this first when debugging.
Installing the Skill
clawhub install camsnapThe skill installs camsnap via Homebrew automatically:
brew install steipete/tap/camsnapAfter installation, configure your first camera:
camsnap add --name front-door --host 192.168.1.50 --user admin --pass yourpassword
camsnap doctor --probe # verify everything works
camsnap snap front-door --out /tmp/test.jpg # confirm capturePractical Tips
Start with a short test capture. Before using watch or long clips, always run a snap first. If the snapshot fails, clip and watch will fail too — better to catch this early.
Threshold tuning matters. --threshold 0.2 (20% pixel change) works for outdoor cameras where wind moves trees. For indoor cameras in static rooms, 0.05–0.1 is more appropriate to catch genuine motion without false positives.
Use doctor --probe on new installs. Many ONVIF cameras require specific stream paths that differ from the default. The doctor command surfaces these mismatches before you get confusing ffmpeg errors.
Chain motion watch with agent actions. The --action flag runs any shell command, which means you can invoke clawhub itself: --action 'clawhub run analyze-frame /tmp/motion.jpg'. This lets camsnap trigger full agent workflows on detected movement.
Keep clips short for agent processing. 5–10 second clips are easier for downstream analysis than longer recordings. Use multiple clips over time rather than one long recording.
Considerations
macOS/Linux only. camsnap installs via Homebrew and requires native binary support. Windows is not currently supported.
ffmpeg dependency. If ffmpeg is not available or not on PATH, nothing works. On managed or containerized environments, this may need explicit setup.
No built-in storage management. camsnap writes files wherever you point --out but doesn't manage storage. Long-running watch deployments that save clips on every motion event can fill disk quickly.
RTSP credentials in config. Camera passwords are stored in ~/.config/camsnap/config.yaml in plaintext. Secure the file appropriately on shared systems.
No cloud or remote access. camsnap works only on networks where the camera is reachable. There's no relay or tunneling built in.
The Bigger Picture
camsnap represents something interesting: a developer-grade tool that makes physical infrastructure accessible to AI agents. Your cameras are sensors. camsnap is the interface. OpenClaw becomes the brain that decides what to do when the camera sees something.
The 821-install count suggests this isn't niche — people are genuinely building agent workflows that involve physical spaces. As more homes and offices deploy ONVIF cameras, tools like camsnap become the sensory layer for local AI automation.
View the skill on ClawHub: camsnap