I wanted a semi-unattended way to display my cameras and local live streams on a monitor at home. More specifically, I wanted the whole setup to be “armless.”
We have headless computers, so why not armless ones?
The host running RTSPView has a screen, so it certainly isn’t headless. What I didn’t want it to have was any need for “arms”: no reaching for a keyboard or mouse, no closing random windows, no manually restarting streams, and ideally no touching the host computer at all.
The goal was for RTSPView to stay on top, launch immediately after a reboot, recover when something goes wrong, and essentially provide an almost 100% uptime live view with very little user intervention. After the initial setup, everything should be manageable remotely through the LAN dashboard.
Meet RTSPView.
As these projects tend to do, the scope kept growing and growing.
- First, it was simply: “Build a camera wall.”
- Then it became: “Automate it based on camera events from my Scrypted server.”
- Then I wanted local live streams.
- Then weather overlays.
- Then layouts that could automatically change based on sensors and other events.
And it kept growing from there.
RTSPView is designed with Scrypted and Tapo integrations in mind, while still being centered around that original idea: a reliable, always-on RTSP camera wall that can largely take care of itself.
RTSPView turns a Windows display into a configurable wall of live video. View camera feeds, rebroadcast streams, direct HTTP media and supported public website streams; arrange layouts, add picture-in-picture video or weather, and respond to person detections and contact sensors.
The Windows Viewer plays the video. The Controller runs web administration and supervises the Viewer. Both run as the signed-in Windows user. Browser previews are snapshots, not live video. RTSPView is for viewing, not recording or NVR playback.
Download the latest stable release · All releases · Feedback · Buy Me a Coffee
This guide describes 1.0.48, including the complete 1.0.47 baseline and the changes from 1.0.48-beta.2 through Patch 2. Scrypted is optional: compatible sources can be used directly, without MQTT or Home Assistant.
Stable 1.0.48 adds consistent dashboard spacing/cards, visible overlay-deletion guidance, and optional scheduled application patches. Settings → Updates has a dedicated Patches section for checking and installing compatible patches. Automatic installation is off by default; enabling it uses the Live View restart schedule and restarts the whole application when a patch is installed. See the release notes and patch controls and publication.
Both layout editors now preview picture-in-picture overlays, including automation-only overlays and focus preview cameras. Click an overlay to select it, drag or use arrow keys to move it, and remove or restore it for the current layout only. Undo/Redo and the normal layout save/apply controls preserve these changes; shared source, shape and display-mode settings remain available separately.
Install · First setup · Streams and layouts · Automation · Backups and updates · Troubleshooting
| Area | Available functionality |
|---|---|
| Streams | Up to 16 main streams and 16 picture-in-picture streams; RTSP, direct HTTP/HTTPS media, and public websites resolved through bundled Streamlink/yt-dlp. ONVIF discovery and profile selection help find camera RTSP URLs. |
| Layouts | Up to 32 saved standard layouts, separate automation templates, up to 16 tiles per layout on a 12×12 grid, landscape/portrait or custom output proportions, presets, drag/resize, undo/redo, custom track sizing, framing, borders and colors. |
| Picture in picture | Independent or linked stream sources, host-tile placement, shape presets, drawn/SVG masks, opacity, zoom and pan; always-visible or automation-only display. |
| Automation | MQTT person detection, zone filters, temporary fullscreen/focus layouts, and Tapo contact-sensor actions, with shared rule priorities and recent activity. |
| Widgets | Up to 64 independent layout widgets: weather, nearby aircraft, host system stats and date/time; grid or floating placement, responsive content and independent background/content opacity. |
| Weather | Configurable locations, units, fields and alignment; larger readings, small attribution, optional condition backgrounds and animation. |
| Aircraft | Radius/altitude filtering, one or two rotating aircraft, enriched model/owner data, attributed photos, field ordering, optional photo wait and fade transitions. |
| Plugins | Categorized host switches for widgets, streaming, discovery, picture in picture and automation; disabled by default on new installations. |
| Dedicated display | Monitor selection and identification, fullscreen, always-on-top, idle cursor hiding, manual focus, stream recovery and intentional Full exit. |
| Administration | Stream health, snapshots, diagnostics/logs, temperature warnings, backup/import, optional LAN access, application updates, automatic streaming-component updates and scheduled restarts. |
Capacity limits are configuration limits, not a promise that every machine can decode that many high-resolution feeds. Enabled main streams and configured picture-in-picture feeds continue decoding when hidden; resolution, frame rate, codec and source connection limits matter.
This section consolidates the complete beta run, including the final padding-control adjustment.
- The Plugins page groups related capabilities and explains each switch. Weather, Aircraft, System stats, Date & time, Streamlink, yt-dlp, ONVIF, Picture in picture and Automations are all opt-in on new installations. Upgrades preserve existing plugin behavior; the new system and clock plugins start disabled.
- Disabling a plugin stops its runtime work and hides its controls while retaining saved settings. Direct camera streams do not require website resolver plugins. Auto source mode uses only enabled resolvers. MQTT and Tapo rules share the Automations switch.
- System stats displays this Windows host's CPU/GPU utilization, RAM use and available CPU/GPU temperatures, with temperature-unit and heading controls. Missing or stale measurements remain unavailable rather than appearing as zero; temperature availability depends on the host's sensors.
- Date & time adds a live clock with a selected time zone, 12/24-hour display, optional seconds, date and weekday, and long, short or ISO date formats. Time-zone conversion respects daylight saving.
- Weather and aircraft are independent layout content rather than being tied to a camera. Layouts support up to 64 widgets, including system stats and clocks. Removing a camera does not delete independent widgets.
- Add content combines camera and enabled-widget choices. The layout toolbar uses available desktop width; selection, the content inspector, Enter to edit, keyboard movement/resizing, Delete, Undo and Redo support the editing workflow.
- New widgets use grid placement with row/column spans, weighted tracks and orientation changes. Floating placement supports edge/corner resizing, positioning presets and precise placement. Existing floating geometry is preserved during migration.
- Dialogs preview the actual target dimensions over the layout's camera snapshots. Monitor and native Live View follow shared responsive sizing rules. Content uses available width and height, with lower-priority rows omitted before primary readings become unreadable. Platform rendering is not guaranteed to be pixel-identical.
- Background color/opacity and content opacity are independent. Text, images and credits follow content opacity; the background can remain visible or be made fully transparent.
- Settings migration retains existing widgets and creates rollback backups, including
settings.json.before-independent-widgets.jsonandsettings.json.before-responsive-widgets.jsonwhen their respective migrations apply. Use the appropriate older backup when rolling back to an older binary.
- ADSB.lol supplies nearby traffic, filtered by location, radius and optional altitude limits. Persistent widgets and conditional camera replacements support empty/stale/unavailable states; conditional replacements return to the camera when eligible traffic is absent.
- Cards display at most two aircraft. Responsive/photo-emphasis views and two-aircraft boards retain a stable selection during ordinary updates and rotate through nearby traffic every 20 seconds. Departure, expiry and empty-feed handling prevent stale aircraft lingering.
- Callsign/tail identifiers remain readable, two-aircraft columns align at the top, and the optional Nearby aircraft heading can be hidden to reclaim space. Unknown detail rows are omitted. Full model names and registered owners use adsbdb and verified FAA records when available; lookup data can differ from other flight-tracking services.
- Users can reorder aircraft detail fields and toggle optional information. Earlier fields take priority when space is limited. The primary identifier remains fixed, and the aircraft photo control is grouped with information choices but is not reorderable.
- Photo lookup uses Planespotters, Airport-Data and attributed Wikimedia Commons fallbacks, including representative model/family images where available. Representative photos are labelled; a different livery may appear. Coverage is provider-dependent and is not guaranteed for every aircraft.
- Native image requests follow validated provider redirects, identify the application and retry failures after a cooldown. Diagnostic logs trace photo lookup/download/decode outcomes. Loaded photos use available space, preserve aspect ratio and have rounded corners; missing or failed images do not reserve an empty image box.
- Two-aircraft cards allocate remaining height to photos, keep both columns aligned and place small photo/source credits at the bottom. Photo and ADS-B attribution remain visible when their associated content fits.
- Wait for aircraft photo optionally holds an aircraft until its image is ready. A configurable 1–60 second timeout (10 seconds by default) or a failed download permits a text-only card; a later image does not pop into that encounter after fallback.
- Fade transitions cover appearance, disappearance, one/two-plane changes, rotation between pairs and arriving photos. Old content fades out before new content fades in. Routine reading updates do not restart the transition. Entrance and exit durations are independent, 0–5,000 ms; zero is instant. Try 800 ms each for gentler transitions.
- Temperature and supporting readings grow with the card while source attribution stays small. Wide cards can distribute information across two columns; smaller cards prioritize temperature, high/low and condition. Left, center and right text alignment work in preview and Live View.
- Optional backgrounds cover all 29 documented API condition codes: clear/partly cloudy/overcast, fog/rime fog, drizzle/rain/showers, freezing precipitation, snow/snow grains/snow showers, thunderstorms and hail. Related codes share effects while retaining their exact condition labels. Unknown or unavailable conditions use a plain fallback.
- Weather background and Animate weather background are separate switches. Clear scenes distinguish day/night. Background opacity controls the effect independently of content opacity, and animation can be disabled for a quiet display.
- Content padding is under Advanced appearance. It controls minimum edge spacing and can reach zero, with responsive limits for small cards. Content remains vertically centered: reducing padding does not resize the card or necessarily remove the space above/below the text. Reduce card height to remove that extra vertical space.
- Refreshing administration restores the selected section and subtab instead of always returning to Monitor. Unsaved drafts still require saving before a reload.
- Windows startup can be inspected, enabled, disabled or repaired through Settings → Display → Windows startup. The installer and web setting use the same helper for the intended interactive Windows account, a 20-second sign-in delay and battery operation. A new sign-in resumes Live View despite an earlier intentional stop; watchdog recovery within the same session still respects that stop. This does not configure automatic Windows login.
- Regression coverage includes plugin gating, migration/persistence, native/browser sizing and weather-code parity, aircraft metadata and photo fallbacks, fade timing/cancellation, real native overlays, and synthetic streaming playback. Browser fixtures exercise responsive sizes, editing and photo/transition states. These checks do not guarantee third-party feed or hardware sensor availability.
- Windows 10/11 x64 with an interactive desktop and a current graphics driver.
- Network access from the Windows host to your sources. A modern browser is needed for web administration.
- Administrator approval for installation. Run the Viewer and Controller under the same ordinary Windows account afterward.
- The installer bundles the .NET runtime, LibVLC and integration helpers; end users do not need a separate .NET SDK, VLC, Python or Node.js installation.
The desktop application has no Docker deployment or native Android client in this repository. A phone or Android browser can administer the Windows host after LAN access is enabled; it does not replace the Windows Viewer.
-
Download the Windows installer and matching
.sha256.txtasset from the release page. For 1.0.47 they areRTSPView-Setup-1.0.47-win-x64.exeandRTSPView-Setup-1.0.47-win-x64.sha256.txt. -
In PowerShell, from the download directory, compute the installer hash and compare it with the checksum file:
Get-FileHash -LiteralPath .\RTSPView-Setup-1.0.47-win-x64.exe -Algorithm SHA256 Get-Content -LiteralPath .\RTSPView-Setup-1.0.47-win-x64.sha256.txt
-
Run the installer and approve Windows elevation. The default installation directory is
%ProgramFiles%\RTSPView; upgrades reuse the existing installation directory. -
Leave Start and supervise RTSPView when this user signs in selected if this is a dedicated wall. Startup requires a Windows sign-in; installation does not configure automatic Windows login.
-
Launch RTSPView from the installer or Start menu.
Complete initial setup on the Windows host before connecting from another device.
- Open
http://127.0.0.1:5080or the Web configuration shortcut. - Sign in with the initial password
admin. The form asks only for a password. - On the required password-change screen, enter
adminas Current password and choose a replacement. It must be nonblank, at most 1024 characters, different from the current password and notadmin. Use a strong password even though no minimum length is enforced. - Sign in again with the new password. Other administration remains blocked until setup succeeds. Existing installations use their existing password; legacy security state can require a password change.
- Open Streams, edit a slot, enter a name and Source URL, enable it, then Save & apply. Fresh installations have no source URLs. Obtain a URL from your camera/server or use Find ONVIF stream.
- Open Layouts → Standard View layouts, choose a preset, assign your stream to a tile, then Apply to wall. Watch the Windows Viewer to confirm playback.
The Viewer starts fullscreen and always-on-top by default. If it covers your browser, click the upper-right corner five times within three seconds and confirm the fullscreen exit. To keep other windows accessible, also clear Keep viewer always on top under Settings → Display and select Apply changes.
- Finish setup locally, then open Settings → Network & security → LAN access.
- Enable LAN access and save. Approve the Windows prompt on the host. Its trusted network connection must be marked Private in Windows.
- Open one of the displayed
http://HOST-IP:5080addresses from a device on the same subnet. ReplaceHOST-IPwith the address shown by RTSPView; a phone'slocalhostrefers to the phone.
The built-in mode uses HTTP on TCP 5080, with a Private/LocalSubnet firewall rule and application subnet checks. HTTP is unencrypted: use a trusted private LAN and do not expose the panel to the Internet. The switch updates the web listener without restarting video; a brief browser disconnect is normal. Disabling it restores local-only access without another elevation prompt; the firewall rule remains dormant until reused or uninstalled.
Custom ASPNETCORE_URLS or Kestrel endpoints disable this switch. For certificate and binding configuration, see advanced HTTPS administration; HTTPS/5081 is not an installed default.
RTSP/media ports belong to the source server. MQTT uses the configured broker port (default 1883), and ONVIF discovery uses local IPv4 multicast UDP 3702. Weather, release checks and website streams need outbound Internet access. You do not need to open these as inbound administration ports.
All screenshots in this guide use synthetic camera images and demo data. Names, addresses, locations and status readings are examples; no personal streams or settings are shown. Browse all admin previews.
The current interface has a collapsible sidebar with these destinations; disabled plugins hide their associated controls:
| Destination | Main tasks |
|---|---|
| Monitor | Inspect active-wall or all-stream snapshot views, select a saved layout, refresh previews and inspect stream health. |
| Streams | Search, add, edit, test, restart or delete sources; discover ONVIF profiles. |
| Layouts | Edit standard layouts or automation templates, tile framing, canvas appearance and weather. |
| Picture in picture | Configure overlay sources, hosts, visibility and appearance. |
| Automation | Configure MQTT, Tapo and Automation Priority. |
| Plugins | Enable or disable categorized host capabilities; also accessible from Settings. |
| Settings | Display and snapshots; Network & security; Updates; Backups; Maintenance; Diagnostics; About. |
Save scope matters: stream and picture-in-picture Save & apply affect that source wherever used. Independent widgets belong to their layout. MQTT and Tapo save their own integration settings and rules. Save layout saves inactive drafts without switching the wall; changes to the active standard layout require Apply to wall. Save automation layouts saves templates without selecting a standard wall. A widget's Use in layout draft does not persist the layout by itself.
In-app navigation retains unsaved drafts. Refresh restores the selected section and subtab, but closing or reloading the browser discards unsaved drafts without a browser warning. Concurrent edits can be rejected as stale; reload the affected editor before retrying.
| Source type | Behavior |
|---|---|
| Auto | Plays RTSP and recognized direct-media extensions directly; tries Streamlink, then yt-dlp for other HTTP(S) URLs. |
| Direct stream | Sends the URL to LibVLC. Use this for an extensionless direct-media endpoint. |
| Streamlink / yt-dlp | Uses only the selected website resolver. |
Website quality limit defaults to 720p and applies to resolved website renditions, not direct-stream transcoding. Supported media depends on LibVLC and the source. Website playback targets public, non-DRM, combined audio/video formats; login-cookie import, per-site authentication and separate-track FFmpeg muxing are not provided. Website restrictions and bot checks can prevent playback, including YouTube sources. Automatic helper updates do not guarantee site compatibility. Finite videos use the existing recovery behavior when they end.
Test stream checks website resolution and incoming media bytes; for direct sources it validates URL syntax only. A successful test is not proof of decoding. Use Save & apply and inspect the Viewer.
For ONVIF, select Find ONVIF stream → Find cameras on host network, or enter the camera's device-service address manually. Enter its ONVIF credentials, load profiles, choose a profile and use the selected stream, then save. Discovery runs from the Windows host and may not cross VLANs/subnets. This provides stream setup, not PTZ, ONVIF events or recording search. See the ONVIF guide; physical camera/firmware validation is still pending.
Use presets or build a layout by moving, swapping and resizing tiles. Canvas settings controls output proportions, borderless mode, border/background colors and inheritance from the global border setting. Custom output dimensions range from 240 to 16384 pixels per axis; they define canvas proportions/framing, not the Windows display mode.
Select a tile for Original, Fit, Fill or Stretch, zoom and pan. Fit preserves the whole frame; Fill can crop; Stretch can distort. Sizing → Fit tiles to streams uses available snapshot proportions, and row/column weights allow manual refinement. Apply the layout to display it. The active standard layout cannot be deleted; templates referenced by automation rules must be unlinked first.
Configured overlay sources can also occupy ordinary tiles using their original video frame, independently of the floating overlay's mask and opacity. These original-source views share the overlay's decoded frames rather than opening another decoder just for the original-source tile. A picture-in-picture overlay linked to a main stream still has its own playback connection.
Deleting a stream clears its connection and layout placements without renumbering other streams. Remove reported automation or overlay dependencies first. Added streams reuse deleted slots.
Open Picture in picture, choose an overlay or add one, then select Connection → Video source: an existing main stream or Own source URL. Under Position → Show over, choose its host camera. Set Always visible or Automation only, adjust the preview, then Save & apply.
- Viewport width/height: 10–95% of the host tile; position: 0–100% of available space.
- Shape: Rectangle, Square, Rounded rectangle, Circle, Oval or Custom shape / SVG.
- Opacity: 20–100%; video zoom: 100–300%, with independent pan.
- SVG masks: path geometry with a valid viewBox, maximum 256 KB. Convert text/shapes to paths and flatten transforms before importing. The editor also supports drawing and mask rotation.
Size and position the viewport first, then frame the video inside it. Standard shapes retain their proportions; custom masks and video follow the host tile's framing and remain clipped to it. The host must be visible. Overlays hide when the Viewer is minimized or hidden. The default Doorbell and Garage names do not create sensor triggers.
Defaults are TCP, 1000 ms cache, 20-second startup timeout, 12-second stall timeout and 30-second maximum reconnect backoff. Low-latency tuning and audio decoding default off; hardware decoding is requested for main streams. Picture-in-picture composition uses software-decoded frames and can be CPU intensive.
For unstable RTSP sources, start with TCP and increase cache. Composite stream compatibility forces TCP, a 3000 ms cache and low latency off. Prefer lower-resolution substreams when the machine or camera cannot sustain a large wall. Disable unused main streams to stop background playback; configured automation-only overlays stay connected so they can appear promptly.
Settings → Display controls fullscreen startup, always-on-top, cursor hiding, names/borders and monitor selection. Identify displays shows temporary labels on the connected displays. Selection is saved by Windows display name, with the older zero-based index as fallback if the display is unavailable. Recheck placement after changing monitors.
Fullscreen and always-on-top are independent. Exiting fullscreen does not disable always-on-top. The five-click escape gesture uses the upper-right 64×64-pixel area; it is a convenience, not a secure kiosk lock.
Full exit in the windowed Viewer closes it and pauses automatic recovery while the Controller stays online. The pause survives Controller restarts and is respected by scheduled Viewer restarts. Use the RTSPView shortcut or Settings → Maintenance → Start viewer to resume. An optional top-right hover Full exit button is disabled by default. To stop both processes and the installed supervision task, run Stop RTSPView as administrator.
Use Diagnostics in the windowed Viewer to inspect feed statistics and restart a selected stream. In fullscreen, eligible stream errors open the shared diagnostics panel automatically; it closes when those issues clear. Settings → Display → Diagnostics automatic opening can exclude particular feeds without hiding their warnings from manual diagnostics.
Browser previews refresh while visible, approximately every 15 seconds, with captures serialized across feeds. A stale thumbnail is not the same as a failed stream. Settings → Display → Snapshot refresh optionally schedules captures with the browser closed (0.1–168 hours; disabled by default). The Viewer must be running.
Settings → Maintenance provides immediate Viewer/application controls and separate Viewer/Windows host restart schedules, both off by default. Schedules use the host's time zone; host restarts have a cancellable 60-second countdown. The Controller must remain running, and Windows sign-in/startup remains necessary after a reboot.
In Automation → MQTT, configure a reachable broker, credentials and TCP/TLS transport, then add rules with exact source topics. MQTT is disabled until enabled and saved. Scrypted can supply ObjectDetector events; Home Assistant is not required.
Rules can Show overlay, Fullscreen camera or use an Automation layout. Choose target streams, sources, optional case-sensitive detection zones and a clear delay. Saved custom automation layouts have one or two unassigned Focus tiles filled by the rule. The default Automatic arrangement includes enabled main streams; custom templates use their saved tiles.
Discovery and connection tests do not save settings or prove that live detections work. Save, test the rule, then verify a real detection. Retained, stale and duplicate MQTT events are rejected; keep host/source clocks synchronized. Manual focus takes priority, and temporary automation restores normal presentation when it expires.
See MQTT setup and behavior for discovery, timings, focus/takeover and credentials. The optional Scrypted connector can pair and sync streams/topics; it remains a beta component with live Scrypted validation pending.
Automation → Tapo reads T110 contact sensors through H100/H200 hubs using the bundled reader. Discover or manually add hubs, enter the Tapo account, test/discover sensors, then configure Open/Closed and Unavailable actions. It requires neither MQTT nor Scrypted. Polling defaults to five seconds; brief changes between polls can be missed. Physical hub/sensor validation remains pending and firmware compatibility varies.
Rules can show/hide an overlay or temporarily activate standard/automation layouts. Automation Priority orders saved MQTT and Tapo rules together; priority 1 is highest. Wall-view conflicts and conflicts for the same overlay are resolved separately. Save integration drafts before saving priority order. See the Tapo guide for actions and unavailable-state handling.
Enable Weather in Plugins, then use Layouts → Add content → Weather. Choose a city or coordinates, units, fields, preset, alignment, optional condition backgrounds and placement. Advanced appearance contains color, opacity and content-padding controls. The widget remains part of its layout draft until saved/applied.
Layouts support multiple independent widgets and up to 32 distinct weather locations across saved layouts/widgets. Weather is disabled and unconfigured on new installations. It uses cached Open-Meteo readings without another video player. It does not provide official severe-weather alerts; small cards omit details that do not fit.
The Controller sends location searches and configured coordinates to Open-Meteo. The implementation uses its free non-commercial endpoint and has no paid-endpoint/API-key setting. Review Open-Meteo's terms and privacy before deployment; a subscription alone does not change RTSPView's endpoint.
Settings → Diagnostics shows supported CPU/GPU temperatures and optional wall warnings. Warnings default off; initial CPU/GPU limits are 90 °C/85 °C, not manufacturer recommendations. Missing sensors remain Unavailable; RTSPView does not shut down or restart the host based on temperature.
CPU readings may require PawnIO. The Enable maintenance helper action installs an optional privileged service after host approval. It can install verified PawnIO and supported RTSPView updates without repeated elevation prompts; normal playback does not require it. Sensor support still depends on the hardware/driver.
Fresh installations store settings.json under %LOCALAPPDATA%\RTSPView. The legacy settings path is %LOCALAPPDATA%\SpotMonitor\settings.json; if that file or a sibling web-security.json exists, its directory takes precedence. These paths belong to the Windows account running RTSPView.
| Variable | Behavior when set |
|---|---|
RTSPVIEW_DATA_DIR |
Overrides the data directory for both Controller and Viewer. Use the same private absolute path for both. |
SPOTMONITOR_DATA_DIR |
Compatibility fallback when RTSPVIEW_DATA_DIR is unset. |
RTSPVIEW_GITHUB_REPOSITORY |
Overrides the application release repository; default GalacticaActual75/RTSPView. It does not redirect the separately signed streaming-component feed. |
ASPNETCORE_URLS |
Overrides web bindings and disables the built-in LAN switch, even when set to the normal loopback URL. Default without an override is http://127.0.0.1:5080. |
AllowedHosts |
Host allowlist for custom bindings; default localhost;127.0.0.1;[::1]. Managed LAN mode maintains its own allowlist. |
ASPNETCORE_ENVIRONMENT |
ASP.NET Core environment; normal deployments use the default Production. |
No environment variables are required. .env.example is a reference, not a file the application loads. Restart the processes after changing their environment; scheduled startup may require signing out and back in.
The data directory also contains automation.json, tapo.json, lan-access.json, web-security.json, data-protection, logs, thumbnails, backups and update state. Temperature preferences and restart schedules are host-local files. Some executables/task identifiers intentionally retain legacy names for upgrade compatibility.
Settings → Backups exports stream/display/layout/weather settings and MQTT/Tapo rules and connection settings. It removes URL user information, query strings and fragments, and omits automation passwords. It can still contain sensitive names, hosts, paths and locations. Query-dependent website URLs may need to be entered again after import.
Import validates the configuration and saves a local backup before replacement. Compatible existing automation passwords can be retained; integrations requiring missing passwords stay disabled until credentials are supplied. Older imports without automation sections preserve current automations. Native Viewer export/import includes streams, display preferences, layouts, picture-in-picture, weather and snapshot schedules, but excludes the separate MQTT/Tapo bundle. Web exports are not a complete host backup: they omit security keys, LAN state, temperature preferences and restart schedules.
For a private full backup, stop the Controller and Viewer and copy the entire data directory. Stream credentials are plaintext in local settings; protect all copies. Windows-protected automation credentials and keys are tied to the owning identity, so moving files is not a portable credential migration.
Use Settings → Updates to choose Stable/Beta, check and confirm installation. Changing channel does not install anything; Beta hosts stay on Beta until switched. Stable uses GitHub's latest stable release; Beta selects versioned beta releases and excludes drafts and streaming-component releases. Application checks run approximately daily, but application installation requires confirmation.
Installers are downloaded over HTTPS and verified against release checksums. Installation requires host approval unless the optional maintenance helper and target installer support service updates. Manual installation over the existing version also preserves settings. Back up before upgrading or downgrading; restore a compatible pre-upgrade backup when rolling back. The first weather-schema migration preserves settings.json.before-weather.json when applicable.
Automatic streaming components is separate: signed Streamlink/yt-dlp packages are checked and installed in the background daily without an installer, elevation or Viewer restart. Existing streams keep their relays; new/retrying website streams use the updated helper. Packages live under the data directory's Streaming folder, with fallback to a previous/bundled helper after startup health-check failure. See streaming-component updates.
| Problem | What to check |
|---|---|
| Cannot open administration | Start Controller and try http://127.0.0.1:5080 on the host. Check port conflicts and custom bindings. For LAN access, check the Private network profile, subnet and guest Wi-Fi isolation. |
| Blank or missing stream | Check the URL, credentials, enabled state and active-layout assignment. Confirm source reachability from Windows. Direct-source Test stream does not check playback. |
| ONVIF finds nothing | Enable ONVIF on the camera, check its account, or enter its device-service address manually; multicast often stays within one subnet. |
| Website fails to play | Inspect source status, try the appropriate source type/quality and check streaming-component status. Site authentication, DRM and bot restrictions may be unsupported. |
| High CPU or stalls | Use substreams, disable unused main streams and reduce picture-in-picture load. Check source connection limits; try more cache for unstable RTSP feeds. |
| Automation connected but no action | Check saved/enabled rules, exact topics/zones, real event timestamps, target URL, host-tile visibility, Viewer connection and competing priorities/manual focus. Test the rule separately from the real event. |
| Viewer stays closed or returns after closing | Use Start viewer after intentional Full exit. Otherwise supervision may restart a closed Viewer; Stop RTSPView stops the installed processes/task. |
| Old thumbnail | Refresh the snapshot and inspect its timestamp separately from live stream status. Captures need a running Viewer. |
| Updates unavailable | Check Internet access, GitHub rate limits and release assets/checksums. Use the matching manual installer if necessary. |
| Storage or settings errors | Preserve the data directory, check free space/permissions and inspect the primary/backup state. Logs can drop entries during storage failures and are not a guaranteed audit trail. |
Forgotten administrator password: stop both processes and privately back up the data directory. As the owning Windows user, move only web-security.json out of the active directory, then restart and complete local setup with admin. Keep data-protection intact: deleting it can make saved MQTT/Tapo passwords unreadable. Existing camera settings remain; pair the Scrypted connector again. Login throttling allows five attempts per five-minute window; wait for the window to expire if necessary.
- Keep administration local or on a trusted private LAN; configure HTTPS when encryption is needed. Do not port-forward the panel.
- Use a dedicated Windows account and restrict its data directory and backups. Administrator passwords are hashed; camera URLs remain readable locally. Windows data protection protects integration passwords and cookie keys, not all configuration.
- Review screenshots, logs, MQTT payloads and exports before sharing. Camera images, coordinates, hostnames, paths and names can be sensitive even after passwords are removed. Rebroadcast URL paths can themselves grant access.
- Updates trust the project's release publisher; matching checksums alone do not establish an independent publisher identity. Streaming components additionally use an embedded signing key.
- Weather and website playback contact external services. The Scrypted connector exchanges credentials/configuration; use a trusted network or configured HTTPS for pairing and sync.
See privacy guidance. Do not attach raw configuration exports to public issues.
The complete 1.0.47 changes above consolidate the beta series. Earlier beta notes and design reviews describe intermediate implementations; use this guide for current behavior. See Live View startup settings and repair for startup details.
Build from the tag corresponding to the version you intend to run. Release tags and the default branch can differ. Use Windows x64, the .NET 8 SDK selected by global.json, Node.js 22 and PowerShell 7 for the check runner. Native rendering checks need an interactive Windows desktop.
git clone https://github.com/GalacticaActual75/RTSPView.git
Set-Location RTSPView
git switch --detach v1.0.47
dotnet restore RTSPView.sln -r win-x64
dotnet build RTSPView.sln -c Release --no-restore
dotnet run --project tests/RTSPView.ConfigurationChecks -c Release
node tests/modern-admin.checks.cjsRun pwsh -File tools/checks.ps1 for the repository's broader checks. These include console executables, Node and PowerShell scripts; dotnet test alone does not execute them all. Tests use isolated fixtures where provided; physical-device validation is separate.
Complete packages also require Python 3.12 to build the bundled Tapo reader and website resolver, plus Inno Setup 6 for the installer. A plain solution build does not create those frozen helpers. Follow the release workflow for packaging and synthetic playback checks. The helpers' early beta notes about installer-only updates are superseded by automatic component updates.
For maintainers, tools/publish-release.ps1 -Version <version> creates and pushes a release tag from a clean checkout, triggering publication. Use it only when intending to publish a reviewed release.
For contributions, open an issue describing the problem or proposal, keep changes focused and include relevant checks and documentation. Use synthetic sources in tests and screenshots. Review licensing status before reusing or redistributing project code.
Report a bug or suggest an improvement, or browse existing issues. Include the version, expected/actual behavior and reproduction steps, with sensitive details removed. The web sidebar also has Send Feedback and Buy Me a Coffee.
If you would like to support development, Buy Me a Coffee.
RTSPView's project-owned source currently has no open-source license grant. The public repository and third-party licenses do not provide a project-wide license. See licensing status and third-party notices; the Tapo reader and other bundled dependencies retain their own licenses.








