rtspfinder
Discover RTSP IP cameras on your local network, try common default credentials, and automatically save configuration when exactly one device is found.
admin:123456 is tried first, followed by a built-in list of common camera usernames and passwords.
Install
From PyPI:
pip install rtspfinder
From source:
pip install .
# optional: better multi-interface subnet detection
pip install rtspfinder[netifaces]
Quick start (auto mode)
With no arguments, rtspfinder:
- Uses saved config if present (
~/.config/rtspfinder/config.json) and connects to the stream - Otherwise scans the LAN for RTSP (port 554)
- If one RTSP host is found, probes paths/credentials, writes config, and opens the stream
- If several hosts exist but only one authenticates, still auto-configures and connects
In-terminal video (like ani-cli)
By default, when run from a TTY, video plays inside the terminal using mpv (--vo=kitty, tct, or caca) — same idea as ani-cli’s --no-detach in-terminal mpv.
brew install mpv ffmpeg # required for TTY video
brew install chafa # optional ASCII fallback
rtspfinder # discover → save → play in TTY
rtspfinder --tty # force TTY even if auto-detection differs
rtspfinder --gui # separate window (ffplay/mpv)
rtspfinder
Force a new scan:
rtspfinder --refresh
Print the saved URL for scripts:
rtspfinder --url
Skip auto-connect:
rtspfinder --no-connect
Camera controls (YCC365 Plus / Ginatex HTTP + ONVIF)
Per YCC365 docs: HTTP 80, RTSP 554, ONVIF 80.
Many of these cameras (including Ginatex/TAS-Tech firmware) expose ONVIF PTZ over HTTP without auth — same approach as the PTZ-YCC365 Home Assistant component.
# Discover HTTP/ONVIF endpoints (uses saved config if present)
rtspfinder controls --discover-only --save
# Interactive PTZ in the terminal: w/a/s/d move, x stop, q quit
rtspfinder controls
More commands
| Command | Description |
|---|---|
rtspfinder --discover-only |
List hosts with port 554 open |
rtspfinder --host 192.168.1.100 -v |
Probe one camera |
rtspfinder --show-config |
Show saved configuration |
rtspfinder --no-auto |
Scan all hosts without auto-save rules |
rtspfinder --no-save |
Discover but do not write config file |
Config file permissions are set to 600 where supported.
Python API
from rtspfinder import auto_configure, load_config
result = auto_configure()
if result.configured:
print(result.config.url)
Security
Only use on networks and devices you own or are authorized to test. Change default camera passwords after setup.
Publish to PyPI
pip install build twine
python -m build
twine check dist/*
twine upload dist/*
Use PyPI API tokens; do not commit credentials.
License
MIT — see LICENSE.
Metadata
Release files for rtspfinder 1.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rtspfinder-1.4.1.tar.gz | 27.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rtspfinder-1.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.1 kB
Release files / rtspfinder-1.4.1.tar.gz
| Download URL | rtspfinder-1.4.1.tar.gz |
|---|---|
| Size | 27.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35e509dd95b8f6ba075472fe06348bdf6a261fe76d922d2ef7e0463fa9f7a295
|
|
BLAKE2b-256 checksum How to use checksums |
00d219fd799f1e504ce3aef825f708c69f208de8c2314e60f9cc6b2289b9b742
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|
Release files / rtspfinder-1.4.1-py3-none-any.whl
| Download URL | rtspfinder-1.4.1-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b3df2e505f00dc36836ce0a29dcc1f502cf435e9ed6a32a4de2931b812cbe7f4
|
|
BLAKE2b-256 checksum How to use checksums |
f48de89c52e1e078ea8cf513705d117d3f0b5b69dc6f2e1095b4357eeccf6464
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.5
|