WinChannels is a native Windows desktop client for Channels DVR.
WinChannels is a desktop companion app for everyday Channels DVR viewing, not a living-room HTPC frontend.
Its intent is to provide an easier-to-use alternative to the Channels administrative web interface for non-technical users.
- This project is not designed as a remote-control-first, 10-foot TV interface.
- This project is not trying to replace dedicated HTPC/living-room player experiences.
- This project prioritizes simple desktop workflows (mouse/keyboard, clear settings, and caption handling).
- Download the latest installer from the Releases page:
- MSI — recommended for most users
- EXE — NSIS installer, useful if MSI is blocked by policy
- Run the installer and launch WinChannels from the Start menu.
- Open Settings and enter your Channels DVR server URL (e.g.
http://192.168.x.x:8089). - Optionally set the Storage Share Path to enable SRT sidecar captions.
It gives you a simple TV-style experience for browsing and watching your DVR content, with support for:
- Recent recordings
- TV shows and episodes
- Movies
- Library groups and videos
- Channel logos
- Captions (broadcast and sidecar
.srt)
WinChannels connects to your Channels DVR server API and streams recordings via HLS.
Key behavior:
- Reads media lists from your DVR server (
/api/v1/...) - Streams recordings from DVR file endpoints (
/dvr/files/...) - Displays channel logos where available
- Supports both embedded/broadcast captions and sidecar SRT captions
- Automatically loads
.srtsidecar files placed alongside recordings (e.g. generated by py-captions-for-channels) - Allows switching caption mode in the player (Off, Broadcast, SRT)
- Windows 10/11
- A reachable Channels DVR server on your network
- DVR server URL (for example
http://192.168.3.150:8089) - Optional but recommended for SRT sidecar captions: access to the DVR storage path as a Windows share
If you want SRT sidecar captions to work for all clients/users, the Channels DVR root recording folder must be shared and readable by everyone who will run WinChannels.
Why this matters:
- WinChannels can stream video from DVR HTTP endpoints, but sidecar
.srtloading requires filesystem access to the recording path. - The app maps recording paths to your configured Windows UNC share path.
Example share path:
\\192.168.3.150\AllMedia\Channels
Recommendations:
- Share the Channels root folder (or the exact DVR recording root) from the storage host.
- Grant read permissions to all users/machines that will use WinChannels.
- Verify each user can browse the UNC path in Windows Explorer.
Install the generated Windows bundle:
- MSI:
src-tauri/target/release/bundle/msi/WinChannels_<version>_x64_en-US.msi - NSIS EXE:
src-tauri/target/release/bundle/nsis/WinChannels_<version>_x64-setup.exe
- Install prerequisites:
- Node.js 20+
- Rust toolchain (stable)
- Visual Studio C++ Build Tools (for Tauri on Windows)
- Clone repo and install dependencies:
npm install- Start in development mode:
npm run tauri dev- Build production bundles:
npm run tauri buildOpen Settings in the app and configure the following.
- Field:
Channels DVR Server URL - Format:
http://<server-ip>:8089 - Example:
http://192.168.3.150:8089
Use the Test Connection button to confirm the app can reach your DVR and read shows/movies/episodes.
- Field:
Storage Share Path - Purpose: locate
.srtfiles next to recordings - Use a UNC path to your DVR storage root
- Example:
\\192.168.3.150\AllMedia\Channels
Notes:
- Leave this blank to disable SRT sidecar loading.
- Broadcast captions can still work without a share path.
- The path is stored locally per user in app local storage.
The player exposes caption modes based on track availability:
- Off
- Broadcast (from stream text tracks)
- SRT (from sidecar subtitle file)
If both are available, you can switch between them from the player controls.
- Verify
Storage Share Pathpoints to the correct DVR root share - Confirm the
.srtfile exists next to the recording on disk - Confirm current Windows user can read the share path
- Verify DVR server URL includes port (usually
8089) - Confirm server is reachable from the client machine
- Confirm firewall rules allow access
- Tauri 2
- React 19 + TypeScript + Vite
- Zustand for app state
- HLS.js for playback
- Tauri HTTP plugin for API requests