✓ Verified 💻 Development ✓ Enhanced Data

Ipcam

ONVIF PTZ control + RTSP capture + camera discovery.

Rating
4.7 (157 reviews)
Downloads
36,219 downloads
Version
1.0.0

Overview

ONVIF PTZ control + RTSP capture + camera discovery.

Complete Documentation

View Source →

IP Camera Skill

Control IP cameras via RTSP (snapshots, recording) and ONVIF (PTZ, presets, discovery).

Tested with TP-Link Tapo/Vigi. Works with Hikvision, Dahua, Reolink, Amcrest, Axis, and other ONVIF Profile S/T cameras.

Setup

bash
bash skills/ipcam/install.sh

Then either discover cameras automatically or configure manually:

bash
# Auto-discover and add
ptz.py discover --add

# Or edit config
nano ~/.config/ipcam/config.json

Config Format

json
{
  "default": "front-door",
  "cameras": {
    "front-door": {
      "ip": "192.168.1.100",
      "username": "admin",
      "password": "secret",
      "rtsp_port": 554,
      "onvif_port": 2020,
      "rtsp_main_path": "stream1",
      "rtsp_sub_path": "stream2"
    }
  }
}
  • onvif_port: 2020 (TP-Link), 80 (Hikvision/Dahua), 8000, 8080
  • rtsp_main_path / rtsp_sub_path: auto-detect with ptz.py stream-uri --save
  • Env overrides: CAM_IP, CAM_USER, CAM_PASS, CAM_RTSP_PORT, CAM_ONVIF_PORT

Usage

RTSP (camera.sh)

bash
camera.sh snapshot                         # capture frame
camera.sh --cam cam2 snapshot /tmp/cam.jpg # specific camera
camera.sh record 15                        # record 15s clip
camera.sh stream-url sub                   # print sub-stream URL
camera.sh info                             # test connectivity
camera.sh list-cameras                     # list configured cameras

PTZ (ptz.py)

bash
ptz.py status                     # current position
ptz.py move left                  # pan left (speed 0.5, 0.5s)
ptz.py move zoomin 0.8 1.0        # zoom in, speed 0.8, 1s
ptz.py goto 0.5 -0.2 0.0          # absolute pan/tilt/zoom
ptz.py home                       # home position
ptz.py stop                       # stop movement
ptz.py preset list                # list presets
ptz.py preset goto 1              # go to preset 1
ptz.py preset set 2 "Door"        # save current pos as preset

Discovery & Stream URI

bash
ptz.py discover                   # scan network for ONVIF cameras
ptz.py discover --add             # scan and add to config
ptz.py stream-uri                 # query RTSP paths from ONVIF
ptz.py stream-uri --save          # save paths to config

Multi-camera: use --cam with any command.

Directions

left, right, up, down, zoomin, zoomout, upleft, upright, downleft, downright

Troubleshooting

  • RTSP fails: Check IP/port/firewall. Use ptz.py stream-uri to verify paths. Camera may limit concurrent RTSP connections (try closing other viewers).
  • ONVIF fails: Verify ONVIF port and that ONVIF is enabled in camera web UI. Try common ports: 2020, 80, 8000, 8080.
  • No cameras found: Ensure same subnet, ONVIF enabled, UDP multicast not blocked.
  • PTZ not working: Not all cameras support PTZ. Check ONVIF Profile S support.
  • Auth error: Check username/password. Special characters are URL-encoded automatically.

Installation

Terminal bash

openclaw install ipcam
    
Copied!

💻Code Examples

}

.txt
- `onvif_port`: 2020 (TP-Link), 80 (Hikvision/Dahua), 8000, 8080
- `rtsp_main_path` / `rtsp_sub_path`: auto-detect with `ptz.py stream-uri --save`
- Env overrides: `CAM_IP`, `CAM_USER`, `CAM_PASS`, `CAM_RTSP_PORT`, `CAM_ONVIF_PORT`

## Usage

### RTSP (`camera.sh`)
example.sh
# Auto-discover and add
ptz.py discover --add

# Or edit config
nano ~/.config/ipcam/config.json
example.json
{
  "default": "front-door",
  "cameras": {
    "front-door": {
      "ip": "192.168.1.100",
      "username": "admin",
      "password": "secret",
      "rtsp_port": 554,
      "onvif_port": 2020,
      "rtsp_main_path": "stream1",
      "rtsp_sub_path": "stream2"
    }
  }
}
example.sh
camera.sh snapshot                         # capture frame
camera.sh --cam cam2 snapshot /tmp/cam.jpg # specific camera
camera.sh record 15                        # record 15s clip
camera.sh stream-url sub                   # print sub-stream URL
camera.sh info                             # test connectivity
camera.sh list-cameras                     # list configured cameras
example.sh
ptz.py status                     # current position
ptz.py move left                  # pan left (speed 0.5, 0.5s)
ptz.py move zoomin 0.8 1.0        # zoom in, speed 0.8, 1s
ptz.py goto 0.5 -0.2 0.0          # absolute pan/tilt/zoom
ptz.py home                       # home position
ptz.py stop                       # stop movement
ptz.py preset list                # list presets
ptz.py preset goto 1              # go to preset 1
ptz.py preset set 2 "Door"        # save current pos as preset
example.sh
ptz.py discover                   # scan network for ONVIF cameras
ptz.py discover --add             # scan and add to config
ptz.py stream-uri                 # query RTSP paths from ONVIF
ptz.py stream-uri --save          # save paths to config

Tags

#smart_home-and-iot

Quick Info

Category Development
Model Claude 3.5
Complexity One-Click
Author ltpop
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install ipcam