Browser-based camera reset, control, and NDI monitoring tool for PTZ cameras.
Runs fully local — the browser is the UI, no cloud deployment required.
- 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)
- 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.
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.txtpy web_main.pyThe browser opens automatically at http://localhost:8765.
| 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 |
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).
- Choose waveform mode: RGB Parade, RGB Overlay, or Luma (Y)
- Click any image to open fullscreen
- Enable NDI output on the camera
- Check Enable NDI to switch to the NDI feed — starts/stops automatically with the camera connection — or click Refresh then Start manually
- Uncheck to switch back to the built-in camera view
The first NDI frame takes 3–4 seconds — normal NDI connection negotiation.
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 |
YCbCr BT.709 trace with saturation rings every 10 %, crosshair at neutral, and 75 % colour-bar target boxes (Y, Cy, G, Mg, R, B).
AW-UE30 / UE40 / UE50 / UE70 / UE80 / UE100 / UE145 / UE150A / UE160
AW-HE40 / HE42 / HE50 / HE60 / HE120 / HE130 / HR140
AK-UB300
- 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
- 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.
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
See CONTRIBUTING.md.
- 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
Licensed under the Apache License 2.0 — © 2026 medien-support.com