ONVIF Event Viewer is a small desktop GUI for monitoring live ONVIF events from one or more cameras without any third-party dependencies. It uses only the Python standard library and connects directly to the cameras' ONVIF SOAP endpoints.
Download the pre-built Windows EXE from the Release page.
The app:
- Discovers each camera's ONVIF events service
- Creates a pull-point subscription
- Polls for live event notifications
- Displays incoming events in a filterable table
- Shows the camera IP address for each event row
- Shows raw event XML in a readable detail panel with XML syntax coloring
- Remembers the last-used connection settings between launches
- Supports light and dark viewing modes
- Includes menu actions for importing/exporting all events and exporting a selected event's XML
- Python 3.9 or newer recommended
- Network access to the target ONVIF camera or cameras
- Valid ONVIF username and password
No external Python packages are required.
- onvif_event_viewer.py - main application script
- onvif_event_viewer_settings.json - auto-saved local settings file created after first run/connect
- LICENSE - GPL-3.0 license text
The app starts with built-in defaults:
- IP(s):
192.168.1.184 - Username:
onvif - Password:
onvif
After you change any of those settings, the viewer saves them automatically to onvif_event_viewer_settings.json next to the script and reloads them automatically on the next launch. To connect to multiple cameras, enter IP addresses separated by commas, semicolons, spaces, or new lines.
From the project folder:
python .\onvif_event_viewer.py- Launch the application.
- Enter one or more camera IP addresses, the ONVIF username, and password.
- Click
Connect. - Watch events appear in the top table.
- Select any row to inspect the event details and formatted raw XML in the bottom panel.
- Click
Disconnectto stop polling.
Import All Events...loads a full event list from a JSON exportExport All Events...writes the current event list to a JSON fileExport Selected Event XML...saves the selected event's XML to an.xmlfileExitcloses the application
Hide XML Previewcollapses the bottom raw XML/details paneShow XML Previewrestores the bottom raw XML/details paneLight Modeswitches the viewer to the light themeDark Modeswitches the viewer to the dark theme
Web Helpopens the project page at jsammarco/ONVIF-Event-ViewerAboutshows the author/contact card for Consulting Joe
The top panel shows:
TimeCamera IPKindTopicMessage
Use the filter box to search across:
- event time
- camera IP
- event kind
- topic
- message text
- raw XML/details
Available options:
Regexenables regular expression matchingCase-sensitivemakes plain-text or regex searches case-sensitiveAutoscrollkeeps the latest visible row in viewHide audio metricssuppresses noisy high-frequency Axis audio telemetry topics by default
The bottom panel displays:
- selected event metadata
- formatted raw XML when the payload is valid XML
- XML syntax coloring for tags, attributes, values, comments, and declarations
- raw text fallback for non-XML messages such as status or error entries
For each camera, the viewer uses this sequence:
GetCapabilitiesto discover the Events service endpointGetEventPropertiesto retrieve camera event metadataCreatePullPointSubscriptionto open a subscriptionPullMessagesin a loop to fetch live notificationsUnsubscribeon shutdown when supported by the camera
If a camera does not implement Unsubscribe, the app logs that behavior and lets the subscription expire automatically.
- This is a polling-based pull-point viewer, not a persistent push receiver.
- Some cameras return vendor-specific topics or message layouts.
- The viewer includes a fallback events service URL of
http://<camera-ip>/onvif/events_serviceif discovery does not provide a usable address. - GUI logging, heartbeats, warnings, and errors are shown in the same event table as camera events.
- Confirm each camera supports ONVIF Events and PullPoint subscriptions.
- Verify the IP address list, username, and password.
- Check firewall and network routing between the workstation and each camera.
- Make sure the ONVIF device service is reachable.
- Confirm each camera allows the provided ONVIF credentials.
- Review the detail panel for raw response text and SOAP fault content.
- The app automatically saves connection settings and common UI options as you change them.
- Delete
onvif_event_viewer_settings.jsonif you want to reset the remembered connection values.
- Use
File->Export All Events...to save the current event list to JSON. - Use
File->Import All Events...to load a previously exported event list. - Use
File->Export Selected Event XML...to save just the selected event's XML payload.
- Leave
Hide audio metricsenabled to suppress noisy audio telemetry if applicable. - Use plain-text or regex filters to narrow the event list.
This project is licensed under GPL-3.0. See LICENSE.