RTSP Snapshot
Capture JPG frames or short MP4 clips from RTSP/HTTP IP cameras via ffmpeg.
Files1
View on GitHubSKILL.mdskills/rtsp-snapshot/SKILL.md
GitHubRTSP Snapshot
Use to grab stills or short clips from IP security cameras (RTSP, HTTP
HLS) so Kate can report what is happening in a scene or store
evidence. All output stays under a sandbox dir (RTSP_SNAPSHOT_OUTPUT_ROOT,
default $TMPDIR).
Use when
- "take a snapshot from the garage camera"
- "record 30s from the doorbell now"
- "is there motion? capture and send me a snapshot"
Do not use when
- The camera is not reachable over LAN/public RTSP/HTTP URL
- Necesitas streaming continuo o WebRTC
- Clips > 5 minutes (hard cap by design)
Tools
status
ffmpeg bin + sandbox + limits.
snapshot { url, output_path, transport?, width? }
url—rtsp://user:pass@host/stream,rtsps://,http://,https://(NOfile://, NOconcat:)output_path— must stay under the sandbox root;.jpgrecommendedtransport—tcp(default, estable sobre NAT) oudpwidth— resize manteniendo aspecto
Returns {url, output_path, bytes, transport}.
clip { url, output_path, duration_secs, transport? }
duration_secs1..=300- Uses stream copy (no re-encode) — very fast
Returns {url, output_path, bytes, duration_secs, transport}.
Execution guidance
- Prefer TCP transport to avoid packet loss over Wi-Fi/VPN
- Credentials are inline in URL (
rtsp://user:pass@host/...); store them in 1Password and read them withread_secretwhen reveal is enabled - Output path outside sandbox →
-32034IoError; adjust operator config - Unreachable camera →
-32032NonZeroExit with ffmpeg stderr included - Motion detection is out of scope here — chain with a vision-enabled pipeline
Pipelines
Snapshot + vision
1. rtsp-snapshot.snapshot { url, output_path: "/sandbox/cam1.jpg" }
2. (futuro) vision-lm.describe { path: "/sandbox/cam1.jpg" }
Clip + transcribe
1. rtsp-snapshot.clip { url, output_path: "/sandbox/ring.mp4", duration_secs: 30 }
2. video-frames.extract_audio { path, output_path: "/sandbox/ring.wav", codec:"wav", mono:true, sample_rate:16000 }
3. openai-whisper.transcribe_file { file_path: "/sandbox/ring.wav" }