Skip to content

Repository files navigation

smart-reset-browser

Browser-based camera reset, control, and NDI monitoring tool for PTZ cameras.
Runs fully local — the browser is the UI, no cloud deployment required.


What it does

  • Connects to PTZ cameras (Panasonic, BirdDog) over the local network
  • Detects the camera model automatically and runs a full reset sequence
  • Provides direct control of advanced camera features (Gamma, Matrix, Auto Iris, etc.)
  • Detects settings changed outside the app — e.g. directly via the camera's own web UI — and updates the panel live (Panasonic only)
  • Changes a discovered Panasonic camera's IP address, reboots it, and reads/renames its on-screen name/title
  • Streams a live video feed with waveform monitor and vectorscope directly in the browser — on Panasonic cameras, the camera's own built-in view by default (near-instant, works on any platform); NDI is available as an opt-in alternative for any camera brand (Windows only)

Requirements

  • Python 3.10 or newer
  • Windows for the NDI monitor specifically (reset/control and the built-in camera view work cross-platform)
  • Network access to the camera (same LAN)
  • NDI output enabled on the camera, only if you want to use the NDI monitor instead of the default built-in camera view

The NDI runtime (Processing.NDI.Lib.x64.dll) is included in lib/ndi/ — no SDK installation required.


Installation

git clone https://github.com/AndyJae/smart-reset-browser.git
cd smart-reset-browser
python -m venv .venv
.venv\Scripts\activate      # Windows
pip install -r requirements.txt

Start

py web_main.py

The browser opens automatically at http://localhost:8765.


Usage

Feature Description
Scan Network Discovers cameras on the LAN (Panasonic: UDP broadcast, BirdDog: HTTP scan)
Connect Connects to the camera — model is detected automatically
Reset Camera Runs the full reset sequence; UI state re-syncs from the camera afterwards. Also resets the camera's name/title back to its model default, on models that support it
Delete Presets Delete a single preset, a range, or all presets — Panasonic UE-series (memory + name + thumbnail) and HE-series/HR140 (memory only)
Configure IP / Change IP Select a discovered Panasonic camera, then change its IP (Netmask/Gateway are editable too — needed when moving a camera to a different subnet, e.g. after a factory reset). A toast confirms once the camera answers at its new address; the fields update automatically so you can keep working without a manual re-scan. Only works within ~20 minutes of the camera's last boot
Reboot Camera Reboots a discovered Panasonic camera — useful to refresh the 20-minute Configure-IP window. Requires the camera's admin username/password (asked in a popup, never stored)
Camera Name Shows the connected camera's current on-screen name/title next to a "Change name" field — rename it directly from the browser
ABB (Black) Automatic black balance — color temp must be set first (Panasonic)
AWW (White) Automatic white balance — color temp must be set first (Panasonic)
Feature Buttons Toggle camera features (Auto Focus, Auto Iris, Gamma, Matrix, etc.) on/off
OSD Toggle Show/hide the camera's on-screen menu — stateful ON/OFF on Panasonic, stateless flip on BirdDog
Dropdowns Select camera modes (Exposure, White Balance, Color Temp, etc.)
Trigger Buttons One-shot commands — enabled only when the related mode is active
Open Camera Opens the camera's web GUI in the browser
File Logging Writes all operation logs to ~/smart-reset.log for debugging
Video Monitor Live video feed + waveform (RGB Parade / Overlay / Luma Y) + vectorscope (YCbCr BT.709) — built-in camera view by default, or NDI

Video Monitor

Shows automatically once a camera is connected. On Panasonic cameras, the built-in camera view (the same live feed the camera's own web UI shows) starts by default, first image in well under a second. On BirdDog/P2 cameras, which don't have this endpoint, use NDI instead (below).

  1. Choose waveform mode: RGB Parade, RGB Overlay, or Luma (Y)
  2. Click any image to open fullscreen

NDI (optional alternative)

  1. Enable NDI output on the camera
  2. Check Enable NDI to switch to the NDI feed — starts/stops automatically with the camera connection — or click Refresh then Start manually
  3. Uncheck to switch back to the built-in camera view

The first NDI frame takes 3–4 seconds — normal NDI connection negotiation.

Waveform — Rec. 709

All modes computed in BT.709 colour space. Graticule at 0, 25, 50, 75, 100 IRE.

Mode Description
RGB Parade R, G, B channels side by side
RGB Overlay R, G, B on the same axes
Luma (Y) Y = 0.2126·R + 0.7152·G + 0.0722·B

Vectorscope — Rec. 709

YCbCr BT.709 trace with saturation rings every 10 %, crosshair at neutral, and 75 % colour-bar target boxes (Y, Cy, G, Mg, R, B).


Supported Cameras

Panasonic

AW-UE30 / UE40 / UE50 / UE70 / UE80 / UE100 / UE145 / UE150A / UE160
AW-HE40 / HE42 / HE50 / HE60 / HE120 / HE130 / HR140
AK-UB300

BirdDog

  • P200 / A200 / A300 — full colour matrix (14 params)
  • P100 / PF120 — colour matrix (12 params)
  • P110 / P120 — colour matrix (12 params)
  • P4k / P400 / P240 — no colour matrix
  • Any other BirdDog model — generic fallback

Panasonic P2 (Device Control Protocol)

  • VariCam 35 — via a dedicated TCP transport (port 49152), separate from the HTTP-based Panasonic/BirdDog cameras above

Panasonic reset/control commands are cross-checked against the official interface-specification PDFs in docs/specs/ — check them before adding or changing a command for any Panasonic model.


Project Structure

smart-reset-browser/
├── web_main.py              # Entry point: server + tray icon + browser
├── requirements.txt
│
├── core/                    # Manufacturer-agnostic interfaces and engine
├── camera_plugins/          # Manufacturer plugins
│   ├── panasonic/
│   ├── birddog/
│   └── p2/                  # Panasonic P2 Device Control Protocol (VariCam 35)
├── smart_reset/             # Session state, discovery, HTTP client
│
├── ndi/                     # NDI monitor: frame capture + scope computation
│   ├── ndi_input.py         # NDI 6 SDK ctypes wrapper
│   └── scopes.py            # Waveform + vectorscope (BT.709) — shared with the built-in camera view
│
├── h264/                    # Built-in camera view (JPEG snapshot polling, not RTSP/H.264 despite the name)
│   └── h264_input.py
│
├── lib/ndi/                 # Bundled NDI runtime DLL (Windows)
│
├── docs/specs/              # Official manufacturer interface-spec PDFs (reference for camera commands)
│
└── web/
    ├── app.py               # Core camera-control routes + plugin loader
    ├── routes/              # h264, NDI, network (scan/Configure-IP/reboot), system, shared helpers
    ├── ws_manager.py        # WebSocket manager
    ├── templates/           # Jinja2 templates
    └── static/              # CSS

Contributing

See CONTRIBUTING.md.


Technology

  • Backend: FastAPI + uvicorn
  • Frontend: HTMX + Jinja2 + Vanilla JS
  • Built-in camera view: plain HTTP JPEG snapshot polling (requests + Pillow) — no native SDK, cross-platform
  • NDI input: ctypes against NDI 6 SDK (Processing.NDI.Lib.x64.dll)
  • Scopes: NumPy column-histogram waveform + YCbCr vectorscope; Pillow for JPEG encode
  • Real-time: WebSocket for logs, camera events, and the video/waveform/vectorscope binary stream

License

Licensed under the Apache License 2.0 — © 2026 medien-support.com

About

Free, open-source PTZ camera reset tool for Panasonic and BirdDog — browser UI, no cloud, no subscription.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages