Watch your RTSP cameras in the browser. One app. No cloud. Runs on your machine.
RTSPanda is a small app you run on your PC or server. You add your camera URLs, open a browser, and watch live—no account, no subscription, no data sent to the cloud. You can also record, take screenshots, run per-camera YOLOv8 tracking, view live overlays + event history, and send rich Discord alerts.
- YOLO UI Polishing: per-camera ignore-zone polygon editor, overlay support, and improved YOLO camera setting flows.
- Security Updates: stronger backend input validation for ignore zones and integration settings, plus centralized OpenAI key/model handling in app settings.
- UI Updates: multi-camera mode (up to 4 streams), Integrations tab, dashboard network reset action, and bundled Chrome PiP extension install flow.
- Reliability Updates: ONNX Runtime migration for lower AI-worker memory, stream keepalive health checks, and stream reset APIs.
- Connectivity: external recording sync to Local Server, Dropbox, Google Drive, OneDrive, and Proton Drive.
Release details: RELEASE_NOTES_v0.0.4.md Diff: v0.0.3...v0.0.4
- A computer (Windows, macOS, or Linux)
- Your camera’s RTSP URL (looks like
rtsp://admin:password@192.168.1.64:554/stream) - To build once: Git, Go, and Node.js (we’ll show you how to install them on Windows below)
Optional: the mediamtx program is what actually pulls the video from your camera. If you don’t add it, RTSPanda still runs and you can add cameras—they’ll just show “offline” until you drop in mediamtx.
1. Get the code
git clone https://github.com/248Tech/RTSPanda.git
cd RTSPanda2. Get mediamtx (so you can see video)
- Go to mediamtx releases and download the zip for your system.
- Put the
mediamtx(ormediamtx.exeon Windows) file inside themediamtxfolder in RTSPanda.
3. Build
- Windows: open PowerShell in the RTSPanda folder and run:
.\build.ps1 - Mac/Linux: run:
make build
4. Run
- Windows:
.\backend\rtspanda.exe - Mac/Linux:
./backend/rtspanda
5. Open your browser
Go to http://localhost:8080. Click Settings → Cameras → Add Camera, enter a name and your RTSP URL, then go back to the dashboard and click the camera to watch.
Use this if you want the fastest deploy path without local Go/Node setup.
git clone https://github.com/248Tech/RTSPanda.git && cd RTSPanda && docker compose up --build -dThen open http://localhost:8080.
This compose setup starts both services: rtspanda (Go backend) and ai-worker (FastAPI + YOLOv8).
First build can take longer because Python AI dependencies are large.
Stop it:
docker compose downData persists in ./data on your host.
Windows one-click helper (auto-starts Docker Desktop if needed):
.\scripts\docker-up.ps1One command to clone the repo, install Git/Go/Node (if missing), and build. Paste into PowerShell 7:
git clone https://github.com/248Tech/RTSPanda.git RTSPanda; cd RTSPanda; .\scripts\install-windows.ps1To have the script also download mediamtx for you:
git clone https://github.com/248Tech/RTSPanda.git RTSPanda; cd RTSPanda; .\scripts\install-windows.ps1 -DownloadMediamtxFrom CMD (requires Git and PowerShell 7 installed):
git clone https://github.com/248Tech/RTSPanda.git RTSPanda && cd RTSPanda && pwsh -NoProfile -File scripts\install-windows.ps1Requires: For the one-liners you need PowerShell 7 and Git (so we can clone). If Git isn’t installed: git-scm.com or winget install Git.Git. The script will try to install Go and Node via winget if they’re missing.
When the install finishes, run:
.\backend\rtspanda.exeand open http://localhost:8080.
Full control: install every dependency yourself, then build and run.
winget install Microsoft.PowerShell --accept-package-agreementsClose and reopen your terminal; use “PowerShell 7” or pwsh so the rest of the commands run in PS7.
winget install Git.Git --accept-package-agreementsClose and reopen the terminal so git is on your PATH.
winget install GoLang.Go --accept-package-agreementsAgain, reopen the terminal so go is available.
winget install OpenJS.NodeJS.LTS --accept-package-agreementsReopen the terminal so node and npm are on your PATH.
git clone https://github.com/248Tech/RTSPanda.git
cd RTSPandaDownload the Windows zip from mediamtx releases (e.g. mediamtx_v*_windows_amd64.zip), unzip it, and copy mediamtx.exe into the mediamtx folder inside RTSPanda:
New-Item -ItemType Directory -Force -Path mediamtx
# Then copy mediamtx.exe from your Downloads into .\mediamtx\Or use the install script to do it for you:
.\scripts\install-windows.ps1 -DownloadMediamtx -SkipBuild(Use -SkipBuild only if you already built and just want mediamtx.)
.\build.ps1You should see the frontend build, then the Go build. The result is backend\rtspanda.exe.
.\backend\rtspanda.exeYou should see something like: RTSPanda listening on :8080 (data: ./data).
Open http://localhost:8080 in your browser. Add a camera in Settings → Cameras, then click it on the dashboard to watch the stream.
| Feature | What it means |
|---|---|
| Live view | Dashboard with all cameras; click one for full-screen live video. |
| On-demand | The app only connects to a camera when someone is watching. |
| Recording | Turn on “Record to disk” per camera; get 1-hour MP4 files you can browse and download in the app. |
| Screenshots | While watching, hover over the video and click to save a PNG. |
| YOLOv8 tracking UI | Configure tracking per camera and run test detections directly in camera view. |
| Live overlays + history | Show bounding boxes on live video and browse grouped detection snapshots/events. |
| Discord alerts + triggers | Send rich webhook alerts with configurable detection/interval triggers, media options, cooldown, and mention per camera. |
| Manual Discord media | Send instant screenshot or clip from camera view with one click. |
| Legacy alert-rule API | Optional compatibility webhooks remain available for external automation flows. |
| REST API | Manage cameras, get stream status, list recordings, and trigger alerts from code or scripts. |
You can change behaviour with environment variables (no config file needed):
| Variable | Default | What it does |
|---|---|---|
PORT |
8080 |
Port the web server uses. |
DATA_DIR |
./data |
Where the database and recordings are stored. |
MEDIAMTX_BIN |
auto | Full path to mediamtx.exe if it’s not in the mediamtx folder. |
RCLONE_BIN |
rclone |
rclone binary path for cloud video storage sync (Dropbox/Drive/OneDrive/Proton Drive). |
FFMPEG_BIN |
ffmpeg |
FFmpeg path for frame capture used by object detection sampling. |
DETECTOR_URL |
http://127.0.0.1:8090 |
URL of the async detector worker (/detect, /health). |
DETECTION_SAMPLE_INTERVAL_SECONDS |
30 |
Global sample interval for camera frame capture. |
DETECTION_WORKERS |
2 |
Concurrent async detection worker requests from backend queue. |
DETECTION_QUEUE_SIZE |
128 |
Max queued snapshots waiting for detector service. |
DISCORD_MOTION_CLIP_SECONDS |
4 |
Default motion-clip length used when camera-specific value is missing. |
AI worker (YOLO) tuning variables:
| Variable | Default | What it does |
|---|---|---|
YOLO_MODEL_PATH |
/model/yolov8n.onnx |
ONNX model path used by ai-worker runtime. |
YOLO_CONFIDENCE |
0.25 |
Base confidence threshold before backend camera filters are applied. Lower for more detections. |
YOLO_IOU |
0.45 |
NMS IoU threshold. Lower values suppress overlapping boxes more aggressively. |
YOLO_MAX_DETECTIONS |
100 |
Maximum objects returned per frame. |
YOLO_LOG_LEVEL |
INFO |
AI worker logging verbosity (DEBUG, INFO, WARNING, etc). |
Example (different port and data folder):
$env:PORT = "9000"; $env:DATA_DIR = "C:\rtspanda-data"; .\backend\rtspanda.exeRTSPanda can auto-sync recordings to:
- Local Server (NAS/SMB/NFS path)
- Dropbox
- Google Drive
- OneDrive
- Proton Drive
Setup guide: docs/EXTERNAL_VIDEO_STORAGE.md
Everything the web UI does can be done over HTTP. Base URL: http://localhost:8080/api/v1
| What | Method | Path |
|---|---|---|
| List cameras | GET |
/cameras |
| Add camera | POST |
/cameras |
| Get one camera | GET |
/cameras/{id} |
| Update camera | PUT |
/cameras/{id} |
| Delete camera | DELETE |
/cameras/{id} |
| Stream status + HLS URL | GET |
/cameras/{id}/stream |
| List recordings | GET |
/cameras/{id}/recordings |
| Download recording | GET |
/cameras/{id}/recordings/{filename} |
| Alert rules | GET / POST |
/cameras/{id}/alerts |
| Send alert event (webhook) | POST |
/alerts/{id}/events |
| Detection health | GET |
/detections/health |
| Trigger test frame capture | POST |
/cameras/{id}/detections/test-frame |
| Trigger test detection | POST |
/cameras/{id}/detections/test |
| Send screenshot to Discord | POST |
/cameras/{id}/discord/screenshot |
| Send recording to Discord | POST |
/cameras/{id}/discord/record |
| List recent detection events | GET |
/detection-events |
| Get snapshot for event | GET |
/detection-events/{id}/snapshot |
| Health check | GET |
/health |
Example: add a camera with PowerShell:
Invoke-RestMethod -Method POST -Uri "http://localhost:8080/api/v1/cameras" -ContentType "application/json" -Body '{"name":"Front Door","rtsp_url":"rtsp://admin:password@192.168.1.10:554/stream","enabled":true}'More examples and details: human/USER_GUIDE.md.
- RTSPanda has no login screen. Use it on a trusted network, behind a VPN, or behind a reverse proxy (e.g. nginx with password).
- Camera passwords are stored in the SQLite database. Keep the
datafolder (andDATA_DIR) only readable by people you trust. - Don’t expose the app directly to the internet without something in front of it (proxy, VPN, etc.).
- Run backend only:
cd backend; go run ./cmd/rtspanda - Run frontend with hot reload:
cd frontend; npm install; npm run dev(then open http://localhost:5173; API and HLS are proxied to the backend.) - Lint:
cd backend; go vet ./...andcd frontend; npm run lint
Full guide, RTSP URL tips, and troubleshooting: human/USER_GUIDE.md.
RTSPanda/
├── backend/ # Go server and embedded web UI
├── frontend/ # React app (built and embedded into backend)
├── mediamtx/ # Put mediamtx.exe (or mediamtx) here
├── Dockerfile # Docker image build
├── docker-compose.yml# One-command container run
├── scripts/ # install-windows.ps1, dev helpers
├── human/ # User guide
├── build.ps1 # Windows build
└── Makefile # Mac/Linux build
MIT. See LICENSE.
RTSPanda — self-hosted, no cloud, no fuss.
