Releases: 248Tech/RTSPanda
RTSPanda v0.1.1
RTSPanda v0.1.1 Release Notes
Headline
RTSPanda v0.1.1 adds Android no-Docker startup support and introduces an arm64 Pi-mode thermal monitor with banded alerts and API visibility.
Highlights
- Added
scripts/android-up.shfor Termux-native startup (no Docker, no root). - Added thermal monitor package with four thermal bands and hysteresis handling.
- Added
thermal_bandto/api/v1/system/stats. - Added Discord system alert dispatch on Hot thermal band entry.
- Updated README and quickstart with Android and release-aligned setup guidance.
What Changed
Android startup path
- New script:
scripts/android-up.sh- sets
RTSPANDA_MODE=pi - sets/creates
DATA_DIR - runs
termux-wake-lockwhen available - launches
./rtspanda
- sets
Thermal monitoring
- New package:
backend/internal/thermal/monitor.go - Thermal bands:
- Normal:
<45C - Warm:
45-54C - Hot:
55-64C - Critical:
>=65C
- Normal:
- Sensor source priority:
/sys/class/thermal/thermal_zone*/temp/proc/loadavgproxy fallback- disabled mode with warning
- Hysteresis:
- Critical -> Hot: 5m
- Hot -> Warm: 5m
- Warm -> Normal: 3m
Runtime integration
cmd/rtspanda/main.gonow starts thermal monitor when:GOARCH=arm64and mode ispi, orTHERMAL_MONITOR_ENABLED=true
THERMAL_AUTO_RESUMEdefaults tofalse.- Thermal transition events are logged with severity:
- Warm: WARN
- Hot: ERROR
- Critical: CRITICAL
- On first Hot-band entry, Discord system alerts are sent to cameras with configured webhook URLs.
API change
GET /api/v1/system/statsnow includes:thermal_band(normal,warm,hot,critical)
Validation
cd backend && go test ./...
Upgrade Notes
- Existing deployments can update in place.
- Android/Termux users can use
scripts/android-up.shfor consistent startup.
RTSPanda v0.1.0
RTSPanda v0.1.0 Release Notes
Headline
RTSPanda v0.1.0 hardens stream orchestration and readiness behavior for production camera fleets, and ships a full operator walkthrough that documents every supported setup method.
Highlights
- mediamtx orchestration now defaults to proactive stream startup (
sourceOnDemand=false). - Stream API now returns
initializinguntil HLS is truly reachable. - Keepalive logic now uses grace and backoff windows instead of tight path repair loops.
- README is now a production-grade setup and operations guide covering all deployment methods.
What Changed
Streaming Pipeline Stability
- Enforced proactive path startup and retained TCP RTSP transport defaults.
- Added idempotent path sync:
- no path recreation if current source already matches
- update only when path is missing or source changed
- Reduced reload churn:
- keepalive repair waits for unhealthy grace period
- repeat repairs respect backoff window
- full reload remains reserved for repeated mediamtx API failures
Stream Readiness Gate
/api/v1/cameras/:id/streamnow withholdshls_urluntil stream status isonline.- New status value
initializingindicates stream path exists but playlist is not yet playable. - Dashboard and camera views updated to handle
initializingcleanly without premature playback attempts.
Documentation
- Rewrote README into a full production walkthrough:
- Standard full stack
- Pi mode
- Pi + remote worker
- Standalone AI worker host
- Viewer mode (binary and Docker)
- Source development setup
- hardening, validation, troubleshooting, and upgrade guidance
Validation
cd backend && go test ./...cd frontend && npm run build
Upgrade Notes
- Existing installs can pull and redeploy normally.
- No breaking route changes; stream endpoint now intentionally returns empty
hls_urluntil playable.
RTSPanda v0.0.9
RTSPanda v0.0.9 Release Notes
Headline
RTSPanda v0.0.9 formalizes deployment modes as a runtime contract and adds a dedicated Snapshot Intelligence Engine for Raspberry Pi deployments.
Highlights
- Added first-class runtime modes:
pi,standard, andviewer. - Added Pi Snapshot AI pipeline with Claude/OpenAI providers and structured detection event output.
- Added strict Pi deployment guardrails: local YOLO AI-worker paths are explicitly blocked on ARM.
- Rewrote architecture and README docs around mode capabilities and constraints.
What Changed
Runtime and Backend
- Added
internal/modefor mode detection, capability gating, and startup banners. - Updated startup flow in
backend/cmd/rtspanda/main.go:- YOLO detection manager starts only in mode-capable environments.
- Pi and Viewer still expose detection endpoints through degraded manager handles.
- Snapshot AI manager starts in Pi-capable mode when enabled.
- Added
CaptureFrameToPathexport ininternal/detections/capture.gofor snapshot pipeline reuse.
Pi AI and Deployment
- Added
internal/snapshotai/manager.goandinternal/snapshotai/providers.gofor interval frame analysis through external vision APIs. - Updated
docker-compose.yml:- Explicit
RTSPANDA_MODEdefaults. - Pi profile Snapshot AI environment variables.
- Explicit
- Updated
scripts/pi-up.sh:- Removed unsupported
fullPi path. - Added ARM checks to block standalone AI-worker mode on Pi.
- Improved user-facing deployment and AI option guidance.
- Removed unsupported
Documentation
- Reworked
README.mdto explain three deployment modes and expected behavior. - Expanded AI planning docs (
AI/ARCHITECTURE.md,AI/DECISIONS.md,AI/PROJECT_CONTEXT.md) to align implementation with mode decisions.
Validation
cd backend && go test ./...
Upgrade Notes
- Existing
docker compose up --build -dserver installs remain supported and map to Standard mode. - Pi installs should use
PI_DEPLOYMENT_MODE=piwith optional Snapshot AI env vars. - Remote AI-worker deployments remain supported via separate server-class hosts.
RTSPanda v0.0.8
RTSPanda v0.0.8 Release Notes
Headline
RTSPanda v0.0.8 turns the project into a more serious edge-video platform: the default single-machine workflow stays intact, while Raspberry Pi deployments gain a cleaner first-run path, deterministic ONNX-only AI builds, and an easy upgrade path to distributed inference.
Highlights
- Added a Pi-first lightweight deployment mode for
rtspandawithout local AI-worker overhead. - Added cluster mode so a Pi can ingest streams locally and send frames to a remote AI worker on a second machine.
- Removed AI-worker export fallback from Docker builds. The worker now uses prebuilt ONNX models only.
- Added additive Compose profiles for
full,pi, andai-workerwithout breaking the existingdocker compose up --build -dflow. - Rewrote setup and deployment docs to clearly support Standard, Pi Standalone, and Pi + AI topologies.
- Fixed Pi standalone startup so it no longer traverses the local AI-worker build path.
- Repaired the default remote ONNX pin to a live Ultralytics asset and improved failure messages for invalid model sources.
What Changed
Platform and Deployment
docker-compose.ymlnow supports:- standard full-stack deployment
- lightweight Pi deployment
- standalone remote AI-worker deployment
- New
docker-compose.standalone.ymloverlay isolates Pi-only and AI-worker-only deployments from the unprofiled full stack. scripts/pi-up.shnow supports:PI_DEPLOYMENT_MODE=piPI_DEPLOYMENT_MODE=fullPI_DEPLOYMENT_MODE=ai-worker
- Standalone launch paths now use
buildfollowed byup --no-buildso targeted deployments only build the intended service. scripts/pi-preflight.shnow checks deployment mode and model-source expectations more accurately for Docker-first Pi workflows.
AI Runtime
ai_worker/Dockerfilenow resolves models deterministically:- local prebuilt ONNX file first
- explicit
YOLO_MODEL_URLsecond - named Ultralytics ONNX asset fallback last
- Default remote model pin now targets
yolo11non Ultralyticsv8.3.0, which is published and buildable today. - No PyTorch install path
- No
YOLO(...).export(...) - No runtime model conversion on ARM
Backend Detection Routing
- Added additive AI-target resolution using:
AI_MODE=local|remoteAI_WORKER_URL=http://<host>:8090DETECTOR_URLas the highest-precedence override
- Detection health now reports AI mode and remote worker context.
Release Quality Improvements
- Refreshed the frontend lockfile so current tests/tooling install cleanly.
- Fixed clean-checkout frontend embed compilation behavior in the backend.
Setup Paths
Standard
docker compose up --build -dPi Standalone
./scripts/pi-up.shPi + AI
AI host:
docker compose -f docker-compose.yml -f docker-compose.standalone.yml --profile ai-worker build ai-worker-standalone
docker compose -f docker-compose.yml -f docker-compose.standalone.yml --profile ai-worker up -d --no-build ai-worker-standalonePi host:
export AI_WORKER_URL="http://192.168.1.50:8090"
./scripts/pi-up.shValidation Checklist
docker compose config -qcd backend && go test ./internal/...cd frontend && npm run test -- --config vitest.config.tscd ai_worker && python -m pytest -q
Upgrade Notes
- Existing standard users can continue using
docker compose up --build -d. - Pi users who want the old all-in-one behavior can use
PI_DEPLOYMENT_MODE=full ./scripts/pi-up.sh. - For custom ONNX assets, place
model.onnxat repo root orai_worker/model/model.onnx, then setMODEL_SOURCE=local.
v0.0.7
RTSPanda v0.0.7 Release Notes
Highlights
- Added token-based authentication across backend and frontend, including login/session handling and protected API routes.
- Added initial automated test foundation for backend, frontend, and AI worker.
- Improved Raspberry Pi deployment with architecture-aware container builds and helper scripts.
- Resolved streaming configuration drift and documented latency/stability tuning controls.
- Expanded AI worker runtime safeguards for Pi CPU-only environments.
Included Areas
- Security/auth: backend/internal/auth/, backend/internal/api/router.go, frontend/src/auth/
- Streaming/runtime: backend/internal/streams/mediamtx.go, mediamtx/mediamtx.yml.tmpl, docker-compose.yml
- Deployment: Dockerfile, ai_worker/Dockerfile, scripts/pi-*.sh
- AI runtime: ai_worker/app/main.py, ai_worker/requirements.txt
- Testing/docs: docs/testing-strategy.md, frontend/vitest.config.ts, ai_worker/tests/*
Validation Checklist
- docker compose config -q
- cd backend && go test ./internal/...
- cd frontend && npm run test -- --config vitest.config.ts
- cd ai_worker && python -m pytest -q
Upgrade Notes
- If authentication is enabled, define AUTH_TOKEN before startup.
- For Raspberry Pi, prefer 64-bit OS and use ./scripts/pi-up.sh for first deploy.
v0.0.6
RTSPanda v0.0.6 - Performance, Observability, System Monitoring, Multi-View UX
Tag: v0.0.6
Diff: v0.0.5...v0.0.6
Highlights
- Dashboard stream status now uses a shared mediamtx path cache and batch status endpoint.
- API responses under
/api/now support gzip compression. - New observability surface: request logging, Prometheus-compatible
/metrics, and system stats API. - New readiness endpoint for deeper health checks:
GET /api/v1/health/ready. - Multi-view UX improvements: inline add-camera card + per-panel remove button.
- Settings now includes a live
Systemtab for uptime, memory, goroutines, request count, and network counters.
Backend and API Changes
- Added request body limit (256 KB) for camera create/update payloads:
backend/internal/api/cameras.go
- Router and middleware updates:
backend/internal/api/router.go- Added API gzip wrapping, request logging wrapper,
/metrics, and system routes.
- New API endpoints:
GET /api/v1/cameras/stream-statusGET /api/v1/system/statsGET /api/v1/health/readyGET /metrics
- New observability implementation files:
backend/internal/api/metrics.gobackend/internal/api/middleware.gobackend/internal/api/sysinfo.go
Streams and Performance
- Added stream path-list cache with 3-second TTL (shared across callers):
backend/internal/streams/cache.go
- Stream manager now exposes:
StreamStatusMap(cameraIDs []string)IsReady() bool
- Stream keepalive now uses cached path list, reducing mediamtx API pressure.
- mediamtx config now enables native metrics:
metrics: yesmetricsAddress: 127.0.0.1:9998
Database Changes
- Added migration:
backend/internal/db/migrations/008_cameras_index.sql
- Index added:
idx_cameras_orderoncameras(position, created_at)
Frontend Changes
- Dashboard now batch-loads camera list + stream status map in parallel:
frontend/src/pages/Dashboard.tsxfrontend/src/api/cameras.tsfrontend/src/components/CameraGrid.tsxfrontend/src/components/CameraCard.tsx
- App now uses route-level lazy loading and suspense fallback:
frontend/src/App.tsx
- Multi-view enhancements:
- Inline add-camera card picker
- Per-panel quick remove (
✕) frontend/src/pages/MultiCameraView.tsx
- New System tab + API integration:
frontend/src/pages/Settings.tsxfrontend/src/api/sysinfo.ts
AI Docs and Filesystem Review
Reviewed and updated AI planning/handoff/docs to match this release:
- Updated:
AI/CURRENT_FOCUS.mdAI/DECISIONS.mdAI/HANDOFF.mdAI/TODO.md
- Added:
AI/AGENTIC-PLATFORM-EXPANSION-GUIDE.md
These docs now reflect:
- v0.0.6 shipped scope
- deferred platform expansion roadmap
- explicit risks and next-priority items
User Documentation
- Updated
README.mdto v0.0.6 summary and compare link. - Updated
human/USER_GUIDE.mdwith system monitoring and metrics coverage.
Validation
- Backend:
cd backend && go build ./...(pass)
- Frontend:
cd frontend && npm run build(pass)
RTSPanda v0.0.5
RTSPanda v0.0.5 — Frigate Alert Provider + In-App Guides
Tag: v0.0.5
Diff: v0.0.4...v0.0.5
Highlights
- Added provider-based Discord detection alerts per camera:
yolo(RTSPanda built-in YOLOv8)frigate(external Frigate event ingestion)
- Added Frigate webhook endpoint:
POST /api/v1/frigate/events
- Added new in-app Guides page with practical setup walkthroughs:
- Lorex NVR port-forwarding
- Tailscale setup
- Lorex RTSP URL retrieval from login/web UI flow
- Added Support the Developer links to
https://248tech.com/donate.
Backend / API Updates
- Added Frigate ingestion handler:
backend/internal/api/frigate.go- Parses Frigate webhook payloads and forwards detection alerts to matching cameras.
- Matches cameras by provider
frigateandfrigate_camera_name(or camera name fallback). - Ignores non-
newFrigate event types.
- Registered new route:
POST /api/v1/frigate/events
- Extended notifier API contract to support external detection event dispatch.
- Updated Discord notification flow:
- Added source-aware detection notifications (
YOLOv8vsFrigatelabels in payloads). - Ensured YOLO-origin notifications are skipped for cameras configured with provider
frigate.
- Added source-aware detection notifications (
- Added optional Frigate snapshot fetch support via env:
FRIGATE_BASE_URL- If configured, event snapshots are fetched and attached to Discord alerts when available.
Database / Camera Model Updates
- Added migration:
backend/internal/db/migrations/007_discord_detection_provider.sql
- New camera fields:
discord_detection_provider(defaultyolo)frigate_camera_name(default empty)
- Updated camera model, service validation, and repository persistence/scan logic:
backend/internal/cameras/model.gobackend/internal/cameras/service.gobackend/internal/cameras/repository.go
Frontend Updates
- Added new page:
frontend/src/pages/Guides.tsx
- Added sidebar navigation route for Guides:
frontend/src/App.tsx
- Added donate/support links in UI:
- Sidebar support icon
- Guides page support button
- Extended camera API types for provider fields:
frontend/src/api/cameras.ts
- Updated camera setup form:
- Provider selection (
YOLOv8orFrigate) - Optional
Frigate camera name - Source-aware trigger wording
frontend/src/components/CameraForm.tsx
- Provider selection (
- Updated settings and camera badges to reflect provider-aware alerting:
frontend/src/pages/Settings.tsxfrontend/src/pages/CameraView.tsx
Documentation Updates
- Updated README release section and feature/config/API notes:
README.md
- Updated user guide for provider-based alerts and Frigate endpoint/env:
human/USER_GUIDE.md
Validation
- Backend checks:
go test ./...(pass)
- Frontend checks:
npm run build(pass)
v0.0.4
RTSPanda v0.0.4 - YOLO UI Polishing, Security, UI, Reliability, Connectivity
Tag: v0.0.4
Diff: v0.0.3...v0.0.4
YOLO UI Polishing
- Added per-camera ignore-zone editing using polygon drawing from live camera frames.
- Added ignore-zone rendering in camera view video overlays.
- Improved YOLO camera configuration UX and error guidance in forms.
- Improved detection feedback in camera view actions and status messages.
Security Updates
- Added strict backend validation for ignore-zone polygon structure and coordinates.
- Added validation and normalization for integrations settings input.
- Added centralized OpenAI settings service with key-set/clear handling.
- Added provider-specific validation rules for external storage configuration.
UI Updates
- Added multi-camera view (up to 4 cameras) with batch screenshot and Discord actions.
- Added
Settings -> IntegrationsUI for OpenAI captions and external storage sync. - Updated app shell navigation to include multi-view and extension download access.
- Added dashboard
Reset Networkcontrol for stream recovery workflows. - Added bundled Chrome PiP extension package and install instructions.
Reliability Updates
- Migrated AI worker runtime from PyTorch/ultralytics to ONNX Runtime + numpy.
- Added multi-stage AI worker Docker build with ONNX export at build time.
- Added stream keepalive health checks (mediamtx API + HLS reachability).
- Added per-camera stream reset and full-stream reload API endpoints.
- Added async manual Discord recording trigger flow with improved backend logging.
- Added conservative Docker memory/runtime defaults for constrained hosts.
Connectivity
- Added external video storage sync service for:
- Local Server (NAS/SMB/NFS path)
- Dropbox (rclone)
- Google Drive (rclone)
- OneDrive (rclone)
- Proton Drive (rclone)
- Added app settings API endpoints:
GET /api/v1/settingsPUT /api/v1/settings
- Added stream control API endpoints:
POST /api/v1/cameras/{id}/stream/resetPOST /api/v1/streams/reset
Docs Updated
README.md(v0.0.4 summary + config updates)docs/EXTERNAL_VIDEO_STORAGE.mdextensions/chrome-rtspanda-pip/README.mdfrontend/public/downloads/rtspanda-chrome-pip-extension-install.md
RTSPanda v0.0.3
RTSPanda v0.0.3 — YOLO Reliability + Discord Media Controls
This release improves detector stability and expands Discord alerting/media workflows.
Highlights
- Improved YOLO detector reliability in Docker deployments.
- Added verbose backend + AI worker logging around detection requests/results.
- Added per-camera Discord trigger controls for detection and interval screenshots.
- Added manual camera-view actions:
Screenshot to DiscordRecord to Discord
- Added richer clip/media handling with format fallback:
webm,webp,gif
- Updated user/docs wording to YOLO-first alerting, while keeping legacy alert-rule APIs for compatibility.
Detection Reliability Fixes
- Added FFmpeg RTSP timeout option fallback for older builds:
- try
-rw_timeout - fallback to
-timeout - fallback to no timeout flag
- try
- Added detector URL fallback behavior in backend detection client.
- Improved detector request failure aggregation/logging across fallback URLs.
- Added runtime dependencies to the AI worker image to prevent startup/runtime crashes in container environments.
- Ensured multipart image uploads include an explicit image content type expected by the detector.
New Camera Discord Controls
Per-camera fields added:
discord_trigger_on_detectiondiscord_trigger_on_intervaldiscord_screenshot_interval_secondsdiscord_include_motion_clipdiscord_motion_clip_secondsdiscord_record_formatdiscord_record_duration_seconds
Database migration:
backend/internal/db/migrations/005_discord_triggers.sql
New API Endpoints
POST /api/v1/cameras/{id}/discord/screenshotPOST /api/v1/cameras/{id}/discord/record
Notes
- Legacy alert-rule webhook APIs remain available for external workflows.
- Retention cleanup, delivery retry/backoff, and event pagination remain on the post-release backlog.
v0.0.2
Full Changelog: v0.0.1...v0.0.2