dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
翻译准备中
Windows app for UniFi Protect live view: freely placed camera windows or grid windows, across several consoles. No RTSP, local login, 360° fisheye dewarp, layouts with Protect liveview import, camera previews, signed in-place updates.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗UniFi Protect live view, one camera per window. Place each window anywhere on the screen, at any size, next to whatever else you run (exacqVision, etc.). Positions are remembered. Connects to several consoles at once (e.g. Building and Garage).
⬇ Download for Windows (installer, 64-bit Windows 10 or 11) · Portable zip · All releases · Website
Demo mode: test patterns and a synthetic 360° image stand in for camera video.
Installer (recommended): download ProtectPanes-Setup.exe from the latest release and run it.
%LOCALAPPDATA%\Programs\protect-panes.Portable: download ProtectPanes-win32-x64.zip instead and unzip it somewhere permanent in your own profile, e.g. %LOCALAPPDATA%\Programs\Protect Panes (next to where Setup.exe installs). Avoid C:\Program Files, which in-place updates can't write to, and folders made at the root of C:\ such as C:\Tools: Windows lets every account on the PC change those, so another user could swap the app for something that runs as you. Then run ProtectPanes.exe.
Either way, you can turn on Start with Windows in the app.
On each UniFi OS console (UDM / UNVR / Cloud Key), create a local account for this app:
Then, in Protect Panes, click Add console. Enter a name ("Building"), the console's IP address, and the local username and password. Repeat for the second console ("Garage").
A fisheye camera opens in quad view: four virtual pan/tilt/zoom views of the one stream, laid out like an Axis quad view. Protect tells the app which cameras are fisheye and how they're mounted (ceiling / wall / desk). The image circle is found automatically from the picture.
Dewarping is done by the graphics chip on the one stream that's already being decoded, so a 360° camera costs no extra bandwidth. Ordinary Intel integrated graphics (e.g. a Dell OptiPlex) handle it easily. If a PC has no working graphics driver, the app falls back to drawing on the CPU at reduced resolution and shows a one-time notice.
%APPDATA%\Protect Panes\
config.json: consoles, window positions and settings. Passwords are encrypted with Windows DPAPI, tied to your Windows user account.protect-panes.log: connection log, useful when something won't connect.| What you see | Fix |
|---|---|
| "Login rejected" | Use a local-only account, not a UI.com login. Re-enter the password with Edit. |
| "Can't reach console" | Check the IP. The app retries on its own every 5-60 s. |
| "Camera offline" | The camera is disconnected in Protect. The window recovers when it's back. |
| "Presented a different security certificate" | The app remembers each console's certificate from the first time it connects, and stops if a different one shows up. After a UniFi OS reset, update or a replaced console that's expected: click Trust the new certificate… on the console's card. If nothing like that happened, check what's answering at that address first. |
| "No password saved for this console on this PC" | The console came from Import settings…, which carries no passwords. Enter it with ⋯ → Edit console…. |
| H.265 message | This PC can't decode HEVC. In Protect, set that camera to Standard (H.264) encoding. |
| Picture behind / choppy | Right-click → pick Medium or Low. High (4K) streams cost the most GPU. |
| Shadows look crushed / washed out | Many UniFi cameras send full-range video without saying so; the app corrects this automatically. If one camera still looks wrong, try Right-click → Color range → Full or Limited. |
Installed copies (from ProtectPanes-Setup.exe, 1.3.0 on) and portable copies from 1.3.1 on can update themselves.
\\server\share\Protect Panes) or web address holding ProtectPanes-win32-x64.zip plus latest.json. Clear it to turn update checks off.From 1.4.0 on, most updates are small. When a release uses the same Electron as the copy you're running, only the app's own file changes, so the download is a couple of MB instead of 120-160 MB. Releases that move to a new Electron still come as the full installer or zip. One side effect on installed copies: Settings → Apps keeps showing the version the installer last wrote until the next full update. The app's own About section always shows the real version.
The folder the app lives in has to be one you can write to and other accounts can't, e.g. %LOCALAPPDATA%\Programs\Protect Panes, not C:\Program Files or a folder at the root of C:\. When an update location is set, the app also checks once at startup (one small request for latest.json) and says so in the list and the tray menu. It never downloads without a click.
Portable copies older than 1.3.1 can't update themselves. 1.2.0 and 1.3.0 download the update, then fail with a file in it is still in use and reopen the old version. Install once by hand: quit the app (tray → Quit) and run ProtectPanes-Setup.exe (your settings carry over), or replace the folder with the latest zip.
Protect Panes talks to Protect through the unifi-protect library, the same one homebridge-unifi-protect uses. It tracks Protect firmware changes. If a future Protect update breaks login or video, rebuild with the latest library (needs Node.js 22.20+):
npm install
npm install unifi-protect@latest
npm run build:win
The new build lands in dist\. Your settings in %APPDATA% carry over.
npm install
npm start # run from source (quit the installed app first)
npm run mock # fake consoles with test patterns
npm test # regression tests: mock cameras + fake UniFi OS consoles (~6 min)
npm run build:win # portable Windows build + zip in dist\
The tests run the real app. Its windows stay invisible and click-through, and never take the focus, so you can keep working while they run. Set PANES_TEST_SHOW=1 to watch them.
See CLAUDE.md for architecture, gotchas and the test harness, and ROADMAP.md for what's been asked for and how each item was investigated.
MIT. See LICENSE.
config.json as config.json.before-import.