Cross-platform desktop manager for Xiongmai (XM) NVR, DVR and IP camera devices. XMDMS talks to devices over the NETIP/DVRIP protocol and covers discovery, bulk provisioning, configuration, live view and maintenance in a single PySide6 UI.
- Discover devices by UDP broadcast on a selected network interface.
- Inventory, sort, export and manually manage discovered devices.
- Provision IP addresses and change passwords in bulk.
- Edit network, system, video, camera, storage, user and serial/PTZ settings.
- Watch live video, listen to audio, record streams and save snapshots.
- Back up/restore configuration, inspect logs and run firmware utilities.
- English and Russian UI, light/dark themes and persistent preferences.
- UDP broadcast discovery with a configurable timeout (1–600 s) and number of search attempts (probes). The search runs until stopped or the configured window expires.
- Device table with IP, MAC, serial number, firmware version, build date and host name. Columns are sortable and rows are selectable with checkboxes.
- Search again removes devices that no longer answer, while manual entries are kept.
- Double-click a row to connect. Right-click for copy, select all/deselect all, add, modify, delete and clear.
- Add devices manually by IP address and port, with per-device login and password.
- Export the current inventory to CSV.
- Provision assigns consecutive IP addresses starting from the configured Start IP (automatically suggested as the selected device IP + 1). Each device gets two attempts with per-row progress and success/failure feedback.
- Change sets a new password on all checked devices, or on the selected device when nothing is checked.
- Digital channels manages downstream IP cameras on an NVR/DVR: search local NETIP/ONVIF cameras through the recorder, add all IPC, edit channel mappings and credentials, and provision IP addresses.
| Tab | What it covers |
|---|---|
| Network | LAN address, subnet, gateway, DHCP/DNS, HTTP/TCP/RTSP/ONVIF ports, Wi-Fi scan and security, UPnP, SmartNet, PMS, VNIC, NAT/RPS, NTP, firmware upload and cloud upgrade. |
| System | Hardware/software/cloud ID, runtime age, channel count, device type, NAT status, TV standard, device language, restart schedule, time zone, date/time format, beeper, face/debug flags, audio input, cloud-ID QR code, time sync, reboot, config import/export/reset, device logs and firmware utilities. |
| Display | Video output resolution, GUI feature flags and window alpha. |
| Encode | Per-channel main stream and substream: H.264/H.265, resolution, FPS, CBR/VBR rate control, quality, bitrate, I-frame interval, smart H.265+/H.265AI, audio/video enable. Includes an all-channels editor. |
| Camera | Day/night mode, white balance, BLC, aperture, exposure, shutter, gain, AE sensitivity, day/night noise filters, IR-cut, DNC threshold, DWDR, flip/mirror, flicker rejection and white-light controls. |
| Storage | Disk list, read/write, read-only, redundant and snapshot modes, format and recover actions. |
| Users | User and group lists, add/modify/delete users and groups, and change user passwords. |
| RS232/485/PTZ | RS232 function and serial parameters, per-channel PTZ protocol/address/serial settings, and RS485 configuration. |
| Settings | Theme, language, password masking, search timeout and search attempts. |
Configuration is loaded from the device when a tab is opened and applied with Save. Unsupported options depend on device firmware and may be rejected or ignored by the device.
- NETIP live video with selectable channel and Main/Sub stream.
- Video decoding through QtMultimedia/FFmpeg by default, with optional PyAV or
a system
ffmpegfallback. SetXMDM_VIDEO_BACKEND=qt|av|ffmpegto force a backend. - G.711A audio playback with mute and volume controls.
- Raw stream recording to H.264, H.265, MJPEG or M4V files while watching.
- Snapshot popup with right-click Save image... (JPEG/PNG).
- RTSP URL copy/open for the selected channel and stream.
- View and erase device logs.
- Export/import device configuration files and reset selected configuration sections or perform a factory reset.
- Upload firmware from a local file, or start the device's cloud upgrade.
- Build an XM recovery image (
.img) or a flat flash dump (.dump) from an XM firmware.binpackage for offline recovery work. - Inspect raw NETIP request/response traffic in the Query console.
- Synchronize device time, reboot devices and change passwords.
- Theme: Auto (follows the system color scheme), Light or Dark.
- Language: Auto, English or Русский. Auto follows the system locale.
- Password fields can be shown or masked.
- Search timeout (1–600 s) and search attempts (minimum 3) are editable and persisted.
- Preferences and last-used folders are saved with
QSettingsand restored on the next launch.
- Python 3.10 or newer for running from source (the Windows CI build uses Python 3.12).
PySide6==6.9.*,psutil,cryptographyandqrcodefromrequirements.txt.- The required NETIP client
dvrip.pymust be supplied next toxmdms.py; it is not installed from PyPI. - Optional:
avfor the PyAV video fallback, or a systemffmpegexecutable for the external decoder. - Network access to the device: TCP 34567 by default, UDP 34569 for discovery, and the configured HTTP/RTSP/ONVIF ports.
python3 -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
pip install -r requirements.txt
python3 xmdms.pyPlace dvrip.py in the same directory as xmdms.py before starting the
application. Windows users can use py -3.12 instead of python3.
PyInstaller cannot cross-compile; build on Windows (or let CI do it):
.packaging\build_windows.batThe script creates a virtual environment, installs dependencies, generates the icon and produces a onedir build:
dist\xmdms\xmdms.exe
Requirements: Windows and Python 3.12 with the py launcher. The GitHub
Actions workflow (.github/workflows/build-release.yml) builds Windows, Linux
and macOS on every push and publishes releases from main.
- The device table and credentials are session-only; the app does not persist either. Use Export to keep an inventory. Manual entries are lost when the application closes.
- Available settings and actions depend on the device model and firmware.
- Linux/macOS packaging is not provided; run the source with a graphical Qt environment.
- If discovery finds nothing, select the correct interface, allow UDP 34569 through the firewall, and confirm the device is on the same subnet.
- If video fails to start, install a Qt multimedia backend or a system
ffmpeg, or tryXMDM_VIDEO_BACKEND=av/ffmpeg.
Use XMDMS only on devices you own or are explicitly authorized to manage. Changing network settings, provisioning addresses, upgrading firmware, resetting configuration and formatting storage can disconnect or erase data. Double-check the selected devices and keep configuration backups before performing destructive actions.