A Samsung smart TV remote control for Windows and iPhone, built with Electron and served as a PWA.
- Windows app — frameless, transparent overlay; sits in the corner of your screen. Draggable, always on top optional.
- iPhone / browser — a dedicated full-screen mobile UI served over HTTP from the desktop app; add it to your home screen as a PWA.
- WebSocket remote control (Samsung Tizen API, port 8002)
- Auto-discovery of Samsung TVs on the local network via SSDP (
ssdp:all, SERVER-header filtered) - App launcher backed by a database of 4 320 apps across 18 regions
- Region auto-detection from the TV's country code; manual override in settings
- Searchable app catalog: type to filter or browse all region apps; icons from curated catalog where available
- Pinned apps row for quick launch (first 3 apps)
- Desktop: slide-out app drawer with drag-to-reorder; app manager dialog with sync, reset to defaults, per-app ID override
- Mobile: full-screen app modal with edit mode (reorder, remove, add from catalog or full Samsung DB), reset to defaults
- YouTube deep-link: shift-click (desktop) or tap (mobile) the YouTube button to play a specific video by URL or ID
- Numpad panel (toggleable)
- Media-key shortcuts (play/pause, volume, mute) registered as global shortcuts
- Volume, channel, navigation, colour buttons, source, guide, captions, info, exit
- Windows 10/11 x64
- A Samsung Tizen TV (2016+) on the same local network
- The TV must have Network → Expert Settings → IP Remote (or similar) enabled
- First connection: accept the pairing prompt on the TV
Download the latest release from the Releases page:
| File | What it is |
|---|---|
TV Remote Setup x.x.x.exe |
NSIS installer — installs per-user, creates Start Menu + desktop shortcuts |
TV Remote x.x.x.exe |
Portable — runs directly, no install needed |
The TV uses a self-signed HTTPS certificate. The app bypasses certificate verification automatically, but the underlying Electron session needs to trust the TV at least once. If the status dot stays red after setting the IP:
- Right-click the remote → Accept TV Certificate
- A browser tab opens to
https://<tv-ip>:8002— click through the cert warning - Close the tab; reconnect (right-click → Reconnect)
While the desktop app is running, open http://<your-pc-ip>:3000 on any device on the
same network. The mobile UI is a dedicated full-screen interface optimised for touch.
On iPhone, use Safari → Share → Add to Home Screen for a full-screen PWA.
The desktop acts as a proxy for both the WebSocket connection and TV REST API calls, so mobile browsers never need to trust the TV's self-signed certificate directly.
git clone https://github.com/kiforsbe/tvremote.git
cd tvremote
npm install
npm start # run in development
npm run dist # build installer + portable into dist/npm test # unit tests (Jest)
npm run test:blackbox # blackbox server tests
npm run test:e2e # Playwright e2e (requires npm start in another terminal)Icons are generated from build/source.png via Jimp:
npm run iconsSamsung Tizen TVs expose a WebSocket endpoint at wss://<ip>:8002/api/v2/channels/samsung.remote.control.
The app connects, authenticates (the TV shows a pairing prompt the first time), stores the token, and sends
JSON-encoded remote-key commands.
Mobile browsers cannot connect to the TV directly (self-signed cert, no CORS). The desktop app proxies the
WebSocket at ws://<pc>:3000/tv and relays app-launch REST calls at POST /api/launch.
On opening settings, the app sends an SSDP M-SEARCH * HTTP/1.1 with ST: ssdp:all and listens for
responses whose SERVER header contains Samsung. Discovered IPs are resolved to friendly names by
fetching the UPnP device description from the LOCATION URL.
catalog.js defines a curated set of ~50 apps with icons, regional availability, and verified app IDs.
samsung-apps-db.json contains the full Samsung Store database (4 320 apps, 18 regions) used for
search and discovery. The app manager lets you search, add, remove, and reorder apps; it also probes
the TV directly (POST /api/v2/applications/<id>) to confirm which apps are actually installed.
main.js Electron main process: window, IPC, HTTP server, TV proxy, discovery
preload.js Context bridge for main window
dialog-preload.js Context bridge for IP-settings dialog
app-manager-preload.js Context bridge for app manager dialog
ip-dialog.html TV IP / discovery dialog
app/
index.html Desktop remote UI (also served as PWA fallback)
remote.js Desktop remote UI logic
mobile.html Mobile / iPhone remote UI (served at http://<pc>:3000/)
mobile.js Mobile UI logic
app-manager.html App manager dialog (desktop)
catalog.js Curated app catalog (~50 apps with icons and region data)
samsung-apps-db.json Full Samsung app database (4 320 apps, 18 regions)
scripts/
generate-icons.js Icon generation from source PNG
test-discovery.js SSDP discovery probe (development utility)
tests/
unit/ Jest unit tests
blackbox/ Blackbox HTTP server tests
e2e/ Playwright layout tests
MIT — see LICENSE.

