A web-based proxy for Tablo TV (4th generation) that lets you watch live TV and recordings in a browser. The Tablo outputs MPEG-2 which browsers can't play natively — this proxy transcodes to H.264/HLS on the fly using FFmpeg.
- Live TV — watch any OTA channel via your Tablo
- Recordings — play back recorded shows with full seek support
- Local archive — finished recordings are automatically transcoded once (hardware) to H.264 MP4 on local disk, in a Plex/Jellyfin-compatible layout; archived copies play as static files with instant native seek and no per-viewer transcode
- Recordings views — flat by date, rolled up by show, or alphabetical
- TV Guide (EPG) — browse what's on now and upcoming
- Channel favorites — filter the channel list to only the channels you care about
- Seek bar — server-side seek for recordings (FFmpeg restarts at the new offset)
- Live + Recording hybrid — if a live channel is being recorded, you get full DVR controls (seek back to the start)
- Fullscreen & theater mode —
ffor fullscreen,tfor theater mode - Volume control — mute (
m) and volume slider - Keyboard shortcuts — space/k (play/pause), j/l or arrows (±10s), and more
- VLC/mpv support — MPEG-TS stream endpoints for external players
- Node.js 18+
- FFmpeg installed and on your PATH
- A Tablo (4th gen) on your local network
- A Tablo account (email/password)
npm install
cp .env.example .env
# Edit .env with your Tablo credentialsnode app.jsThen open http://localhost:9480 in your browser.
For VLC or mpv, use the MPEG-TS endpoints directly:
http://localhost:9480/stream/channel/<channelId>
http://localhost:9480/stream/recording/<recordingId>
- Authenticates with the Tablo cloud API to get device access tokens
- Discovers the local Tablo device on your network
- Signs local API requests using HMAC-MD5 (the same auth the official app uses)
- Starts an FFmpeg transcode from MPEG-2 → H.264 HLS when you select a channel/recording
- Serves the HLS segments to the browser via hls.js
| Variable | Default | Description |
|---|---|---|
TABLO_EMAIL |
(required) | Your Tablo account email |
TABLO_PASSWORD |
(required) | Your Tablo account password |
PORT |
8181 |
Server port |
GUIDE_DAYS |
2 |
Days of guide data to fetch (1-7) |
LIBRARY_DIR |
/mnt/storage/tablo |
Where archived recordings (MP4 + metadata) are stored |
AUTO_ARCHIVE |
1 |
Automatically archive finished Tablo recordings (0 to disable) |
AUTO_DELETE_FROM_TABLO |
0 |
Delete the Tablo copy after a verified archive (1 to enable) |
ARCHIVE_POLL_MINUTES |
10 |
How often to sweep the Tablo for new finished recordings |
MIT